Redis通用命令详解
文章目录
- 一、Redis概述
- 1.1 KEYS:查看符合模板的所有 key
- 1.2 DEL:删除一个指定的 key
- 1.3 EXISTS:判断 key 是否存在
- 1.4 EXPIRE:给一个 key 设置有效期,有效期到期时该 key 会被自动删除
- 1.5 TTL:查看一个 key 的剩余有效期
- 1.6 COPY:复制 Redis 数据库中的数据到另一个数据库中
- 1.7 MOVE:将 Redis 中的指定键移动到另一个数据库中
- 1.8 TOUCH:修改指定键的最后访问时间
- 1.9 RENAME: 修改一个键的名称
- 1.10 RENAMENX:新名称的键不存在时执行修改
- 1.11 TYPE:返回键所存储的值的类型
- 1.12 PERSIST:移除 Redis 键的过期时间
一、Redis概述
Redis概述

1.1 KEYS:查看符合模板的所有 key

KEYS 命令在处理大量数据时可能会影响 Redis 服务器的性能,因为它会遍历所有 key 来寻找匹配的项。

在生产环境中,应该谨慎使用 KEYS 命令,尤其是在数据量巨大的情况下。
redis> MSET firstname Jack lastname Stuntman age 35
"OK"
redis> KEYS *name*
1) "lastname"
2) "firstname"
redis> KEYS a??
1) "age"
redis> KEYS *
1) "lastname"
2) "age"
3) "firstname"
redis>
首先使用 MSET 命令设置了多个 key-value 对,分别为 firstname、lastname 和 age。然后使用 KEYS 命令查找符合指定模式的 key。
- 第一个
KEYS命令使用模式*name*,返回所有包含 “name” 的 key,即lastname和firstname。 - 第二个
KEYS命令使用模式a??,返回所有以字母 “a” 开头并且后面有两个字符的 key,即age。 - 最后一个
KEYS命令使用模式*,返回所有存在的 key,即lastname、age和firstname。
1.2 DEL:删除一个指定的 key

在 Redis 中,DEL 命令用于删除指定的 key,并返回成功删除的 key 的数量。

redis> SET key1 "Hello"
"OK"
redis> SET key2 "World"
"OK"
redis> DEL key1 key2 key3
(integer) 2
redis>
使用 DEL 命令删除了两个 key,即 key1 和 key2。因为这两个 key 存在且被成功删除,所以返回的结果是 (integer) 2。
如果执行 DEL 命令删除了不存在的 key,那么返回的结果将是 (integer) 0,表示没有成功删除任何 key。
1.3 EXISTS:判断 key 是否存在

EXISTS 命令用于判断给定的 key 是否存在于 Redis 中。它可以同时接受多个 key,并返回存在的 key 的数量。如果 key 存在,则返回 1;如果 key 不存在,则返回 0。

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
redis>
使用 SET 命令分别设置了 key1 和 key2 的值。然后使用 EXISTS 命令来检查指定的 key 是否存在。
- 第一个
EXISTS命令执行EXISTS key1,返回结果为(integer) 1,表示key1存在。 - 第二个
EXISTS命令执行EXISTS nosuchkey,返回结果为(integer) 0,表示nosuchkey不存在。 - 接下来执行
EXISTS key1 key2 nosuchkey,返回结果为(integer) 2,表示其中两个 key 存在,即key1和key2,而nosuchkey不存在。
Tips:

如果在参数中多次提到相同的现有键,它将被计算多次。如果somekey存在,exists somekey somekey将返回2。
1.4 EXPIRE:给一个 key 设置有效期,有效期到期时该 key 会被自动删除

