【redis】键的全局命令

Redis提供了一系列用于管理和操作键的全局命令。这些命令允许你查看、删除、迁移键,以及执行其他与键相关的操作。

有关全局通用类型的命令可以通过help @generic命令来查看。有关命令的使用可以通过help 命令来查看,例如help keys

KEYS

keys:查找所有符合给定模式的键。

语法:

KEYS pattern

使用:KEYS *查找所有键。

127.0.0.1:6379> keys *
1) "a6"
2) "a3"
3) "a2"
4) "a5"
5) "a4"
6) "a1"127.0.0.1:6379> keys *6
1) "a6"

注意:在生产环境中应谨慎使用KEYS命令,因为它会扫描整个数据库,可能导致性能问题,推荐使用下面的SCAN命令。

SCAN

与KEYS命令不同,SCAN命令不会一次性返回数据库中的所有键,而是返回一个游标和一批键的列表,允许客户端分批处理键,这对于大型数据库非常有用,因为它可以防止服务器因一次性返回过多数据而过载。

SCAN命令的基本语法如下:

SCAN cursor [MATCH pattern] [COUNT count]

命令选项说明:

  • cursor:游标是一个基于64位整数的字符串(在Redis的实现中通常是一个字符串形式的整数),用于指示迭代过程中的当前位置。第一次调用SCAN时,游标应该是"0"。每次SCAN命令返回后,都会提供一个新的游标值,应该在下一次调用时使用。当游标返回为"0"时,表示迭代完成。

  • MATCH pattern:可选参数,用于指定一个模式,只有匹配该模式的键才会被返回。模式匹配遵循glob风格,其中*表示任意数量的字符,?表示单个字符,[]用于指定字符集。

  • COUNT count:可选参数,提示Redis希望每次迭代返回的键的数量。然而,这是一个提示,而不是一个严格的命令,因为 Redis可能会返回比请求的更少或更多的键,具体取决于内部实现和数据集的大小。

SCAN命令返回一个包含两个元素的数组:

  • 一个字符串表示的游标,用于下一次迭代。
  • 一个数组,包含本次迭代返回的键。

以下是一个使用SCAN命令的示例:

127.0.0.1:6379> scan 0 match a* count 3
1) "6"
2) 1) "a6"2) "a4"3) "a2"4) "a5"127.0.0.1:6379> scan 6 match a* count 3
1) "0"
2) 1) "a3"2) "a1"

这个命令请求从游标"0"开始迭代,返回所有以"a"开头的键,每次迭代最多返回3个键。Redis将返回一个游标和一个键的列表,客户端应该使用返回的游标进行下一次迭代,直到游标返回为"0"。

注意:由于SCAN命令是基于游标的迭代命令,因此它不能保证在迭代过程中键集合的不变性。如果在迭代过程中有键被添加或删除,这些变化可能会反映在迭代结果中。因此,SCAN命令通常用于非阻塞的、近实时的键集合遍历场景。

EXISTS

exists:检查一个键是否存在。如果存在,返回1;否则,返回0。

语法:

EXISTS key [key ...]

使用:

127.0.0.1:6379> exists a1
(integer) 1127.0.0.1:6379> exists b1
(integer) 0

DEL

del:删除一个或多个键。返回被删除的键的数量。

语法:

DEL key [key ...]

使用:

127.0.0.1:6379> del a5 a6
(integer) 2

TYPE

type:返回键所存储的值的类型。

语法:

TYPE key

使用:

127.0.0.1:6379> type a1
string

RENAME

rename:将键重命名为新的键名。如果新键名已存在,则覆盖旧值。

语法:

RENAME key newkey

使用:

127.0.0.1:6379> rename a1 c1
OK

RENAMENX

renamenx:仅在新键名不存在时,将键重命名为新的键名。如果操作成功,返回1;如果新键名已存在,返回0。

语法:

RENAMENX key newkey

使用:

127.0.0.1:6379> renamenx c1 a2
(integer) 0127.0.0.1:6379> renamenx c1 a1
(integer) 1

