Redis 7.x 系列【5】 基础命令

有道无术,术尚可求,有术无道,止于术。

本系列Redis 版本 7.2.5

源码地址:https://gitee.com/pearl-organization/study-redis-demo

文章目录

    • 1. 概述
    • 2. 常用命令
      • 2.1 KEYS
      • 2.2 DEL
      • 2.3 EXISTS
      • 2.4 EXPIRE
      • 2.5 TTL
      • 2.6 RENAME
      • 2.7 TYPE
      • 2.8 PERSIST

1. 概述

Redis 作为 KV 型数据库,基础命令则主要包含了针对 Key 的相关操作,7.x 版本包含的所有命令如下所示:

命令
COPY将存储在 key 处的值复制到目标 key
DEL用于删除 key
DUMP序列化给定 key ,并返回被序列化的值
EXISTS检查给定 key 是否存在
EXPIRE为给定 key 设置过期时间
EXPIREAT用于为 key 设置过期时间,接受的时间参数是 UNIX 时间戳
EXPIRETIMEkey 将在该时间到期,返回 UNIX 时间戳
KEYS查找所有符合给定模式的 key
MIGRATEkey 原子性地从当前实例传送到目标实例的指定数据库上
MOVE将当前数据库的 key 移动到给定的数据库中
OBJECT ENCODING查看存储在 key 中的对象的内部编码
OBJECT FREQ查看存储在 key 中的对象的对数访问频率计数器
OBJECT IDLETIME查询自上次访问 key 中存储的值以来的时间(以秒为单位)
OBJECT REFCOUNT查看存储在 key 的引用计数
PERSIST移除 key 的过期时间,key 将持久保持
PEXPIRE设置 key 的过期时间,以毫秒计
PEXPIREAT设置 key 过期时间的时间戳(unix timestamp),以毫秒计
PEXPIRETIMEPEXPIRETIMEEXPIRETIME具有相同的语义,但以毫秒而不是秒为单位返回Unix的绝对过期时间戳
PTTL以毫秒为单位返回 key 的剩余的过期时间
RANDOMKEY从当前数据库中随机返回一个 key
RENAME修改 key 的名称
RENAMENX仅当 newkey 不存在时,将 key 改名为 newkey
RESTORE反序列化给定的序列化值(由 DUMP 生成),并将它和给定的 key 关联
SCAN迭代数据库中的 key
SORT对元素进行排序并显示排序结果,不影响这些类型里面存储的数据的排序
SORT_ROSORT命令的只读变体
TOUCH更改 key 的最后访问时间
TTL以秒为单位,返回给定 key 的剩余生存时间
TYPE返回 key 所储存的值的类型
UNLINK异步删除一个或多个 key
WAIT用于阻塞客户端,直到之前的写命令已被写到指定数量的副本为止
WAITAOF用于阻塞客户端,直到之前所有写命令已被同步到 AOF 文件为止

2. 常用命令

2.1 KEYS

KEYS 命令用于查找所有匹配给定模式的 key ,返回匹配的 key 的列表。操作的时间复杂度是 O(N),但是常量时间相当小,在一个普通笔记本上扫描 100 万个 key 只要 40 毫秒。适合用来调试和特殊操作,比如改变键空间布局。

注意事项:

  • 生产环境谨慎使用,数据量很大时会影响性能。
  • 不要在代码中使用 KEYS ,如果你需要一个寻找键空间中的 key子集,考虑使用 SCAN命令 或 Set 集合。

基本语法:

KEYS pattern

匹配模式:

  • h?llo 匹配 hellohallohxllo
  • hh*llo 匹配 hlloheeeello
  • hh[ae]llo 匹配 hello hallo,不匹配 hillo
  • hh[^e]llo 匹配 hallo, hbllo... 不匹配 hello
  • hh[a-b]llo 匹配 hallohbllo

示例:

# 创建一些 key 并赋值
redis> MSET firstname Jack lastname Stuntman age 35
"OK"
# 查找含有 name 的 key
redis> KEYS *name*
1) "firstname"
2) "lastname"
# 查找以 a 为开头长度为 3 的 key
redis> KEYS a??
1) "age"
# redis 获取所有的 key 使用 *。
redis> KEYS *
1) "firstname"
2) "lastname"
3) "age"

2.2 DEL

DEL 命令用于删除给定的一个或多个 key ,不存在的 key 会被忽略,返回值为被删除 key 的数量。

基本语法:

DEL key [key ...]

示例:

