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返回值是随机的,可能有可能没有,可能重复,新增的可以也扫描不到。

https://www.cnblogs.com/jelly12345/p/16424080.html

posted @ 2023-03-21 22:57  红尘过客2022  阅读(47)  评论(0编辑  收藏  举报