Redis命令-key
Redis 键(key)
Redis 键命令用于管理 redis 的键。
语法
Redis 键命令的基本语法如下:
> COMMAND KEY_NAME
实例
> set name tom
OK
> del name
1
在以上实例中 DEL 是一个命令, name 是一个键。 如果键被删除成功,命令执行后输出 (integer) 1,否则将输出 (integer) 0
Redis keys 命令
更多命令请参考:https://redis.io/commands
初始化一些数据
初始化一些key
excel 创建数据,贴到nodepad++,然后贴到idea的terminal执行就好了
set node1 1
set node2 2
set node3 3
set node4 4
set node5 5
set node6 6
set node7 7
set node8 8
set node9 9
set node10 10
set node11 11
set node12 12
set node13 13
set node14 14
set node15 15
set node16 16
set node17 17
set node18 18
set node19 19
set node20 20
set node21 21
set node22 22
set node23 23
set node24 24
set node25 25
set node26 26
set node27 27
set node28 28
set node29 29
DEL
该命令用于在 key 存在时删除 key。
语法
DEL KEY_NAME
返回值
被删除 key 的数量。
实例
> del name
0
> set name tom
OK
> del name
1
EXISTS
Redis EXISTS 命令用于检查给定 key 是否存在。
语法
EXISTS KEY_NAME
返回值
若 key 存在返回 1 ,否则返回 0 。
实例
> exists name
0
> set name tom
OK
> exists name
1
Expire
Redis Expire 命令用于设置 key 的过期时间,key 过期后将不再可用。单位以秒计。
语法
Expire KEY_NAME TIME_IN_SECONDS
返回值
设置成功返回 1 。 当 key 不存在或者不能为 key 设置过期时间时(比如在低于 2.1.3 版本的 Redis 中你尝试更新 key 的过期时间)返回 0 。
实例
> expire name 10000
1
> expire task 10
0
PERSIST
Redis PERSIST 命令用于移除给定 key 的过期时间,使得 key 永不过期。
语法
PERSIST KEY_NAME
返回值
当过期时间移除成功时,返回 1 。 如果 key 不存在或 key 没有设置过期时间,返回 0
实例
> PERSIST name
1
> PERSIST task
0
Keys
Redis Keys 命令用于查找所有符合给定模式 pattern 的 key 。。
Redis 是单线程的,意味着命令阻塞,生产禁用因为对于百万级以上的key,会导致故障。
测试环境调试用的非常多
语法
KEYS PATTERN
返回值
符合给定模式的 key 列表 (Array)。
实例
> keys node*
node13
node2
node4
node16
node18
node29
node27
node23
node10
node19
node21
node6
node17
node26
node1
node12
node28
node20
node15
node24
node7
node3
node22
node11
node14
node5
node25
node9
node8
TTL
Redis TTL 命令以秒为单位返回 key 的剩余过期时间。
语法
TTL KEY_NAME
返回值
当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,以秒为单位,返回 key 的剩余生存时间。
注意:在 Redis 2.8 以前,当 key 不存在,或者 key 没有设置剩余生存时间时,命令都返回 -1 。
实例
> ttl name
-1
> ttl task
-2
Type
Redis Type 命令用于返回 key 所储存的值的类型。
语法
TYPE KEY_NAME
返回值
返回 key 的数据类型,数据类型有:
- none (key不存在)
- string (字符串)
- list (列表)
- set (集合)
- zset (有序集)
- hash (哈希表)
实例
> type name
string
> type task
none
Expireat
Redis Expireat 命令用于以 UNIX 时间戳(unix timestamp)格式设置 key 的过期时间。key 过期后将不再可用。
语法
TIME_IN_UNIX_TIMESTAMP:指定key在指定的时间戳过期,精度到秒。
Expireat KEY_NAME TIME_IN_UNIX_TIMESTAMP
返回值
-
设置成功返回 1 。
-
返回0,当指定的key不存在时。
给指定的key设置一个过去的时间戳(小于当前时间戳)时,Redis会立即删除掉相应的key。
实例
> set name tom
OK
> EXPIREAT name 1679567492
1
> ttl name
74446
PEXPIRE
Redis PEXPIRE 命令和 EXPIRE 命令的作用类似,但是它以毫秒为单位设置 key 的生存时间,而不像 EXPIRE 命令那样,以秒为单位。
语法
PEXPIRE key milliseconds
返回值
设置成功,返回 1
key 不存在或设置失败,返回 0
实例
> PEXPIRE name 10000000
1
> ttl name
9994
> PEXPIRE name 10000000
1
> PEXPIRE task 10000000
0
PEXPIREAT
Redis PEXPIREAT 命令用于设置 key 的过期时间,以毫秒计。key 过期后将不再可用。
语法
PEXPIREAT KEY_NAME TIME_IN_MILLISECONDS_IN_UNIX_TIMESTAMP
返回值
设置成功返回 1 。
当 key 不存在或者不能为 key 设置过期时间时(比如在低于 2.1.3 版本的 Redis 中你尝试更新 key 的过期时间)返回 0 。
实例
> PEXPIREAT name 1679567492000
1
> ttl name
73931
Move
Redis MOVE 命令用于将当前数据库的 key 移动到给定的数据库 db 当中。
基本用不到
扩展小知识select db 可以切换库
语法
MOVE KEY_NAME DESTINATION_DATABASE
返回值
移动成功返回 1 ,失败则返回 0 。
实例
> select 0 # redis默认使用数据库 0,为了清晰起见,这里再显式指定一次。
OK
> set com ise
OK
> move com 1
1
> get com
null
> select 1
OK
> get com
ise
Pttl
Redis Pttl 命令以毫秒为单位返回 key 的剩余过期时间。
语法
PTTL KEY_NAME
返回值
当 key 不存在时,返回 -2 。
当 key 存在但没有设置剩余生存时间时,返回 -1 。
否则,以毫秒为单位,返回 key 的剩余生存时间。
实例
> select 0
OK
> pttl name
73437522
> pttl task
-2
RANDOMKEY
Redis RANDOMKEY 命令从当前数据库中随机返回一个 key 。
语法
RANDOMKEY
返回值
当数据库不为空时,返回一个 key 。 当数据库为空时,返回 nil (windows 系统返回 null)
实例
> RANDOMKEY
node4
Rename
Redis Rename 命令用于修改 key 的名称 。
语法
RENAME OLD_KEY_NAME NEW_KEY_NAME
返回值
改名成功时提示 OK ,失败时候返回一个错误。
当 OLD_KEY_NAME 和 NEW_KEY_NAME 相同,或者 OLD_KEY_NAME 不存在时,返回一个错误。
当 NEW_KEY_NAME 已经存在时, RENAME 命令将覆盖旧值。
实例
> rename name title
OK
> rename name title
ERR no such key
> rename title title
OK
> set task tom
OK
> rename title tom
OK
> get task
tom
> get title
null
> get tom
tom
> set tom cat
OK
> rename tom task
OK
> get task
cat
Renamenx
Redis Renamenx 命令用于在新的 key 不存在时修改 key 的名称 。
语法
RENAMENX OLD_KEY_NAME NEW_KEY_NAME
返回值
修改成功时,返回 1 。 如果 NEW_KEY_NAME 已经存在,返回 0 。
实例
> renamenx task name
1
> renamenx task name
ERR no such key
SCAN
scan命令不是不重要才放到后面,反而是因为太重要,才放到后面的。这个是真正业务上常用命令,坑也多,无法根据mongodb或者mysql的游标触类旁通
Redis Scan 命令用于迭代数据库中的数据库键。
SCAN 命令是一个基于游标的迭代器,每次被调用之后, 都会向用户返回一个新的游标, 用户在下次迭代时需要使用这个新游标作为 SCAN 命令的游标参数, 以此来延续之前的迭代过程。
SCAN 返回一个包含两个元素的数组, 第一个元素是用于进行下一次迭代的新游标, 而第二个元素则是一个数组, 这个数组中包含了所有被迭代的元素。如果新游标返回 0 表示迭代已结束。
相关命令:
- SSCAN命令用于迭代集合键中的元素。
- HSCAN命令用于迭代哈希键中的键值对。
- ZSCAN命令用于迭代有序集合中的元素(包括元素成员和元素分值)。
语法
SCAN cursor [MATCH pattern] [COUNT count]
- cursor - 游标。
- pattern - 匹配的模式。
- count - 指定从数据集里返回多少元素,默认值为 10 。业务上常用值是10000
返回值
数组列表。
实例
> scan 0 match "node*" count 10
10
node18
node24
node7
node3
node4
node12
node19
node5
node2
node6
node17
> scan 10 match "node*" count 10
11
node29
node27
node21
node13
node22
node11
node16
node28
node25
node26
node1
> scan 11 match "node*" count 10
0
node23
node10
node14
node20
node15
node9
node8
scan知识扩展
参考笔记
https://www.cnblogs.com/hbuuid/p/16288263.html
在内网真实业务redis上去操作是同样的问题,scan返回值是随机的,可能有可能没有,可能重复,新增的可以也扫描不到。