EXPIRE key seconds [NX | XX | GT | LT]
-
key:要设置过期时间的键名。 -
seconds:过期时间,单位为秒。键在指定秒数后将会被自动删除。 -
NX:(可选)仅在键不存在时设置过期时间。 -
XX:(可选)仅在键已存在时设置过期时间。 -
GT:(可选)仅在键的当前过期时间大于给定过期时间时设置过期时间。 -
LT:(可选)仅在键的当前过期时间小于给定过期时间时设置过期时间。 -
当
NX和XX选项都未指定时,默认行为是设置键的过期时间,如果键不存在则创建键并设置过期时间。 -
NX和XX选项可以与GT或LT选项结合使用,从而提供更精确的过期时间控制。
-
设置键
mykey在 60 秒后过期:EXPIRE mykey 60 -
仅当键
mykey存在时,设置它在 120 秒后过期:EXPIRE mykey 120 XX -
仅当键
mykey不存在时,设置它在 300 秒后过期:EXPIRE mykey 300 NX -
仅当键
mykey的当前过期时间大于 180 秒时,设置它在 180 秒后过期:EXPIRE mykey 180 GT -
仅当键
mykey的当前过期时间小于 240 秒时,设置它在 240 秒后过期:EXPIRE mykey 240 LT

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
redis> EXPIRE mykey 10 XX
(integer) 0
redis> TTL mykey
(integer) -1
redis> EXPIRE mykey 10 NX
(integer) 1
redis> TTL mykey
(integer) 10
redis>
1.5 TTL:查看一个 key 的剩余有效期

TTL 命令用于获取 Redis 键的剩余生存时间(Time To Live,TTL)。
TTL key
key:要查询剩余生存时间的键名。
返回值
redis> SET mykey "Hello"
"OK"
redis> EXPIRE mykey 10
(integer) 1
redis> TTL mykey
(integer) 10
redis>
-
返回键的剩余生存时间(TTL):
- 如果键不存在或者键没有设置过期时间,返回
-1。 - 如果键存在且设置了过期时间,返回剩余生存时间的秒数。
- 如果键不存在或者键没有设置过期时间,返回
-
返回
-1表示键不存在或者键没有设置过期时间。 -
返回
0表示键存在并且没有剩余生存时间,即键已经过期。 -
TTL 返回的时间单位是秒。
1.6 COPY:复制 Redis 数据库中的数据到另一个数据库中

COPY 命令用于复制 Redis 数据库中的数据到另一个数据库中。
COPY source destination [DB destination-db] [REPLACE]
-
source:要复制数据的源键名。 -
destination:目标键名,复制后的数据将存储在这个键中。 -
DB destination-db:(可选)目标数据库的索引号。默认为 0(即默认数据库)。 -
REPLACE:(可选)如果目标键destination已存在且有数据,使用REPLACE选项将会覆盖现有数据。如果未指定REPLACE,并且目标键已存在,则COPY命令将会失败。 -
source和destination参数必须是有效的键名。 -
可以指定一个不同的目标数据库索引号,使数据被复制到该索引号对应的数据库中。
-
使用
REPLACE选项可以在目标键已存在时覆盖现有数据,否则命令会失败。
示例
-
将键
mykey中的数据复制到键mykey_copy中:COPY mykey mykey_copy -
将键
mylist中的数据复制到键mylist_backup中,并指定目标数据库索引号为 1:COPY mylist mylist_backup DB 1 -
将键
myset中的数据复制到键myset_new中,如果myset_new已存在则覆盖现有数据:COPY myset myset_new REPLACE
1.7 MOVE:将 Redis 中的指定键移动到另一个数据库中

MOVE 命令用于将 Redis 中的指定键移动到另一个数据库中。
MOVE key db
-
key:要移动的键名。 -
db:目标数据库的索引号,用于指定移动到哪个数据库中。 -
key参数是要移动的键名,必须存在于当前数据库中。 -
db参数是目标数据库的索引号,用于指定移动到哪个数据库中。索引号从 0 开始,Redis 默认支持 16 个数据库,可以通过配置进行扩展。
-
将键
mykey移动到数据库索引号为 1 的数据库中:MOVE mykey 1
-
如果目标数据库
db不存在(例如超过了默认的 0 到 15 的范围),那么MOVE命令会返回错误。 -
如果键
key已经存在于目标数据库db中,那么MOVE命令将无效,不会导致任何数据移动。 -
当键成功移动到目标数据库时,返回
1。 -
如果键已经存在于目标数据库中,或者数据库索引号超出范围,返回
0。
1.8 TOUCH:修改指定键的最后访问时间

