Redis远程字典服务器(2) —— 全局命令

news2024/9/23 9:35:27

一,使用官方文档

  1. 学会使用文档,是一个优秀程序员的必备技能
  2. Redis的命令非常多(上百个),因为Redis是通过键值对存储数据的,key为string类型,但是value可以是其它的数据类型(字符串,哈希表,列表,集合等),所以不同的数据结构的操作命令都不一样。
  3. 全局命令指的是能够搭配任意一个数据结构来使用的命令
  4. 官方的命令查询文档网址为 Commands | Docs
  5. 虽然Redis这种知名软件,都是有中文文档的,但是还是建议看英语;后面工作中可能会用到不太知名的软件/库,虽然没有中文文档,但是一定也有英文文档,所以需要有一定的英语基础

二,set / get

这是Redis最核心的两个命令,Redis是按照键值对存储数据的,set就是存进去key和value,get就是根据key查询value,如下图:

也可以使用 mset和mget,一次插入或查询多组键值对 :

使用还是比较简单的,至于set时后面还有一些选项,以后再讲

对于key和value,可以加双引号,也可以加单引号,也可以不加;并且Redis的命令也支持双击Tap键自动补全,也不区分大小写 

三,keys

3.1 使用

keys是用来查询当前服务器上匹配的key,通过一些特殊符号(通配符)来描述key的模样,匹配上述模样的key就能被查询打印出来

