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 等。