EXPIRE

expire:为键设置一个过期时间(以秒为单位)。当过期时间到达时,键会被自动删除。

语法:

EXPIRE key seconds

使用:

127.0.0.1:6379> expire a1 60
(integer) 1

PEXPIRE

pexpire:为键设置一个过期时间(以毫秒为单位)。

语法:

PEXPIRE key milliseconds

使用:

127.0.0.1:6379> pexpire a1 6000
(integer) 1

EXPIREAT

expireat:指定键在何时过期(以秒级UNIX时间戳表示)。

语法:

EXPIREAT key timestamp

使用:

127.0.0.1:6379> expireat a1 1736500968
(integer) 1

PEXPIREAT

pexpireat:指定键在何时过期(以毫秒级UNIX时间戳表示)。

语法:

PEXPIREAT key milliseconds-timestamp

使用:

127.0.0.1:6379> pexpireat a1 1736501168000
(integer) 1

TTL

ttl:获取键的剩余生存时间(以秒为单位)。如果键不存在或没有设置过期时间,返回-2或-1。

语法:

TTL key

使用:

127.0.0.1:6379> ttl a1
(integer) 152127.0.0.1:6379> ttl a2
(integer) -1127.0.0.1:6379> ttl x1
(integer) -2

PTTL

pttl:获取键的剩余生存时间(以毫秒为单位)。

语法:

PTTL key

使用:

127.0.0.1:6379> pttl a1
(integer) 109988127.0.0.1:6379> pttl a2
(integer) -1127.0.0.1:6379> pttl x1
(integer) -2

PERSIST

persist:移除键的过期时间,使其变为永久存储。

语法:

PERSIST key

使用:

127.0.0.1:6379> persist a1
(integer) 1127.0.0.1:6379> ttl a1
(integer) -1

MOVE

move:将键移动到另一个数据库。如果操作成功,返回1;如果键不存在或移动失败(如目标数据库key已存在),返回0。Redis默认支持16个逻辑数据库(编号从0到15),你可以通过SELECT命令来选择当前操作的数据库。

语法:

MOVE key db

使用:

127.0.0.1:6379> move a1 15
(integer) 1127.0.0.1:6379> select 15
OK127.0.0.1:6379[15]> get a1
"aa"

DUMP

dump:返回一个序列化后的值,该值包含键的类型和值本身。可以使用RESTORE命令来恢复该值。

语法:

DUMP key

使用:

127.0.0.1:6379> dump a1
"\x00\x020a\t\x00\xcb\x0e\xdaX\xef\x82$\b"

RESTORE

restore:使用DUMP命令返回的序列化值来恢复键。ttl参数指定键的过期时间(以毫秒为单位),如果TTL为0,则键没有过期时间。

语法:

RESTORE key ttl serialized-value

使用:

127.0.0.1:6379> restore z1 0 "\x00\x020a\t\x00\xcb\x0e\xdaX\xef\x82$\b"
OK

COPY

copy:复制一个key。

语法:

COPY source destination [DB destination-db] [REPLACE]

使用:

127.0.0.1:6379> set k1 v1
OK127.0.0.1:6379> copy k1 k2 db 1
(integer) 1127.0.0.1:6379> copy k1 k2 db 1
(integer) 0127.0.0.1:6379> copy k1 k2 db 1 replace
(integer) 1

OBJECT

object:允许用户从内部查看给定key的Redis对象的信息。这个命令通常用于调试、了解为了节省空间而对key使用特殊编码的情况,或者在将Redis用作缓存程序时,通过OBJECT命令中的信息来决定key的驱逐策略(eviction policies)。

语法:

OBJECT subcommand [arguments [arguments ...]]

OBJECT命令的子命令:

  1. OBJECT REFCOUNT
  • 功能:返回给定key引用所储存的值的次数。这个命令主要用于调试。
  • 返回值:整数,表示引用计数。
  1. OBJECT ENCODING
  • 功能:返回给定key所储存的值所使用的内部表示(即编码方式)。
  • 返回值:字符串,表示编码类型。例如,字符串可以被编码为raw(常规字符串)或int(用字符串表示64位整数以节约空间);列表可以被编码为ziplist(为节约空间而设计的特殊表示)或linkedlist等。
  1. OBJECT IDLETIME
  • 功能:返回给定key自储存以来的空闲时间(即没有被读取也没有被写入的时间),以秒为单位。这个命令对于了解key的活跃程度很有帮助。
  • 返回值:整数,表示空闲时间(秒)。需要注意的是,虽然返回值以秒为单位,但这个计时器的实际精度可能是10秒级别(这取决于Redis的实现和配置)。
  • 注意:只有当maxmemory-policy被设置为LRU(Least Recently Used)或noeviction时,该子命令才可以使用。

使用:

127.0.0.1:6379> object encoding k1
"embstr"

RANDOMKEY

randomkey:随机返回一个key。

语法:

RANDOMKEY -

使用:

127.0.0.1:6379> randomkey
"k9"

TOUCH

touch:用于修改指定键的最后访问时间。这个命令不会改变键的值,但会更新键的LRU(Least Recently Used,最近最少使用)时间戳,这对于实现LRU缓存淘汰策略非常有用。

语法:

TOUCH key [key ...]

使用:

127.0.0.1:6379> touch k1
(integer) 1127.0.0.1:6379> object idletime k1
(integer) 3

UNLINK

unlink:用于异步删除一个或多个键的命令。

语法:

UNLINK key [key ...]

特点与优势:

  • 异步删除:UNLINK命令的主要特点是它是非阻塞的,它会在后台异步地删除键值对,而不会阻塞服务器的正常操作。这使得UNLINK命令非常适合于删除大量键值对或者删除耗时较长的键值对,因为它可以在后台完成删除操作,而不会对其他操作产生影响。

  • 内存释放:虽然UNLINK命令会立即从Redis的字典中删除键,但实际的内存释放是在后台的一个线程中完成的。这样,UNLINK命令可以在不阻塞主线程的情况下,有效地释放内存资源。

  • 性能优化:对于大对象(例如大列表、大集合、大哈希等),UNLINK命令相比DEL命令具有更好的性能。因为UNLINK命令不会阻塞主线程,所以它可以更高效地处理大量数据的删除操作。

使用:

127.0.0.1:6379> unlink k1
(integer) 1127.0.0.1:6379> exists k1
(integer) 0

WAIT

wait:是一个同步复制的命令,它用于阻塞当前客户端,直到所有先前的写入命令成功传输并被至少指定数量的从节点确认。

语法:

WAIT numreplicas timeout

使用:

127.0.0.1:6379> set k1 v1
OK127.0.0.1:6379> wait 1 2000
(integer) 0
(2.03s)

MIGRATE

migrate:用于在Redis实例间进行数据迁移的命令。它将一个或多个键从一个Redis数据库实例迁移到另一个Redis数据库实例。MIGRATE命令实际上是将DUMP、RESTORE、DEL三个命令的组合,从而简化了操作流程。

语法:

MIGRATE host port key| destination-db timeout [COPY] [REPLACE] [AUTH password] [AUTH2 username password] [KEYS key]

参数说明

  • host:目标Redis实例的IP地址。

  • port:目标Redis实例的端口号。

  • key|“”:要迁移的键名。在Redis 3.0.6及以后的版本中,如果要迁移多个键,此处应为空字符串"",并使用KEYS参数指定要迁移的键列表。

  • destination-db:目标Redis实例的数据库索引。

  • timeout:迁移操作的超时时间,单位为毫秒。

  • COPY:如果添加此选项,迁移后不会删除源键。

  • REPLACE:如果添加此选项,MIGRATE命令会覆盖目标Redis实例中已存在的同名键。如果不提供此参数且目标Redis实例中存在同名键,则命令会抛出异常。

  • AUTH password:用于向目标Redis实例进行身份验证的密码。

  • AUTH2 username password:指定用于身份验证的用户名和密码(如果目标Redis实例使用了ACL进行访问控制)。

  • KEYS key …:在Redis 3.0.6及以后的版本中,用于指定要迁移的多个键。

使用:

127.0.0.1:6379> migrate 127.0.0.1 6379 "" 1 2000 COPY KEYS k1

SORT

Redis的SORT命令是一个功能强大的工具,用于对列表(List)、集合(Set)或有序集合(Sorted Set)中的元素进行排序。

以下是对Redis SORT命令的详细解释:

基本语法

SORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC|DESC] [ALPHA] [STORE destination]
  • key:要排序的源键。
  • BY pattern:可选参数,指定一个模式来获取实际用来比较的值。如果使用了这个参数,Redis会根据这个模式找到对应的值来进行排序。
  • LIMIT offset count:可选参数,用于限制返回的结果数量,类似于SQL中的LIMIT子句。offset表示起始位置,count表示数量。
  • GET pattern:可选参数,允许基于排序后的元素去获取其他键中的值。可以指定多个GET参数。
  • ASC|DESC:可选参数,指定排序顺序。默认是升序(ASC),可以使用DESC来指定降序。
  • ALPHA:可选参数,当需要按字典顺序而不是数值顺序排序时使用。
  • STORE destination:可选参数,将排序后的结果存储在指定的键中,而不是直接返回给客户端。

使用示例

基本排序

假设有一个名为users的列表,其中包含用户ID:

127.0.0.1:6379> rpush users 3 5 2 8 7
(integer) 5

按默认方式排序:

127.0.0.1:6379> sort users
1) "2"
2) "3"
3) "5"
4) "7"
5) "8"

按降序排序

127.0.0.1:6379> sort users desc
1) "8"
2) "7"
3) "5"
4) "3"
5) "2"

按字典顺序排序

虽然数字默认按数值排序,但字符串默认按字典顺序排序。对于数字列表,若希望按字典顺序(即逐字符比较)排序,可使用ALPHA选项:

127.0.0.1:6379> sort users alpha
1) "2"
2) "3"
3) "5"
4) "7"
5) "8"

对于纯数字列表,结果与默认排序结果相同,但用于字符串时会有区别。

使用BY参数

假设有一个用户信息表:
uid name level
1 admin 9999
2 jack 10
3 peter 25
4 mary 70

假设有另一个哈希表user:details,其中每个用户ID对应一个年龄。

首先,设置哈希表:

127.0.0.1:6379> lpush uid 1 2 3 4
(integer) 4127.0.0.1:6379> hmset user_info_1 name admin level 9999
OK127.0.0.1:6379> hmset user_info_2 name jack level 10
OK127.0.0.1:6379> hmset user_info_3 name peter level 25
OK127.0.0.1:6379> hmset user_info_4 name mary level 70
OK

可以根据用户的level来排序用户ID:

127.0.0.1:6379> sort uid by user_info_*->level
1) "2"
2) "3"
3) "4"
4) "1"

user_level_*是一个占位符,它先取出uid中的值,然后再用这个值来查找相应的键。

比如在对uid列表进行排序时,程序就会先取出uid的值1、2、3、4,然后使用user_level_1、user_level_2、user_level_3和user_level_4的值作为排序uid的权重。

使用GET参数

如果我们想要返回用户的level而不是用户ID,可以使用GET参数:

127.0.0.1:6379> sort uid by user_info_*->level get user_info_*->level
1) "10"
2) "25"
3) "70"
4) "9999"

返回用户ID、name、level:

127.0.0.1:6379> sort uid by user_info_*->level get # get user_info_*->name get user_info_*->level1) "2"2) "jack"3) "10"4) "3"5) "peter"6) "25"7) "4"8) "mary"9) "70"
10) "1"
11) "admin"
12) "9999"

限制结果数量

127.0.0.1:6379> sort users limit 0 3
1) "2"
2) "3"
3) "5"

这里的LIMIT 0 3表示从索引0开始返回3个元素。

