夜间模式
通用且常用命令
key的类型、查找、删除重命名
Keys [pattern]
返回所有适配pattern的键名,支持通配符
例子
bash127.0.0.1:6379> keys * 1) "nnnn" 2) "name" 3) "pp" 127.0.0.1:6379> keys n* 1) "nnnn" 2) "name" 127.0.0.1:6379> keys name 1) "name"
1
2
3
4
5
6
7
8
9RENAME [key] [newName]
修改key的名字
bash127.0.0.1:6379> keys * 1) "name" 127.0.0.1:6379> RENAME name user OK 127.0.0.1:6379> keys * 1) "user"
1
2
3
4
5
6RENAMENX key newkey
设置新名字时,如果新名字原本已经存在key,那么就会覆盖掉原先的key
bash127.0.0.1:6379> keys * 1) "name" 2) "user" 127.0.0.1:6379> rename name user OK 127.0.0.1:6379> keys * 1) "user"
1
2
3
4
5
6
7此时就可通过这条命令让redis识别不存在的key才允许重命名
bash127.0.0.1:6379> keys * 1) "name" 2) "user" 127.0.0.1:6379> RENAMENX name user (integer) 0 127.0.0.1:6379> keys * 1) "name" 2) "user" 127.0.0.1:6379> RENAMENX name nnnn (integer) 1 127.0.0.1:6379> keys * 1) "nnnn" 2) "user"
1
2
3
4
5
6
7
8
9
10
11
12
13del [key]
删除key,返回删除的key数量,0是未删除
bash127.0.0.1:6379> keys * 1) "aaa" 2) "name" 3) "nnnn" 4) "pp" 127.0.0.1:6379> del aaa (integer) 1 127.0.0.1:6379> keys * 1) "name" 2) "nnnn" 3) "pp"
1
2
3
4
5
6
7
8
9
10
11删除多个key
bash127.0.0.1:6379> keys * 1) "aaa" 2) "name" 3) "ddd" 4) "ccc" 5) "bbb" 6) "nnnn" 7) "pp" 127.0.0.1:6379> del aaa bbb ccc ddd (integer) 4 127.0.0.1:6379> keys * 1) "name" 2) "nnnn" 3) "pp"
1
2
3
4
5
6
7
8
9
10
11
12
13
14FLUSHDB
删除当前库的所有key
bash127.0.0.1:6379> keys * 1) "name" 2) "bbb" 3) "aaa" 127.0.0.1:6379> FLUSHDB OK 127.0.0.1:6379> keys * (empty list or set)
1
2
3
4
5
6
7
8FLUSHALL
删除所有库的所有key
EXISTS [key]
检测key是否存在 ,是则返回1,不存在返回0
bash127.0.0.1:6379> keys * 1) "eee" 2) "aaa" 3) "name" 4) "ddd" 5) "nnnn" 6) "pp" 127.0.0.1:6379> EXISTS eee (integer) 1 127.0.0.1:6379> EXISTS vvv (integer) 0
1
2
3
4
5
6
7
8
9
10
11可以一次性查询多个key是否存在,返回存在的key的数量
bash127.0.0.1:6379> EXISTS eee aaa (integer) 2 127.0.0.1:6379> EXISTS eee aaa vvv (integer) 2
1
2
3
4type [keyname]
返回指定key的类型
bash127.0.0.1:6379> type name string
1
2
设置过期时间、查看过期时间
EXPIRE [key] [seconds]
设置指定key的过期时间,成功返回1,失败返回0
- 设置不存在的key时,会返回0,失败
bash127.0.0.1:6379> EXPIRE nsda 111 (integer) 0
1
2- 可以为已经有过期时间的key重新设置时间
bash127.0.0.1:6379> set aaa 123 EX 150 OK 127.0.0.1:6379> TTL aaa (integer) 145 127.0.0.1:6379> EXPIRE aaa 10000 (integer) 1 127.0.0.1:6379> ttl aaa (integer) 9991
1
2
3
4
5
6
7
8- 为无过期时间的key设置过期时间
bash127.0.0.1:6379> set bbb 321 OK 127.0.0.1:6379> ttl bbb (integer) -1 127.0.0.1:6379> EXPIRE bbb 1600 (integer) 1 127.0.0.1:6379> ttl bbb (integer) 1596
1
2
3
4
5
6
7
8- 如果设置为-1,不是无过期时间,而是删除key
bash127.0.0.1:6379> EXPIRE bbb -1 (integer) 1 127.0.0.1:6379> ttl bbb (integer) -2 127.0.0.1:6379> EXISTS bbb (integer) 0 127.0.0.1:6379> get bbb (nil)
1
2
3
4
5
6
7
8- 在设置key的时候就设置过期时间
bash127.0.0.1:6379> set ccc 123456 EX 150 OK 127.0.0.1:6379> TTL ccc (integer) 146
1
2
3
4TTL key
返回key过期时间,以秒为单位
特殊情况:-1为永不过期,-2为已过期或不存在
如下列情况所示,n1未设置有效期,n2设置有效时间,n3不存在键值
bash127.0.0.1:6379> set n1 n1 OK 127.0.0.1:6379> set n2 n22 EX 150 OK 127.0.0.1:6379> TTL n1 (integer) -1 127.0.0.1:6379> TTL n2 (integer) 139 127.0.0.1:6379> ttl n3 (integer) -2 127.0.0.1:6379> get n3 (nil)
1
2
3
4
5
6
7
8
9
10
11
12PEXPIRE key milliseconds
与
EXPIRE
类似,以毫秒设置过期时间bash127.0.0.1:6379> set ddd 123456789 OK 127.0.0.1:6379> PEXPIRE ddd 1500000 (integer) 1 127.0.0.1:6379> ttl ddd (integer) 1496
1
2
3
4
5
6也可以设置key时设置毫秒数
bash127.0.0.1:6379> set eee 654321 PX 999999 OK 127.0.0.1:6379> ttl eee (integer) 995
1
2
3
4pttl key
以毫秒返回过期时间
bash127.0.0.1:6379> ttl ddd (integer) 1363 127.0.0.1:6379> pttl ddd (integer) 1358057
1
2
3
4Expireat KEY TIMESTAMP
指定键设置时间戳为过期时间,与上面的
PEXPIRE
和EXPIRE
类似bash127.0.0.1:6379> Expireat name 1719330579 (integer) 1 127.0.0.1:6379> ttl name (integer) 3565
1
2
3
4
切换数据库/移动key到指定数据库
select [db]
切换数据库
bash127.0.0.1:6379> keys * 1) "name" 2) "nnnn" 3) "pp" 127.0.0.1:6379> select 1 OK 127.0.0.1:6379[1]> keys * 1) "name"
1
2
3
4
5
6
7
8move [key] [db]
把指定key移动到其他数据库
bash127.0.0.1:6379> select 0 OK 127.0.0.1:6379> keys * 1) "bbb" 2) "aaa" 127.0.0.1:6379> select 1 OK 127.0.0.1:6379[1]> keys * 1) "name" 127.0.0.1:6379[1]> move name 0 (integer) 1 127.0.0.1:6379[1]> keys * (empty list or set) 127.0.0.1:6379[1]> select 0 OK 127.0.0.1:6379> keys * 1) "name" 2) "bbb" 3) "aaa"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19可以看出原来属于数据库1的name键被传到了数据库0
随机返回key
RANDOMKEY
随机返回当前库的某个key
bash127.0.0.1:6379[5]> randomkey "dish_12" 127.0.0.1:6379[5]> randomkey "dish_12" 127.0.0.1:6379[5]> randomkey "setmealCache::13" 127.0.0.1:6379[5]> randomkey "dish_16" 127.0.0.1:6379[5]> randomkey "setmealCache::13"
1
2
3
4
5
6
7
8
9
10
序列化与反序列化
序列化指,把redis存储的数据转化为一个可以储存或传输在内存、文件的格式,由反序列化转化为原本的数据结构
序列化:
DUMP key
设置key会返回序列化后的字符串
反序列化:
RESTORE key ttl serialized-value [REPLACE]
key
将反序列化的数据存储的指定keyttl
过期时间,0为持久,单位是毫秒serialized-value
被序列化的值REPLACE
,可选的值,不选择时如果原key已存在会报错,选择时则覆盖设定的key
bash
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> get hello
"world"
127.0.0.1:6379> DUMP hello
"\x00\x05world\a\x00\xe6\xe3\xe9w\xd8c\xa7\xd8"
127.0.0.1:6379> get hello
"world"
127.0.0.1:6379> RESTORE world 0 "\x00\x05world\a\x00\xe6\xe3\xe9w\xd8c\xa7\xd8"
OK
127.0.0.1:6379> get world
"world"
127.0.0.1:6379> RESTORE world 0 "\x00\x05world\a\x00\xe6\xe3\xe9w\xd8c\xa7\xd8"
(error) BUSYKEY Target key name already exists.
127.0.0.1:6379> RESTORE world 0 "\x00\x05world\a\x00\xe6\xe3\xe9w\xd8c\xa7\xd8" replace
OK
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SCAN
SCAN cursor [MATCH pattern] [COUNT count]
同keys类似,用来迭代遍历键空间,与keys不同的是
SCAN
命令在遍历键空间时不会阻塞 Redis 服务器,因此非常适用于处理大型数据集。cousor
是用来定位的游标卡尺,设定一个位置来开始遍历,会返回一个新的游标值作为下一次遍历的位置,当返回值为0时代表遍历完成match pattern
作为匹配的条件,可以不设置,可接受通配符COUNT count count
设置返回的条数,默认是10,Redis 不保证返回的数量正好是count
,但会尽量接近这个值。bash127.0.0.1:6379[5]> scan 0 MATCH dish* count 2 1) "12" 2) 1) "dish_11" 2) "dish_18" 127.0.0.1:6379[5]> scan 12 match dish* count 3 1) "14" 2) 1) "dish_19" 2) "dish_12" 3) "dish_20" 127.0.0.1:6379[5]> scan 14 match dish* count 3 1) "15" 2) 1) "dish_16" 127.0.0.1:6379[5]> scan 15 match dish* count 3 1) "0" 2) (empty list or set) 127.0.0.1:6379[5]> keys dish* 1) "dish_11" 2) "dish_12" 3) "dish_18" 4) "dish_20" 5) "dish_16" 6) "dish_19" 127.0.0.1:6379[5]> scan 0 1) "0" 2) 1) "dish_11" 2) "dish_18" 3) "dish_19" 4) "dish_12" 5) "dish_20" 6) "setmealCache::13" 7) "dish_16" 8) "setmealCache::15" 9) "SHOP_STATUS" 127.0.0.1:6379[5]> scan 0 match dish* 1) "0" 2) 1) "dish_11" 2) "dish_18" 3) "dish_19" 4) "dish_12" 5) "dish_20" 6) "dish_16"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
特性 | SCAN | KEYS |
---|---|---|
用途 | 增量迭代遍历键空间 | 一次性返回所有匹配的键 |
阻塞行为 | 非阻塞,不会影响服务器性能 | 阻塞,可能导致服务器性能下降 |
适用场景 | 大规模键空间遍历,适合生产环境 | 小规模键空间遍历,适合调试和测试 |
返回结果 | 每次调用返回一批键和新的游标 | 一次性返回所有匹配的键 |
一致性 | 不保证一致性,键在扫描过程中可能被修改 | 保证一致性,返回快照时的所有键 |
复杂度 | 单次调用是O(1),多次遍历所有键是O(N) | O(N)(N 是数据库中的键的数量) |
内存使用 | 内存友好,适合大键空间 | 内存密集,可能导致内存不足 |
模式匹配 | 支持 MATCH 选项进行模式匹配 | 支持模式匹配 |
分页支持 | 支持,通过游标分页 | 不支持分页 |
操作提示 | 支持 COUNT 选项,提示每次返回的键数量 | 不支持操作提示 |
集合、哈希、有序集合有相应的scan,SSCAN、HSCAN、ZSCAN