redis> SET key1 "Hello"
"OK"
redis> SET key2 "World"
"OK"
redis> SET key3 "redis.com.cn"
"OK"
redis> DEL key1 key2 key3 key4
(integer) 3

2.3 EXISTS

DEL 命令用于检查给定 key 是否存在,检查多个 key 返回值为存在的 key 的个数,检查单个 key 返回 10

注意事项:

  • 如果相同的 key 在参数列表中出现了多次,它会被计算多次。所以,如果somekey存在,EXISTS somekey somekey 命令返回 2

基本语法:

EXISTS key [key ...]

示例:

redis> SET key1 "Hello"
"OK"
redis> EXISTS key1
(integer) 1
redis> EXISTS nosuchkey
(integer) 0
redis> SET key2 "World"
"OK"
redis> EXISTS key1 key2 nosuchkey
(integer) 2

2.4 EXPIRE

EXPIRE 命令用于设置 key 的过期时间(秒),设置的时间过期后,key 会被自动删除,带有超时时间的 key 通常被称为易失的。

注意事项:

  • 已经设置过期的 key,可以调用 EXPIRE 重新设置。在这种情况下 key 的生存时间被更新为新值。
  • 已存在的旧 key 使用 RENAME 改名,那么新 key 会继承所有旧 key 的属性。key 使用 RENAME 改名后,过期时间被转移到新 key 上。
  • 通过使用 PERSIST 命令把 key 改回持久的 key,这样 key 的过期时间也可以被清除。
  • 超时时间只能使用删除 key 或者覆盖 key 的命令清除,包括 DEL, SET, GETSE 和所有的 *STORE 命令。
  • 对于修改 key 中存储的值,而不是用新值替换旧值的命令,不会修改超时时间。
  • 使用 EXPIRE/PEXPIRE 设置的过期时间为负数,或者使用EXPIREAT/PEXPIREAT设置过期时间戳为过去的时间会导致 key 被删除。
  • key 的过期时间以绝对 Unix 时间戳的方式存储。这意味无论 Redis 是否运行,过期时间都会流逝。
  • 服务器的时间必须稳定准确,这样过期时间才能更准确。如果在两个时间相差较多的机器之间移动 RDB 文件,那么可能会出现所有的 key 在加载的时候都过期了。
  • 运行的 Redis 也会不停的检查服务器的时间,如果你设置一个带有 1000 秒过期时间的key,然后你把服务器的时间向前调了 2000 秒,那么这个 key 会立刻过期,不是等 1000 秒后过期。

返回值:

  • 1 :设置超时成功
  • 0key 不存在

基本语法:

EXPIRE key seconds

典型应用场景:

  • 会话 Session
  • 短信验证码

示例:

redis> SET mykey "Hello"
"OK"
redis> EXPIRE mykey 10
(integer) 1
redis> TTL mykey
(integer) 10
redis> SET mykey "Hello World"
"OK"
redis> TTL mykey
(integer) -1

过期策略:

  • 懒惰删除:用户访问某个 key 的时候,如果过期了就立即删除。如果一个 key 已经过期了,如果长时间没有被访问,那么这个 key 就会一直存留在内存之中,严重消耗了内存资源。
  • 定期删除:将所有设置了过期时间的 key放入一个字典中,然后每隔一段时间从字典中随机一些 key检查过期时间并删除已过期的 key。同时,为了保证不出现循环过度的情况,Redis 还设置了扫描的时间上限,默认不会超过 25ms

2.5 TTL

TTL 命令以秒为单位返回 key 的剩余过期时间。

返回值

  • -2key 不存在返回
  • -1key 存在但是没有关联超时时间返回
  • 正整数: 剩余超时秒数

基本语法:

TTL key

示例:

redis> SET mykey "Hello"
"OK"
# key 存在,但没有设置剩余生存时间
redis> TTL mykey
(integer) -1
redis> EXPIRE mykey 10
(integer) 1
# 有剩余生存时间的 key
redis> TTL mykey
(integer) 10

2.6 RENAME

RENAME 命令用于修改 key 的名字为 newkey ,若 key 不存在返回错误。

基本语法:

RENAME key newkey

注意事项:

  • 在集群模式下,keynewkey 需要在同一个 hash slotkeynewkey 有相同的 hash tag 才能重命名。
  • 如果 newkey 存在则会被覆盖,此种情况隐式执行了 DEL 操作,所以如果要删除的 key 的值很大会有一定的延时,即使 RENAME 本身是常量时间复杂度的操作。

示例:

