自学内容网 自学内容网

【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)!