pattern 表示包含特殊字符的字符串,可以翻译成“样式” 或者 “模式”,pattern可以有以下几种:

  • h?llo 匹配 hello , hallo 和 hxllo (?是匹配一个字符
  • h*llo 匹配 hllo 和 heeeello (*是匹配所有长度的字符串
  • h[ae]llo 匹配 hello 和 hallo 但不匹配 hillo ( [] 方括号里面的字母单独匹配
  • h[^e]llo 匹配 hallo , hbllo , ... 但不匹配 hello ([^]匹配除了方括号里面的
  • h[a-b]llo 匹配 hallo 和 hbllo ( [-] 匹配范围内的字符,[a-z]这个就是匹配所有字母的)

keys * 是查询所有的key,将当前所有的key全部打印到屏幕上

注意:keys命令的时间复杂度是O(N),所以在生产环境上,一般都禁止使用keys,尤其是大杀器keys *的时间非常长,就使Redis服务器被阻塞了,无法给其它客户端提供服务,后果是灾难性的。

场景:redis经常用于做缓存,挡在MySQL前面替MySQL负重前行,万一redis被一个keys *阻塞住了,此时其它的查询redis操作就超时了,此时这些请求就会直接查MySQL,然后突然一大堆请求过来了,MySQL可能就会措手不及直接挂了,这样的话系统就基本瘫痪了,如果你要是没能及时发现并及时恢复的话,年终奖就没了,更严重工作也就那啥了。

 3.2 关于生产环境

上面提到了下生产环境,那么下面来谈谈以后工作会遇到的几种环境:

  1. 办公环境:入职公司之后,公司给你发个电脑,现在的办公电脑一般8核16G内存512G,以后你在这个电脑上做ppt表格啥的,这个机器就叫做办公环境。
  2. 开发环境:有时候和办公环境一样,直接在这个电脑上写代码编译运行测试啥的,也有时候开发环境是单独的服务器,对于后端开发,后者概率大些;对于 前端/客户端 前者概率大。因为有的后端程序会比较复杂:①编译一次时间很久(C++),时间长要和 #include 要接锅 --> C++23引入module,能减少编译时间,但是大部分公司用的是比较老版本的C++,暂时不会引入module --> 所以就要使用一些高性能的服务器进行编译,会比本机电脑快很多    ②有的程序一启动,要消耗很多的CPU和内存资源,办公电脑可能难以支撑    ③有的程序比较依赖Linux,在Windows上环境难搭建
  3. 测试环境:测试工程师使用,也是属于单独的配置比较好的服务器(比如28核128G内存4T存储的主机)
  4. 线上环境/生产环境:产品开发和测试完成,正式部署到服务器并且对外开放的运行的环境,是直接面向用户的,一但是生产环境出问题,对于用户的使用会直接产生影响,直接影响到公司的营收,未来咱们去操作线上环境的任何一个设备或者程序,都要怀着12分的谨慎
  5. 而且以后我们也是要去操作生产环境的,把一个程序“上线”了才算是把活干完了,上线也可以认为是程序员的一个重要考核指标。,衡量一个实习生能不能转正留用,就看上线次数,假如一两个月才上线一次,基本凉凉,如果一周上线一两次,基本稳

四,exists

该命令负责判断一个或多个key是否存在,并返回个数

注意 一次查三个,和三次查一个,乍一看没区别,但是区别很大很大

Redis是一个客户端 - 服务器结构的程序,两者之间是通过网络进行通信的,学习过计算机网络我们知道,我们输入一个命令,都是通过网络协议栈,将命令字符数据一层层往下封装各协议的报头形成报文再发送的,分开的exists的写法会产生更多轮次的网络通信,而网络通信的成本比较大的

再比如一个场景,你打电话给别人说“你好”两个字,我们可以打一次电话将两个字一次性说完,也可以打两次电话一次说一个字,那么这两种方式哪个快大家都知道哈

五,del

该命令的作用是删除指定的key,可以一次删多个

问题:Redis的删除是否和MySQL的删除一样,成本很大呢?

解答:影响不会很大。redis主要的作用是作为缓存,此时里面存的数据只是一个热点数据,全量数据还是存在mysql中的,热点数据也是会经常变化的,所以把redis中的几个key删除几个,影响不大。当然把所有数据或者一大半数据干掉了,问题还是有点大的。相比之下,mysql的drop和delete from,代价是很大的。

如果是把redis作为数据库MySQL作为缓存,上面的情况就反过来了

六,expire / ttl

6.1 expire使用

主要作用是用来给key设定过期时间,单位为秒,因为上面也说了热点数据会经常变化,所以我们可以使其自动化。

 key的存活时间超过这个指定的值,就会被自动删除,有用且实用,很多业务场景有时间限制的,比如手机号验证码,外卖优惠券,都是在指定时间内有效

还有基于redis实现一个分布式锁,以前多线程的锁,都是在一个主机的一个程序里,分布式系统就是多个主机多个程序了,再需要互斥效果的话就所以需要分布式互斥锁,往redis里面写一个特殊的key value。为了避免出现不能正确解锁的情况, 通常都会在加锁的时候设置一下过期时间

还有以秒为单位对主机来说太慢了,我们可以使用pexpire,这个单位就是毫秒了

6.2 ttl使用

这个命令作用是查key的过期时间还剩多少,当返回-2时表示key不存在或已经过了过期时间被删除了:

在IP协议的报头字段中,有一个字段就是TTL,表示该报文能够跳转的路由器的最大个数,IP中的TTL表示次数,不是时间,和这个ttl不一样

6.3 Redis过期策略

一个redis可能同时存在很多key,这些key也有很大一部分有过期时间,那么redis服务器咋知道那些key已经过期要被删除,哪些还没过期呢?

  1. 如果直接去遍历所有的key,效率很低的,该方法直接排除
  2. redis整体的策略是两方面:定期删除,惰性删除。两种策略相结合
  3. 惰性删除:假设key已经到了过期时间,但是暂时还没删,紧接着后面有一次访问到了这个key,这时候查时间,发现到期了,于是这次访问会让redis删除这个key,同时返回一个nil
  4. 定期删除:和惰性删除一起搞,而且也不一次性全遍历完,抽取一部分验证过期时间,保证抽取简单的过程足够快

问题:为啥对于定期删除的时间要有明确要求呢?
解答:因为Redis是单线程的程序,主要的任务还是处理命令任务,还有刚才扫描过期key,如果扫描消耗时间太久了,会导致前者正常处理命令被阻塞,产生类似执行key * 这样的效果

虽然有了上述两种策略结合,但整体的效果一般,仍然可能会有很多过期的key残留,所以Redis还提供了一系列的内存淘汰策略,后面再细讲

七,type

该命令用于查看key对应的value的数据类型

lpush插入链表value,再type就是list类型在redis中,操作不同数据结构使用的命令差别是很大的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1993794.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

javascript-动态增加和删除表格的行

本地环境:win10 / centos6 , python3 实现效果 点击添加峰图按钮即可增加一行,点击每行右侧的删除按钮即可删除行。 初始状态: 点击后: 实际生成的html内容类似下图,可以看到,只有id这样需要…

VMware capacity mismatch for disk错误解决办法

因为业务或者学习很多时候我们要用到虚拟机,当我们使用vmware去打开VirtualBox导出的文件虚拟机镜像时会发生capacity mismatch for disk错误,同时在网上查询没有完整通俗易懂的解决方案,我本人也遇到了这个错误,经过测试以后写下…

arcgis server 发布地图服务相关问题

地图类型选择feature access 发布后,存在个别图层失败, 配置符号后,发布地图服务时,选择了Map Server 和Feature Access后,地图发布成功,但是对于feature server 类型中部分图层失败,在服务目录…

【题解】【数学】—— [CSP-J2019 江西] 次大值

【题解】【数学】—— [CSP-J2019 江西] 次大值 [CSP-J2019 江西] 次大值题目描述输入格式输出格式输入输出样例输入 #1输出 #1输入 #2输出 #2输入 #3输出 #3 提示 解法1.暴力枚举(非正解)1.1.题意分析1.2.代码 解法2.总结规律(正解)2.1.题意分析2.1.1.解题思路2.2.2.功能拆解 …

5个适用于Linux系统的PDF转Word工具

凭借其跨平台和设备的统一标准、兼容性和规模小巧等主要优点,可携带文档格式(PDF)可谓最主流的文件格式之一。 市面上有许多查看PDF文件的强大工具,因此所有Linux系统的用户都可以根据自身喜好找到合适的PDF查看工具。然而&#x…

三星、小米和 OPPO设备实验室将采用Android设备流技术

早在 5 月份的年度开发者大会上,Google就发布了 Android 设备流测试版。开发人员可以在Google数据中心的真实物理设备上更轻松、更互动地测试自己的应用程序,这些设备会直接串流到 Android Studio。今天,Google宣布与三星、小米和 OPPO 合作扩…

染色法+组合数学,CF 557D - Vitaly and Cycle

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 557D - Vitaly and Cycle 二、解题报告 1、思路分析 t 的取值范围为:[0, 3] 0:本身有奇环,样例说明方案为1 1:存在偶数长度路径,连接一下就行&a…

【数据结构】顺序表实现

0. 前言 小伙伴们大家好,从今天开始,我们就开始学习《数据结构》这门课程~ 首先想给大家讲讲什么是数据结构? 0.1 数据结构是什么? 数据结构是由“数据”和“结构”两词组合⽽来。 什么是数据? 比如常⻅的数值1、…

Visionpro二次开发学习笔记8-如何将静态或交互式图形添加到CogDisplay中

如何将静态或交互式图形添加到CogDisplay中 CogDisplay支持两种类型的图形:静态图形和交互式图形。静态图形一旦添加到显示中,就无法移动或更改。静态图形不能添加提示文本(TipText)。 交互式图形在启用图形的交互属性时&#x…

【数据结构】-----二叉搜索树(C++)

目录 前言 一、是什么 ​编辑 二、实现 Ⅰ、结点类 Ⅱ、结构及基本接口实现 ​编辑 ①插入 ②查找 ③删除(重难点) 情况一:待删除结点为叶子结点(无孩子) 情况二:待删除结点存在一个孩子结点(可能左/右) 情况三:待删除结点存在…

【iOS】—— 事件传递链和响应者链总结

事件传递链和响应者链总结 1. 事件传递链:事件传递链:传递流程:总结第一响应者: 2. 响应者链响应者链传递流程总结响应者链流程 总结: 之前也学习过这个内容这次在复习的时候,就想着写一下总结:…

Linux部署python3.0版本——及基本操作

(一)部署环境 首先查看列表,找到python3.0的包 yum list installed|grep python 如果没有,是因为yum源的问题,可部署阿里云镜像然后下载epel包,这里的内容可参考前面的阿里云镜像部署 然后进行下载 yum…

TensorRT-LLM中的 Quantization GEMM(Ampere Mixed GEMM)的 CUTLASS 2.x 实现讲解

在LLM的推理和部署中,低精度量化对于性能的提升十分关键,本次分享将为大家介绍TRT-LLM中是如何基于CUTLASS 2.x来实现PerChannel/AWQ/SmoothQuant等量化方法在模型推理过程的计算。Slides来自BiliBili NVIDIA英伟达频道 上传的《TensorRT-LLM中的 Quanti…

最新CSS3伪类和伪元素详解

第4章 伪类和伪元素 4.1结构伪类 E:first-child{},第一个元素 样式&#xff1a; p:first-child {color: red; } <div><p>Lorem ipsum</p><p>Dolor sit amet.</p> </div> 4.1.1nth-*伪类 以计数为基础的&#xff0c;默认情况下&…

某赛通电子文档安全管理系统 CDGAuthoriseTempletService1 SQL注入漏洞复现(XVE-2024-19611)

0x01 产品简介 某赛通电子文档安全管理系统(简称:CDG)是一款电子文档安全加密软件,该系统利用驱动层透明加密技术,通过对电子文档的加密保护,防止内部员工泄密和外部人员非法窃取企业核心重要数据资产,对电子文档进行全生命周期防护,系统具有透明加密、主动加密、智能…

RPA在政务服务中的挑战与解决方案

随着数字化时代的到来&#xff0c;数字政务的建设已成必然趋势&#xff0c;RPA作为数字化转型的重要工具之一&#xff0c;能够帮助政府单位快速实现业务流程的自动化和智能化&#xff0c;提高工作效率和质量&#xff0c;为建设数字政务提供强有力的支持&#xff0c;因此正被越来…

深植根基、蓬勃向上 | openKylin 2.0正式发布!

2024年8月8日&#xff0c;openKylin 2.0版本正式发布&#xff01;该版本默认搭载Linux 6.6 LTS内核&#xff0c;完成180操作系统核心组件自主选型升级&#xff0c;深度融合AI技术&#xff0c;上线麒麟AI助手等实用AI功能&#xff0c;并为用户带来包括开明软件包格式、不可变系统…

Unity 在Editor下保存对Text组件的文本的修改

Unity 在Editor下保存对Text组件的文本的修改 /****************************************************文件&#xff1a;TimeStampForText.cs作者&#xff1a;lenovo邮箱: 日期&#xff1a;2024/8/8 1:9:21功能&#xff1a; *************************************************…

聚观早报 | 小米15 Ultra相机规格;一加Ace 5参数规格

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 8月8日消息 小米15 Ultra相机规格 一加Ace 5参数规格 iOS 18.1代码曝光 SK电讯加大AI投入 Figure 02 人形机器人…

【VScode】如何在anaconda虚拟环境中打开vscode项目

文章目录 【必备知识】打开anaconda虚拟环境切换到项目工作目录激活anaconda虚拟路径让vscode从当前目录打开 【必备知识】 anaconda环境变量配置及配置python虚拟环境 https://blog.csdn.net/xzzteach/article/details/140621596 打开anaconda虚拟环境 切换到项目工作目录 …