# key 存在且 newkey 不存在
redis> SET mykey "Hello"
"OK"
redis> RENAME mykey myotherkey
"OK"
redis> GET myotherkey
"Hello"
# 当 key 不存在时,返回错误
redis> RENAME fake_key never_exists
ERR ERR no such key
# newkey 已存在时, RENAME 会覆盖旧 newkey
redis> SET pc "lenovo"
"OK"
redis> SET personal_computer "dell"
"OK"
redis> RENAME pc personal_computer
"OK"
redis> GET pc
(nil)
# 原来的值 dell 被覆盖了
redis> GET personal_computer
"lenovo"

2.7 TYPE

TYPE 命令用于以字符串的形式返回存储在 key 中的值的类型, key 不存在时返回 none

基本语法:

TYPE key

示例:

redis> SET key1 "value"
"OK"
redis> LPUSH key2 "value"
(integer) 1
redis> SADD key3 "value"
(integer) 1
redis> TYPE key1
"string"
redis> TYPE key2
"list"
redis> TYPE key3
"set"

2.8 PERSIST

PERSIST 命令用于删除给定 key 的过期时间,使得 key 永不过期。

基本语法:

PERSIST KEY_NAME

返回值:

  • 1 :当过期时间移除成功时
  • 0 :如果 key 不存在或 key 没有设置过期时间

示例:

redis> SET mykey "Hello"
"OK"
# 为 key 设置生存时间
redis> EXPIRE mykey 10
(integer) 1
redis> TTL mykey
(integer) 10
# 移除 key 的生存时间
redis> PERSIST mykey
(integer) 1
redis> TTL mykey
(integer) -1

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

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

相关文章

【Linux】进程间通信_4

