【Redis】Redis常用命令-getsetkeysexistsexpirettltype

news2025/7/20 6:23:15

文章目录

  • 读取文档注意事项
  • set命令
  • get命令
  • 全局/通用命令
    • KEYS
    • EXISTS
    • DEL
    • EXPIRE
    • TTL
    • TYPE

读取文档注意事项

官方文档链接:https://redis.io/

注意:redis的命令不区分大小写

在redis文档给出的语法格式说明:

[]:相当于一个独立的单元,表示可选项,可有可无,[][]之间可以同时存在

|:或者的意思,多个只能出现一个

关于O(N)

N可以表示的含义:

  • 1.redis当中key的个数
  • 2.当前命令当中写的key的个数 =>此时可以看作是O(1)
  • 3.当前key对应的value里面的元素个数

关于有序

1.指的是 升序 / 降序

2.指的是顺序很关键,如果把元素位置颠倒,顺序调换,那么得到的内容会出错

修改配置文件

配置文件的路径为:/etc/redis/redis.conf,如果修改配置文件需要重新启动服务器才能生效

set命令

功能:存储K-V ,set可以填写两个参数(key-value),参数类型必须是字符串

  • 对于上述key-value,不需要加""就是表示字符串的类型,给他们加上双引号或单引号都可以

get命令

功能:根据Key获取Value。get 后跟key,就可以得到value,并且是带双引号,是字符串类型的。

  • 如果不存在key,就会返回nil,和null一个意思

image-20231020203333900


全局/通用命令

redis支持很多数据结构,整体上来说是键值对结构,k固定是字符串,v可以有多种类型,最常见的类型为:字符串,哈希表,列表,集合,有序集合。

操作不同的数据结构,都会有不同的命令,但是还有一些命令,在这些数据结构上都能使用,称作全局命令


KEYS

功能:用来查询当前服务器上匹配的key,可以通过一些特殊符号(通配符)来筛选key

命令语法: :KEYS pattern(样式、模式,描述字符串的模样)

1.*:匹配任意字符序列(0个或者多个任意字符)

  • KEYS * 匹配所有的键,展示当前服务器上所有的key
  • KEYS prefix* 匹配以 “prefix” 开头的键,如 “prefix123”、“prefixabc”。
  • KEYS *suffix 匹配以 “suffix” 结尾的键,如 “abcsuffix”、“defsuffix”

image-20231020204548359

2.?:匹配单个字符

  • KEYS key? 匹配以 “key” 开头,并且后面跟着一个字符的键,如 “key1”、“keyA”。

image-20231020204616760

3.[字符 abc]:匹配在括号内的任一字符

  • KEYS key[123] 匹配以 “key” 开头,并且后面跟着 “1"或"2” 或 “3” 的键,如 “key1”、“key2”、“key3”。

image-20231020204637027

4.[范围 a-b]:匹配在范围内的任一字符

  • KEYS key[1-5] 匹配以 “key” 开头,并且后面跟着数字1~5任意一个数字的键,如 “key1”、“key2”、“key3”。
  • KEYS k[a-b]ey 匹配以 “k” 开头,并且后面跟着字母a-b任意一个字母的键,如 “kaeyd”、“kbey”。

image-20231020204713024

5.[^字符]:匹配不在括号内的任一字符

  • KEYS key[^abc] 匹配以 “key” 开头,并且后面跟着的不是 “a"或"b” 或 “c” 的字符的键

image-20231020204731538

注意:keys 的时间复杂度是 O ( N ) O(N) O(N),因为需要遍历所有的key,然后匹配出符合要求的键,所以在生产环境当中一般禁止使用keys,尤其是keys *,它是匹配redis中的所有键,由于生产环境中key非常多,redis是一个单线程的服务器,就会导致执行keys *时间非常长,那么redis服务器就被阻塞,无法为其它客户端提供服务,给用户体验造成影响

redis的一个经典用途就是作为数据冷热分离的热点数据缓存,热点数据首先是去查redis的,如果redis被阻塞了,此时其它的查询redis操作就超时了,此时这些请求只能去查数据库了,大量的数据同时请求数据库的查询,可能会导致过载,数据库也无法正常提供服务了,整个系统基本就处于瘫痪状态


EXISTS

功能:用于检查给定键是否存在于数据库中。接受一个或多个键作为参数,并返回存在的键的数量

时间复杂度:$ O(1)$

命令语法: :EXISTS key [key ...]

例如:检测key1和key2是否存在

  • 写法1:写两条redis命令
  • 写法2:写一条redis命令

image-20231020204936431

上述哪种写法更好呢?

因为redis是基于客户端-服务器架构的,通过网络通信的中间件。因此上述分开查询key是否存在和同时检查多个键是否存在是有区别的,分开查询的写法,会产生更多次数的请求响应,也即网络通信。和直接操作内存来说,网络通信成本比较高,效率比较低,而同时检查多个键只需要一次请求响应,减少网络通信

