Redis命令-key

发布时间 2023-03-22 21:13:26作者: 红尘过客2022

Redis 键(key)

Redis 键命令用于管理 redis 的键。

语法

Redis 键命令的基本语法如下:

> COMMAND KEY_NAME

实例

> set name tom
OK
> del name
1

在以上实例中 DEL 是一个命令, name 是一个键。 如果键被删除成功,命令执行后输出 (integer) 1,否则将输出 (integer) 0


Redis keys 命令

下表给出了与 Redis 键相关的基本命令:

序号 命令 描述
1 DEL key 该命令用于在 key 存在时删除 key。
2 DUMP key 序列化给定 key ,并返回被序列化的值。
3 EXISTS key 检查给定 key 是否存在。
4 EXPIRE key seconds 为给定 key 设置过期时间,以秒计。
5 EXPIREAT key timestamp EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置过期时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)。
6 PEXPIRE key milliseconds 设置 key 的过期时间以毫秒计。
7 PEXPIREAT key milliseconds-timestamp 设置 key 过期时间的时间戳(unix timestamp) 以毫秒计
8 KEYS pattern 查找所有符合给定模式( pattern)的 key 。
9 MOVE key db 将当前数据库的 key 移动到给定的数据库 db 当中。
10 PERSIST key 移除 key 的过期时间,key 将持久保持。
11 PTTL key 以毫秒为单位返回 key 的剩余的过期时间。
12 TTL key 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。
13 RANDOMKEY 从当前数据库中随机返回一个 key 。
14 RENAME key newkey 修改 key 的名称
15 RENAMENX key newkey 仅当 newkey 不存在时,将 key 改名为 newkey 。
16 SCAN cursor [MATCH pattern] [COUNT count] 迭代数据库中的数据库键。
17 TYPE key 返回 key 所储存的值的类型。

更多命令请参考:https://redis.io/commands

scan命令

初始化一些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


客户端查询

  • 返回值的第一行10是 第一次迭代时返回的游标
  • 下次使用上次返回的游标
  • 当返回值是0的时候结束
> 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命令解读

**真正业务禁用keys **

redis的单线程的

keys指令会导致线程阻塞一段时间,线上服务会停顿,直到指令执行完毕,服务才能恢复。

这个时候可以使用scan指令,scan指令可以无阻塞的提取出指定模式的key列表,但是会有一定的重复概率,在客户端做一次去重就可以了,但是整体所花费的时间会比直接用keys指令长

Warning: consider KEYS as a command that should only be used in production environments 
with extreme care. It may ruin performance when it is executed against large databases. 
This command is intended for debugging and special operations, such as changing your 
keyspace layout. Don't use KEYS in your regular application code. If you're looking for
 a way to find keys in a subset of your keyspace, consider using sets.

SCAN是一个基于游标的迭代器。这意味着在每次调用该命令时,服务器都会返回一个更新后的游标,用户需要在下一次调用中使用它作为游标参数。当游标设置为0时开始迭代,当服务器返回的游标为0时终止迭代。从游标值为0开始迭代,并调用SCAN直到返回的游标再次为0,这称为完整迭代。

时间复杂度:每次调用 O(1)。O(N) 用于完整的迭代,包括足够的命令调用以使光标返回 0。N 是集合内的元素数。

和scan命令相关的还有另外3个命令,分别是:

  • SCAN 迭代当前选定的Redis数据库中的一组键
  • SSCAN 迭代 Sets 类型的元素
  • HSCAN 迭代 Hash 类型的字段及其相关值
  • ZSCAN 迭代 Sorted Set 类型的元素及其相关分数

语法:

SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]

选项:

MATCH选项
和KEYS命令类似,后面可以跟一个通配符

COUNT选项
SCAN不能保证每次迭代返回的元素数量,但可以使用COUNT选项根据经验调整SCAN的行为。基本上,使用COUNT,用户指定了每次调用时从集合中检索元素所需完成的工作量。这只是实现的一个提示,但是一般来说,但是在大多数情况下,这种提示都是有效的(在数据量少的情况下,COUNT值与返回的结果数量不相等)。

TYPE选项
可以使用 TYPE 选项要求 SCAN 仅返回与给定类型匹配的对象。 TYPE 选项仅在整个数据库 SCAN 上可用,而不是 HSCAN 或 ZSCAN 等。