在 Redis 中,TOUCH 命令用于修改指定键的最后访问时间(last access time),从而更新键的过期时间。
TOUCH key [key ...]
-
key:一个或多个要更新最后访问时间的键名。 -
key参数是一个或多个键名,用空格分隔。 -
TOUCH命令主要用于更新 Redis 键的最后访问时间:- 持久化存储:如果键设置了过期时间,通过
TOUCH命令可以防止 Redis 自动清除这些键。 - 活跃用户追踪:可以用于跟踪哪些键最近被访问,用作活跃用户的标记或统计。
- LRU(最近最少使用)策略:Redis 在使用 LRU 策略管理内存时,可以通过
TOUCH命令更新键的访问时间,从而影响键的淘汰顺序。
- 持久化存储:如果键设置了过期时间,通过
-
更新键
mykey的最后访问时间:TOUCH mykey -
更新多个键的最后访问时间:
TOUCH key1 key2 key3
TOUCH命令仅更新键的最后访问时间,不改变键的值或其他属性。- 如果指定的键不存在,
TOUCH命令会忽略该键,不会报错。 TOUCH命令可以用于确保键不会在达到过期时间后被 Redis 主动清理,适用于需要持久化存储的场景。
返回值
redis> SET key1 "Hello"
"OK"
redis> SET key2 "World"
"OK"
redis> TOUCH key1 key2
(integer) 2
redis>
- 返回更新的键数目,即成功更新了多少个键的最后访问时间。
1.9 RENAME: 修改一个键的名称

在 Redis 中,RENAME 命令用于修改一个键的名称。
RENAME key newkey
-
key:要修改名称的键名。 -
newkey:键的新名称。 -
RENAME命令用于将一个键的名称修改为新的名称。如果新的键名已经存在,则会覆盖原有键的值。
-
将键
mykey的名称修改为newkey:RENAME mykey newkey
- 如果键
key不存在,则RENAME命令会返回错误。 - 如果键
newkey已经存在,它的值将被覆盖。
返回值
redis> SET mykey "Hello"
"OK"
redis> RENAME mykey myotherkey
"OK"
redis> GET myotherkey
"Hello"
redis>
- 当命令成功执行时,返回 OK。
1.10 RENAMENX:新名称的键不存在时执行修改

在 Redis 中,RENAMENX 命令用于将一个键的名称修改为新的名称,但只在新名称的键不存在时执行修改。
RENAMENX key newkey
-
key:要修改名称的键名。 -
newkey:键的新名称。 -
RENAMENX命令会检查新名称newkey是否已经存在。 -
如果
newkey已经存在,则不执行任何操作,返回0。 -
如果
newkey不存在,则将key的名称修改为newkey。 -
如果
key不存在,则RENAMENX命令会返回错误。 -
RENAMENX命令是原子操作,即在执行过程中不会出现部分成功的情况。
redis> SET mykey "Hello"
"OK"
redis> SET myotherkey "World"
"OK"
redis> RENAMENX mykey myotherkey
(integer) 0
redis> GET myotherkey
"World"
redis>
- 当成功将
key的名称修改为newkey时,返回1。 - 如果
newkey已经存在,没有执行修改操作,则返回0。
1.11 TYPE:返回键所存储的值的类型

TYPE 命令用于返回键所存储的值的类型。
TYPE key
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"
redis>
返回值
- 返回键存储值的类型,可能的返回值有:
"none":键不存在。"string":字符串类型。"list":列表类型。"set":集合类型。"zset":有序集合类型。"hash":哈希类型。"stream":流类型。
注意事项
- 如果键不存在,命令会返回
"none"。 - 如果键存储的值类型不在预期范围内,可能是由于该键已被其他操作修改。
- 在 Redis 中,同一个键可以在不同时间存储不同类型的值。
1.12 PERSIST:移除 Redis 键的过期时间