image-20231020205222170

所以redis支持一个命令能操作多个key来减少网络通信


DEL

功能:删除指定的key。和EXISTS命令相同,也可以支持操作多个key,返回删除key的个数

时间复杂度: O ( 1 ) O(1) O(1)

命令语法: DEL key [key......]  

在redis当中删除,和mysql中的删库删表来说危险性比较低,因为redis是作为缓存,如果丢失少量的数据,问题不大,而MySQL不能丢失数据,丢失了数据就可能后续查不到了

但是如果丢失大批的数据,那么客户端来的查询先去redis当中进行查找,找不到就会到MySQL当中进行查找,就可能会导致MySQL过载,导致系统瘫痪。


EXPIRE

功能:用于为键设置过期时间。接受两个参数:键 以秒为单位的过期时间

  • 设置键的过期时间 过期时间到达后,该键将自动被删除

注意:key必须已经存在才能设置,如果设置成功返回1,失败返回0

时间复杂度: O ( 1 ) O(1) O(1)

命令语法: EXPIRE  key  seconds   

image-20231020212530487

补充:基于redis实现的分布式锁,为了避免出现不能正确解锁的情况,加锁时通常会设置一个过期时间,时间到达之后会自动解锁


TTL

功能:检查键的过期时间

返回:要检查的键的剩余过期时间,以秒为单位,

  • 如果键不存在 或者 没有设置过期时间,则返回-1
  • 如果键已经过期,则返回-2

时间复杂度: O ( 1 ) O(1) O(1)

命令语法: TTL key 

image-20231020212437831

注意:EXPIRE和TTL命令都有对应的⽀持毫秒为单位的版本:PEXPIRE和PTTL


TYPE

功能:用于获取指定键的数据类型

可能返回的结果为:none string list hash set zset stream (redis作为消息队列的时候会使用这个类型作为value)

命令语法: TYPE key

使用例子:

返回值为"string",表示键"mykey"的数据类型是字符串(String)。
127.0.0.1:6379> type mykey
string
 
返回值为"list",表示键"mylist"的数据类型是列表(List)。
127.0.0.1:6379> LPUSH mylist "value"
(integer) 1
127.0.0.1:6379> type mylist
list
 
返回值为"set",表示键"myset"的数据类型是集合(Set)。
127.0.0.1:6379> SADD myset "value"
(integer) 1
127.0.0.1:6379> type myset
set

返回值为"hash",表示键"myhash"的数据类型是哈希(Hash)。
127.0.0.1:6379> HSET myhash field "value"
(integer) 1
127.0.0.1:6379> type myhash
hash
 
返回值为"zset",表示键"myzset"的数据类型是有序集合(Sorted Set)。
127.0.0.1:6379> ZADD myzset 1 "value"
(integer) 1
127.0.0.1:6379> type myzset
zset
 
返回值为"nil",表示键"nonexistingkey"不存在。
127.0.0.1:6379> TYPE nonexistingkey
none

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

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

相关文章

(免费领源码)Java#ssm#MySQL高校知识共享系统设计与实现35050-计算机毕业设计项目选题推荐

摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对高校知识共享系统等问题,对高校…

uniapp-自定义表格,右边操作栏固定

uniapp-自定义表格,右边操作栏固定 在网上找了一些,没找到特别合适的,收集了一下其他人的思路,基本都是让左边可以滚动,右边定位,自己也尝试写了一下,有点样式上的小bug,还在尝试修…

香港金融科技周2023:AIGC重塑金融形态

10月31日,由香港财经事务及库务局与投资推广署主办的“香港金融科技周2023大湾区专场”盛大启幕。中国AI决策领先企业萨摩耶云科技集团创始人、董事长兼 CEO林建明受邀参加圆桌会议,与中国内地、香港以及全球金融科技行业顶尖人才、创新企业、监管机构和…

Apache Shiro 越权访问漏洞 CVE-2020-1957 漏洞复现

一、漏洞描述 Apache Shiro 是一款开源安全框架,提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用,同时也能提供健壮的安全性。 CVE-2020-1957,Spring Boot中使用 Apache Shiro 进行身份验证、权限控制时,可以精心构造…

Java入门必刷的基础题1(八道)

目录 1. 第一题 2. 判定一个数字是否是素数 3. 打印 1 - 100 之间所有的素数 4. 输出 1000 - 2000 之间所有的闰年 5. 输出乘法口诀表 6. 求两个正整数的最大公约数 7. 求二进制中 1 的个数 8.分别输出二进制中的奇数位和偶数位 下面的源码大多只有方法体,需…

玩家必备,2款顶级游戏录屏软件!

“游戏怎么录屏呀?最近迷上了网游,觉得自己的游戏技术挺厉害的,想把游戏视频录下来出一个教程,方便给朋友进行参考,但是我不会录屏,大家有没有游戏录屏的软件或者方法推荐一下。” 随着游戏产业的飞速发展…