文章目录 七、进程间通信1. 进程间通信分类systeam V共享内存消息队列信号量 未完待续 七、进程间通信 1. 进程间通信分类 systeam V共享内存 进程间通信的本质就是让不同进程看到同一份资源。而systeam V是通过让不同的进程经过页表映射到同一块内存空间(操作系…

LED显示屏中什么是静态驱动?什么是扫描驱动?两者的区别是什么?

随着科技的飞速发展,LED显示屏作为现代信息显示技术的重要组成部分,正以其独特的优势引领着显示行业的革新。近日,LED显示屏市场呈现出蓬勃的发展态势,技术创新不断推动行业向前发展,让LED显示屏无论是在商场的广告牌、…

苏东坡传-读书笔记一

太守的官衙位于杭州中心,但是苏东坡却喜欢在较为富有诗意的地方办公。他往往在葛岭下面有十三间房子的寿星院办公,因为那里风光如画。看公文不在寒碧轩,就在雨奇堂。我们记得雨奇堂是从苏东坡西湖诗“山色空濛雨亦奇”而得名的。在这里&#…

04-Shell编程之正则表达式与文本处理器

4.1 正则表达式 4.1.1正则表达式概述 1.正则表达式的定义 正则表达式又称正规表达式,常规表达式。在代码中常简写为regex,regexp,或RE。正则表达式是使用一个字符来描述,匹配一系列符合某个句法规则的字符串,简单的…

【现代操作系统】什么是操作系统

1.前言 现代计算机系统由一个或多个处理器、主存、磁盘、打印机、键盘、鼠标、显示器、网络接口以及各种其他输入/输出设备组成。一般而言,现代计算机系统是一个复杂的系统。如果每位应用程序员都不得不掌握系统的所有细节,那就不可能再编写代码了。而且…

华为OD机考题HJ20 密码验证合格程序

前言 应广大同学要求,开始以OD机考题作为练习题,看看算法和数据结构掌握情况。有需要练习的可以关注下。 描述 密码要求: 1.长度超过8位 2.包括大小写字母.数字.其它符号,以上四种至少三种 3.不能有长度大于2的包含公共元素的子串重复 &#xff08…

【华为OD机试B卷】整数编码(C++/Java/Python)

题目 题目描述 实现一种整数编码方法,使得待编码的数字越小,编码后所占用的字节数越小。 编码规则如下: 编码时7位一组,每个字节的低7位用于存储待编码数字的补码字节的最高位表示后续是否还有字节,置1表示后面还有更多的字节,置0表示当前字节为最后一个字节。采用小端序编…

音视频入门基础:H.264专题(5)——FFmpeg源码中 解析NALU Header的函数分析

音视频入门基础:H.264专题系列文章: 音视频入门基础:H.264专题(1)——H.264官方文档下载 音视频入门基础:H.264专题(2)——使用FFmpeg命令生成H.264裸流文件 音视频入门基础&…

供应全志T507-H芯片

长期供应各品牌芯片: T507-H D6FH1G842A3CZ D6DA2G140K2A7-Z D5DA942M5K2G6 MT51J256M32HF-70:B MT62F1536M64D8CH-031 WT:A MT62F1536M64D8CL-023 WT:B MT62F1536M64D8CL-026 WT:B MT62F1536M64D8EK-023 WT:B MT62F1G64D8CH-031 WT:B SVF8N65RDTR 60…

SpringBoot-在配置文件中使用Profile

Profile,译为“配置文件” 在这里的Spring Boot也是一样,我们可以配置很多个Profile,每个Profile都对应一整个完整的全局配置,激活哪个,那个对应的全局配置就生效,具体的配置: 1、properties格…

浔川AI五子棋(改进(完整)版1.3)——浔川python社

简介: 浔川AI五子棋是一种使用人工智能技术来进行五子棋对弈的游戏。它采用了先进的算法和模型,在对弈过程中能够实时分析棋局并进行决策,使得游戏更具挑战性和趣味性。 浔川AI五子棋的核心技术是人工智能算法。它使用深度学习模型对大量的…

漏洞挖掘 | 记一次edusrc--轻松拿下中危信息泄露

1.前言 也是一次漏洞挖掘的思路分享 上次我们讲过了关于小程序方面的一些小思路,即关于抓包更改id号造成的一个信息泄露,但是在小程序上的信息泄露很难涉及到公民三要素这是一个痛点,今天就来分享一下一次edu挖掘时挖到的一个涉及公民三要素…

【讲师招募】PowerData 2024数字经济开源行

【讲师招募】PowerData 2024数字经济开源行 活动信息讲师招募往期活动回顾 活动信息 2023,社区经过一年的发展,凝聚起了一批热爱数据、热爱开源的伙伴。 2024,社区计划在全国十个城市举办"数字经济-城市开源行"活动,连…

2024年最新中级会计职称考试题库。

46.甲将一汇票背书转让给乙,但该汇票上未记载乙的名称。其后,乙在该汇票被背书人栏内记载了自己的名称。根据《票据法》的规定,下列有关该汇票背书与记载效力的表述中,正确的是()。 A.甲的背书无效&#x…

Qt案例-ApplicationExamples-Calqlatr

项目 一个Qt Quick应用程序设计的横向和纵向设备,使用自定义组件,响应式布局和JavaScript的应用程序逻辑。 项目路径: Qt\Examples\Qt-6.7.1\demos 环境:Qt6.7.1 MSVC 2019 64位 项目目录: calqlatr--CMakeList.txt…

三、用户中心项目笔记----后端多环境实战+原始部署

后端多环境主要是修改: 依赖的环境地址 数据库地址 缓存地址 消息队列地址 项目端口号 服务器配置 后端怎么去区分不同的环境? 我们后端的SpringBoot项目,通过application.yml添加不同后缀来区分配置文件 application.yml就是公共的配置&a…

Sam Altman:从少儿奇才到OpenAI掌舵人

自2022年底发布了ChatGPT以来,OpenAI及其首席执行官Sam Altman迅速成为科技界的焦点人物。Altman的崛起并非偶然,而是长期以来不断追求权力和创新的结果。本文将回顾Altman的成长历程,探索他如何一步步走向OpenAI的顶峰。 童年与教育背景 S…

乌班图Ubuntu 24.04初始化MySQL报错error while loading shared libraries: libaio.so.1

由于乌班图24.04 LTS已经发布了,因此准备新业务逐步往这上面迁移,毕竟支持有效期比22.04更长 准备在24.04上进行MySQL的初始化,因为习惯自定义安装存储目录,所以使用mysql-8.0.37-linux-glibc2.28-x86_64.tar.xz这个最新的二进制版…

7款三维地球软件/框架:Google Earth SkylineGlobe,Cesium等

可视化大屏已经不满足于2D和3D展示了,开始向着星辰大海迈进了,本文介绍7款三维地球软件/开发框架,带各位老铁入个门。 1. Google Earth: 大名鼎鼎,Google Earth 是由 Google 开发的一款免费的虚拟地球软件。它提供了全球范围内的…

【自然语言处理系列】手动安装和测试Spacy中en_core_web_sm模型的详细教程

摘要:本教程旨在为自然语言处理(NLP)初学者提供一个详细的指南,用于手动安装流行的NLP库Spacy及其英语模型en_core_web_sm。文章将逐步指导您如何安装Spacy库、查看其版本,确定并下载适合的en_core_web_sm模型版本&…