存储排序结果

127.0.0.1:6379> sort users store users_sorted
(integer) 5127.0.0.1:6379> lrange users_sorted 0 -1
1) "2"
2) "3"
3) "5"
4) "7"
5) "8"

结果不会直接返回给客户端,但排序后的结果会存储在users_sorted键中。

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

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

相关文章

SQL Prompt 插件

SQL Prompt 插件 注:SQL Prompt插件提供智能代码补全、SQL格式化、代码自动提示和快捷输入等功能,非常方便,可以自行去尝试体会。 1、问题 SSMS(SQL Server Management Studio)是SQL Server自带的管理工具&#xff0c…

《小迪安全》学习笔记05

目录 读取: 写入: (其中的读取和写入时我认为比较重要的,所以单独做成了目录,这里的读取和写入是指在进行sql注入的时候与本地文件进行的交互) 好久没发博客了。。。从这篇开始的小迪安全学习笔记就开始…

SpringCloud源码-Ribbon

一、Spring定制化RestTemplate,预留出RestTemplate定制化扩展点 org.springframework.cloud.client.loadbalancer.LoadBalancerAutoConfiguration 二、Ribbon定义RestTemplate Ribbon扩展点功能 org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguratio…

Linux 常用命令 - chmod 【改变文件或目录权限】

简介 “chmod” 这个命令来自于 “change mode” 的缩写,用于更改文件或目录的访问权限。这个命令允许用户设定谁可以读取、写入或执行一个文件。在 Linux 和其他类 Unix 系统中,文件权限对系统安全和用户隐私至关重要。 Linux/Unix 的文件调用权限分为…

Linux系统离线部署MySQL详细教程(带每步骤图文教程)

1、登录官网下载对应的安装包 MySQL :: Developer Zone 2、将压缩包上传到服务器上,这里直接上传到/usr/local路径上 使用sftp工具上传到/usr/local目录上 3、解压压缩包 tar -xf mysql-8.0.39-linux-glibc2.17-x86_64.tar.xz 4、将mysql-8.0.39-linux-glibc2.17…

PyTorch使用教程(1)—PyTorch简介

PyTorch是一个开源的深度学习框架,由Facebook人工智能研究院(FAIR)于2016年开发并发布,其主要特点包括自动微分功能和动态计算图的支持,使得模型建立更加灵活‌。官网网址:https://pytorch.org。以下是关于…

Linux浅谈——管道、网络配置和客户端软件的使用

目录 一、管道 1、管道符 2、过滤功能 3、特殊功能 4、扩展处理 5、xargs命令扩展 二、网络配置 1、ifconfig查看网络信息 2、配置文件详解 网卡配置文件位置 3、systemctl查看网卡状态 4、systemctl启动/重启/停止网卡 三、客户端软件 1、什么是SSH 2、常用SSH终…

arcgis中生成格网矢量带高度

效果 1、数据准备 (1)矢量边界(miain.shp) (2)DEM(用于提取格网标高) (3)DSM(用于提取格网最高点) 2、根据矢量范围生成格网 模板范围选择矢量边界,像元宽度和高度根据坐标系来输入,我这边是4326的,所以输入的是弧度,输出格网矢量gewang.shp 3、分区统计 …

IEC103 转 ModbusTCP 网关

一、产品概述 IEC103 转 ModbusTCP 网关型号 SG-TCP-IEC103 ,是三格电子推出的工业级网关(以下简 称网关),主要用于 IEC103 数据采集、 DLT645-1997/2007 数据采集, IEC103 支持遥测和遥 信,可接…

Android BottomNavigationView不加icon使text垂直居中,完美解决。

这个问题网上千篇一律的设置iconsize为0,labale固定什么的,都没有效果。我的这个基本上所有人用都会有效果。 问题解决之前的效果:垂直方向,文本不居中,看着很难受 问题解决之后:舒服多了 其实很简单&…

【蓝桥杯】43687.赢球票