用二维码搭建设备巡检系统,轻松实现扫码巡检和数字化台账

针对设备状态不透明、纸质记录效率低、故障报修不及时等设备点巡检的常见问题,可以在草料二维码上自主搭建涵盖点检、巡检、报修、维修、保养等功能的管理系统,无需安装APP,微信扫码就能查看设备档案、用表单替代纸质检查表。 譬如“台州沿海…

什么是威廉姆斯的三维结构?澳福详解作用

从心理学视角出发,威廉姆斯将市场视为一个三维结构,包含了时间、价格与交易者的心理三大组成部分。他提出的成功交易策略是“随波逐流,乘风破浪,随波逐流”。为了培养这种思维方式,交易者应学会如何将自身的观念、观点…

虹科示波器 | 汽车免拆检修 | 2012 款上汽大众帕萨特车 发动机偶尔无法起动

一、故障现象 一辆2012款上汽大众帕萨特车,搭载CFB发动机,累计行驶里程约为12万km。车主反映,将点火开关置于起动挡,偶尔只能听到“咔哒”一声,起动机没有反应,类似蓄电池亏电时起动发动机的现象。为此&…

AI 革命:最佳 txt 转纹理工具

推荐稳定扩散AI自动纹理工具: DreamTexture.js自动纹理化开发包 游戏产业和人工智能革命 随着人工智能革命迎来一个具有无可比拟潜力的新时代,游戏行业正处于巨大转变的边缘。随着开发人员利用人工智能的力量,他们正在解锁创新方法来增强游戏…

2023年测试工程师想进BAT必须具备的几项素质!

我发现一个奇怪的现象:总是听到身边的程序员朋友谈论BAT(中国大陆互联网的三大巨头:百度、阿里、腾讯)以及如何进入BAT,却鲜少有测试会去谈论或者考虑这些问题。 我不知道这是为什么,或者我就算知道也只是…

剑指Offer || 084.全排列||

题目 给定一个可包含重复数字的整数集合 nums ,按任意顺序 返回它所有不重复的全排列。 示例 1: 输入:nums [1,1,2] 输出: [[1,1,2],[1,2,1],[2,1,1]]示例 2: 输入:nums [1,2,3] 输出:[[1…

【Git】Git使用指南+上传项目踩坑总结

记录Git 使用和命令解读: git init git add .git commit -m "first commit"git branch -M maingit remote add origin https://github.com/xxx.gitgit push -u origin main 这是最经常用到的使用 git上传项目的代码,值得注意的是&#xff0c…

进程间通信(IPC)

进程间通信概述 进程间通信是指不同进程之间交换或传播信息。进程间通信的方式通常有管道通信、消息队列、信号量、共享存储、Socket、Stream等,其中Socket和Stream支持不同主机上的两个进程间的通信。 管道(无名管道): 管道通信…

无需频繁登录支付宝网站即可完成商家转账,实时到账,方便安全快捷

大家好,我是小悟 转账到支付宝账户是一种通过 API 完成单笔转账的功能,支付宝商家可以向其他支付宝账户进行单笔转账。 商家只需输入另一个正确的支付宝账号,即可将资金从本企业支付宝账户转账至另一个支付宝账户。 该产品适用行业较广&am…

MATLAB中preparets函数用法

目录 语法 说明 示例 准备开环和闭环网络的数据 preparets函数的功能是为网络模拟或训练准备输入和目标时间序列数据 语法 [Xs,Xi,Ai,Ts,EWs,shift] preparets(net,Xnf,Tnf,Tf,EW) 说明 [Xs, Xi, Ai, Ts, EWs, shift] preparets(net, Xnf, Tnf, Tf, EW) 这个函数接受…

云安全-云原生基于容器漏洞的逃逸自动化手法(CDK check)

0x00 docker逃逸的方法种类 1、不安全的配置: 容器危险挂载(挂载procfs,Scoket) 特权模式启动的提权(privileged) 2、docker容器自身的漏洞 3、linux系统内核漏洞 这里参考Twiki的云安全博客,下…

flutter之bloc使用详解

flutter中一切皆为Widget,因此在我们开发中,往往业务和UI逻辑写在一起,这样不利于代码维护,因此状态管理框架久诞生了,这篇就开始讲一讲Bloc。 对于Bloc库有两个,如下图: flutter_bloc其实是对…

【webrtc】 对视频质量的码率控制的测试与探索

目录 环境设置 transport-cc goog-remb (webrtc中的两种码率算法) 修改成remb算法 测试 效果 后续 可参考工程 环境设置 要到meshx上操作 telnet 112 然后执行factory_env show |grep meshx_ip 之后telnet meshx_ip 用户名admin 密码****.119 执行一下r…

IDEA连接数据库之后没有显示数据库里面的表

IDEA连接数据库之后没有显示数据库里面的表 第一步:点击下面红框处 第二步:点击Schemas那里 第三步:选择自己当前数据库的名称 最后回到database页面查看,相关数据可显示 如图: