【redis】键的全局命令
Redis提供了一系列用于管理和操作键的全局命令。这些命令允许你查看、删除、迁移键,以及执行其他与键相关的操作。
以下是一些常用的Redis键全局命令:
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 key:检查一个键是否存在。如果存在,返回1;否则,返回0。
127.0.0.1:6379> exists a1
(integer) 1
127.0.0.1:6379> exists b1
(integer) 0
DEL
DEL key [key ...]
:删除一个或多个键。返回被删除的键的数量。
127.0.0.1:6379> del a5 a6
(integer) 2
TYPE
TYPE key:返回键所存储的值的类型。
127.0.0.1:6379> type a1
string
RENAME
RENAME key newkey:将键重命名为新的键名。如果新键名已存在,则覆盖旧值。
127.0.0.1:6379> rename a1 c1
OK
RENAMENX
RENAMENX key newkey:仅在新键名不存在时,将键重命名为新的键名。如果操作成功,返回1;如果新键名已存在,返回0。
127.0.0.1:6379> renamenx c1 a2
(integer) 0
127.0.0.1:6379> renamenx c1 a1
(integer) 1
EXPIRE
EXPIRE key seconds:为键设置一个过期时间(以秒为单位)。当过期时间到达时,键会被自动删除。
127.0.0.1:6379> expire a1 60
(integer) 1
PEXPIRE
PEXPIRE key milliseconds:为键设置一个过期时间(以毫秒为单位)。
127.0.0.1:6379> pexpire a1 6000
(integer) 1
EXPIREAT
EXPIREAT key timestamp:指定键在何时过期(以秒级UNIX时间戳表示)。
127.0.0.1:6379> expireat a1 1736500968
(integer) 1
PEXPIREAT
PEXPIREAT key milliseconds-timestamp:指定键在何时过期(以毫秒级UNIX时间戳表示)。
127.0.0.1:6379> pexpireat a1 1736501168000
(integer) 1
TTL
TTL key:获取键的剩余生存时间(以秒为单位)。如果键不存在或没有设置过期时间,返回-2或-1。
127.0.0.1:6379> ttl a1
(integer) 152
127.0.0.1:6379> ttl a2
(integer) -1
127.0.0.1:6379> ttl x1
(integer) -2
PTTL
PTTL key:获取键的剩余生存时间(以毫秒为单位)。
127.0.0.1:6379> pttl a1
(integer) 109988
127.0.0.1:6379> pttl a2
(integer) -1
127.0.0.1:6379> pttl x1
(integer) -2
PERSIST
PERSIST key:移除键的过期时间,使其变为永久存储。
127.0.0.1:6379> persist a1
(integer) 1
127.0.0.1:6379> ttl a1
(integer) -1
MOVE
MOVE key db:将键移动到另一个数据库。如果操作成功,返回1;如果键不存在或移动失败(如目标数据库key已存在),返回0。Redis默认支持16个逻辑数据库(编号从0到15),你可以通过SELECT命令来选择当前操作的数据库。
127.0.0.1:6379> move a1 15
(integer) 1
127.0.0.1:6379> select 15
OK
127.0.0.1:6379[15]> get a1
"aa"
DUMP
DUMP key:返回一个序列化后的值,该值包含键的类型和值本身。可以使用RESTORE命令来恢复该值。
127.0.0.1:6379> dump a1
"\x00\x020a\t\x00\xcb\x0e\xdaX\xef\x82$\b"
RESTORE
RESTORE key ttl serialized-value:使用DUMP命令返回的序列化值来恢复键。ttl参数指定键的过期时间(以毫秒为单位),如果TTL为0,则键没有过期时间。
127.0.0.1:6379> restore z1 0 "\x00\x020a\t\x00\xcb\x0e\xdaX\xef\x82$\b"
OK
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) 4
127.0.0.1:6379> hmset user_info_1 name admin level 9999
OK
127.0.0.1:6379> hmset user_info_2 name jack level 10
OK
127.0.0.1:6379> hmset user_info_3 name peter level 25
OK
127.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_*->level
1) "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) 5
127.0.0.1:6379> lrange users_sorted 0 -1
1) "2"
2) "3"
3) "5"
4) "7"
5) "8"
结果不会直接返回给客户端,但排序后的结果会存储在users_sorted键中。
原文地址:https://blog.csdn.net/u022812849/article/details/145155343
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!