PERSIST 命令用于移除 Redis 键的过期时间,使得键成为永久有效的,不再自动过期。
PERSIST key
key:要移除过期时间的键名。
返回值
redis> SET mykey "Hello"
"OK"
redis> EXPIRE mykey 10
(integer) 1
redis> TTL mykey
(integer) 10
redis> PERSIST mykey
(integer) 1
redis> TTL mykey
(integer) -1
redis>
- 如果成功移除过期时间,返回
1。 - 如果键不存在过期时间,或者键不存在,返回
0。
注意事项
- 只有带有过期时间的键才能使用
PERSIST命令来移除过期时间。 - 如果键之前已经被设置为永不过期(即没有设置过期时间),
PERSIST命令会返回0。 - 移除过期时间后,键将永久存在于 Redis 中,直到显式删除。
更多的通用命令可以去官网https://redis.io/docs/latest/commands/?group=generic查看哦~

相关文章:
Redis通用命令详解
文章目录 一、Redis概述1.1 KEYS:查看符合模板的所有 key1.2 DEL:删除一个指定的 key1.3 EXISTS:判断 key 是否存在1.4 EXPIRE:给一个 key 设置有效期,有效期到期时该 key 会被自动删除1.5 TTL:查看一个 ke…...
物联网设备安装相关知识整理
拓扑图 对于ADAM-4150先接设备的整体的供电。 ADAM-4150就涉及到几个电子元器件的连接,一个是485-232的转换器,一个是将RS-232转换为USB的转接口,因为现在的计算机很多都去掉了RS-232接口而使用USB接口。 4150右侧有个拨码,分别两…...
React实现H5手势密码
监测应用进入前后台 在JavaScript中,监听H5页面是否在前台或后台运行,主要依赖于Page Visibility API。这个API在大多数现代浏览器中都是支持的,包括苹果的Safari和谷歌的Chrome(也就基本覆盖了Android和iOS平台)。下…...
[leetcode hot 150]第十五题,三数之和
题目: 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复…...
视频AI分析定时任务思路解析
序言: 最近项目中用到视频ai分析,由于sdk涉及保密,不便透露,仅对定时任务分析的思路作出分享,仅供参考。 1、定时任务 由于ai服务器的性能上限,只能同时对64个rtsp流分析一种算法,或者对8个rts…...
tcp 粘包和拆包 及 解决粘包方案
什么是粘包和拆包 .TCP 是面向连接的,面向流的,提供高可靠性服务。收发两端(客户端和服务器端)都要有一一成对的 socket,因此,发送端为了将多个发给接收端的包,更有效的发给对方,使…...
【2024泰迪杯】B 题:基于多模态特征融合的图像文本检索20页论文及Python代码
【2024泰迪杯】B 题:基于多模态特征融合的图像文本检索20页论文及Python代码 相关链接 【2024泰迪杯】A 题:生产线的故障自动识别与人员配置 Python代码实现 【2024泰迪杯】B 题:基于多模态特征融合的图像文本检索Python代码实现 【2024泰迪…...
华为设备telnet 远程访问配置实验简述
一、实验需求: 1、AR1模拟电脑telnet 访问AR2路由器。 二、实验步骤: 1、AR1和AR2接口配置IP,实现链路通信。 2、AR2配置AAA模式 配置用户及密码 配置用户访问级别 配置用户telnet 访问服务 AR2配置远程服务数量 配置用户远程访问模式为AAA 配置允许登录…...
在HTML中,如何正确使用语义化标签?
在HTML中,使用语义化标签可以使得网页结构更加清晰和易于理解。以下是一些正确使用语义化标签的方法: 使用合适的标题标签(h1-h6)来标识网页的标题,以及页面中的各个区块的标题。 <h1>网页标题</h1> <…...
WHAT - 高性能和内存安全的 Rust(一)
目录 一、介绍1.1 示例代码1.2 关键特性内存安全零成本抽象:高效性能示例代码:使用迭代器的零成本抽象示例代码:泛型和单态化总结 并发编程:防止数据竞争Rust 并发编程示例Rust 的所有权系统防止数据竞争总结 丰富的类型系统包管理…...
八、C#运算符
C#运算符 晕杜甫是一种告诉编辑器执行特定的数学或逻辑操作的符号。C#有丰富的内置运算符,分类如下: 算术运算符关系运算符逻辑运算符位运算符赋值运算符其他运算符 算术运算符 下表显示了 C# 支持的所有算术运算符。假设变量 A 的值为 10,…...
【HiveSQL】join关联on和where的区别及效率对比
测试环境:hive on spark spark版本:3.3.1 一、执行时机二、对结果集的影响三、效率对比1.内连接1)on2)where 2.外连接1)on2)where 四、总结PS 一、执行时机 sql连接中,where属于过滤条件&#…...
如何解决windows自动更新,释放C盘更新内存
第一步:首先关闭windows自动更新组件 没有更新windows需求,为了防止windows自动更新,挤占C盘空间,所以我们要采取停止Windows Update服务。按下WinR打开运行对话框,输入services.msc, 然后按Enter。在服务…...
初学51单片机之PWM实例呼吸灯以及遇到的问题(已解答)
PWM全名Pulse Width Modulation中文称呼脉冲宽度调制 如图 这是一个周期10ms、频率是100HZ的波形,但是每个周期内,高低电平宽度各不相同,这就是PWM的本质。 占空比是指高电平占整个周期的比列,上图第一个波形的占空比是40%,第二个…...
手机天线都去哪里了?
在手机的演变历程中,天线的设计和位置一直是工程师们不断探索和创新的领域。你是否好奇,现在的手机为什么看不到那些曾经显眼的天线了呢? 让我们一起揭开这个谜题。 首先,让我们从基础开始:手机是如何发出电磁波的&…...
计算机网络 —— 应用层(电子邮件)
计算机网络 —— 应用层(电子邮件) 电子邮件发送电子邮件的过程SMTP特性工作流程 电子邮件格式MIME关键组件工作方式 POP/IMAPPOP(邮局协议)IMAP(因特网邮件访问协议) 基于万维网的电子邮箱特点优势常见的基…...
Java18新特性(极简)
一、引言 自1995年Java语言首次亮相以来,它已经成为企业级应用、移动应用和游戏开发等领域不可或缺的一部分。随着技术的不断进步,Java也在持续演化,每个新版本都带来了诸多新特性和性能优化,旨在提升开发者的编程效率和应用程序的…...
vscode连接ssh远程服务器
当使用Visual Studio Code (VSCode) 连接SSH远程服务器时,可以遵循以下步骤。这些步骤将帮助你设置并连接到远程服务器,包括免密登录的设置(如果需要)。 一、安装并配置Remote-SSH插件 下载并安装VSCode:确保你已经下…...
【趣味测试】
编程过程中遇到的趣味知识 1 Cpp 1.1 浮点数计算 if (0.1 0.2 0.3) {std::cout << "0.1 0.2 0.3 true" << std::endl;} else {std::cout << "0.1 0.2 0.3 false" << std::endl;}if (0.1 0.3 0.4) {std::cout << &…...
数据结构经典面试之数组——C#和C++篇
文章目录 1. 数组的基本概念与功能2. C#数组创建数组访问数组元素修改数组元素数组排序 3. C数组创建数组访问数组元素修改数组元素数组排序 4. 数组的实际应用与性能优化5. C#数组示例6. C数组示例总结 数组是编程中常用的数据结构之一,它用于存储一系列相同类型的…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...
nnUNet V2修改网络——暴力替换网络为UNet++
更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...