题目描述 某机构举办球票大奖赛。获奖选手有机会赢得若干张球票。 主持人拿出 N 张卡片(上面写着 1⋯N 的数字),打乱顺序,排成一个圆圈。 你可以从任意一张卡片开始顺时针数数: 1,2,3 ⋯ ⋯ 如果数到的数字刚好和卡片上的数字…

(01)FreeRTOS移植到STM32

一、以STM32的裸机工程模板 任意模板即可 二、去官网上下载FreeRTOS V9.0.0 源码 在移植之前,我们首先要获取到 FreeRTOS 的官方的源码包。这里我们提供两个下载 链 接 , 一 个 是 官 网 : http://www.freertos.org/ , 另…

金融项目实战 05|Python实现接口自动化——登录接口

目录 一、代码实现自动化理论及流程 二、脚本实现的理论和准备工作 1、抽取功能转为自动化用例 2、搭建环境(测试工具) 3、搭建目录结构 三、登录接口脚本实现 1、代码编写 1️⃣api目录 2️⃣script目录 2、断言 3、参数化 1️⃣编写数据存储文件:jso…

C# .NetCore 使用 Flurl.Http 与 HttpClient 请求处理流式响应

AI对话接口采用流式返回&#xff1a; 1、使用Flurl处理返回的数据流 using Flurl; using Flurl.Http; [HttpPost] public async Task<string> GetLiushiChatLaw() { //1、请求参数&#xff0c;根据实际情况 YourModel request new YourModel();string allStr …

南京地铁路线和站点2021-2030含规划线路shp数据arcmap地铁图坐标wgs84无偏移内容分析测评

南京地铁路线与站点数据是地理信息系统&#xff08;GIS&#xff09;中常用的一种数据格式&#xff0c;主要用来表示城市轨道交通网络。在本压缩包中&#xff0c;包含的是2021年至2030年&#xff0c;包括规划线路的南京地铁信息&#xff0c;数据类型为Shapefile&#xff08;shp&…

Web3D交互展示:重塑产品展示的新维度

在当今数字化时代&#xff0c;如何高效、直观地展示产品成为企业营销的关键一环。传统的二维图片和视频展示虽然在一定程度上能够传达产品信息&#xff0c;但往往缺乏沉浸感和互动性&#xff0c;难以满足消费者日益增长的体验需求。在此背景下&#xff0c;Web3D交互展示应运而生…

JVM远程调试原理剖析

一、如何开启JVM远程调试 当一个 Java 应用启动时&#xff0c;JVM 会根据启动参数配置其运行环境。使用 -agentlib:jdwp 参数启动远程调试功能&#xff0c;JVM 会初始化调试代理。 agentlib:jdwptransportdt_socket,servery,suspendn,address*:5005 -jar your_application.jar…

人工智能之深度学习-[1]-了解深度学习

深度学习 深度学习&#xff08;Deep Learning&#xff09;是机器学习&#xff08;Machine Learning&#xff09;的一种方法&#xff0c;它通过模拟人脑的神经网络结构来进行学习和推理。深度学习使用多层神经网络来分析和建模数据&#xff0c;尤其擅长处理大量数据和复杂模式的…

【C语言】_字符串追加/连接函数strcat

目录 1. 函数声明与功能 2. 使用示例 3. 注意事项 4. 模拟实现 4.1 第一版&#xff1a;判空返回值对标strcatconst保证不可修改 4.2 第二版&#xff1a;优化\0的单独拼接 1. 函数声明与功能 char * strcat ( char * destination, const char * source ); strcat函数功能…

【C#深度学习之路】如何使用C#实现Yolo8/11 Segment 全尺寸模型的训练和推理

【C#深度学习之路】如何使用C#实现Yolo8/11 Segment 全尺寸模型的训练和推理 项目背景项目实现推理过程训练过程 项目展望写在最后项目下载链接 本文为原创文章&#xff0c;若需要转载&#xff0c;请注明出处。 原文地址&#xff1a;https://blog.csdn.net/qq_30270773/article…