Redis命令的使用
List 列表
- 值插入:
- 值支持左、右PUSH,左、右POP
- 值支持阻塞左、右POP
- 值指定在pivot前或后位置插入
LINERT
- 插入支持
RPUSHX
和LPUSHX
的key存在才插入(不存在不会创建新列表,用在列表名提前初始化,防止列表名称写错)
- 值更新:
LSET
- 值删除:
LREM
- 值查询:
- 位置值查询:
LINDEX key idx
- 范围值查询
LRANGE list 0 -1
- 列表长度
LLEN
- AB两个队列导数据:
BRPOPLPUSH
key键操作
scan、hscan、sscan、zscan
1
2
3
4
5
6
7
8
9
10
| SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]
HSCAN key cursor [MATCH pattern] [COUNT count]
SSCAN key cursor [MATCH pattern] [COUNT count]
ZSCAN key cursor [MATCH pattern] [COUNT count]
// 示例
scan 0
scan 0 match str*
scan 0 match str* count 100
scan 0 match str* count 100 type string
|
cursor
游标从0开始,一直迭代到0位置,避免keys *
或smembers
类似命令一次性返回大量元素对服务器造成阻塞的问题- 可以通过
MATCH *
或者MATCH str*
类似的格式找到匹配的key - 可以通过COUNT一次返回超过默认值(count=10)个元素
- Type可以指定
string
、list
等类型
sort
Sort the elements in a list
, set
or sorted set
1
2
3
4
5
6
7
8
9
10
11
12
| SORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC|DESC] [ALPHA] [STORE destination]
// 基本操作
sort mylist
sort mylist DESC|ASC
// 排序
sort mylist LIMIT 0 10 # 可用于内容分页
sort mylist LIMIT 0 5 ALPHA DESC
sort mylist by nosort limit page*pagesize pagesize
// 支持通过外部件key排序
|
键过期设置、存在与否、ttl
- 超时后,只有对key执行更新如del、set、getset才会清除,还有包括类似incr、lpush、hset等
rename oldkey newkey
,新key的ttl全部为oldkey的
- TTL查看
ttl key
// -2:key不存在 -1:持久 nubmber: 指定时间pttl key
// 毫秒级别exists key
// 1存在 0不存在
- 秒级别:
- 剩余生存期:
expire 60
- 时间戳:
expireat 1612027421
- 毫秒级:
pexpire 1500
// 1.5秒pexpireat 1612027421000
// unix毫秒
- 移除
persis key
// 持久化key,成功返回1,否则返回0
其他key操作
- 重命名:
rename oldkey newkey
,已存在则覆盖,没有类型要求,同时时间会以oldkey同步 - 类型识别:
type
- 批量keys
- 删除key:
del key
object调试内部存储结构
- object支持
object refcount key
: key对应value被引用次数object encoding key
: 数据压缩编码方式object idletime key
: value闲置时间
- 编码方式:
- 字符串: raw(常规)、int(64位无符号整数)、
embstr
- 列表: ziplist(小列表)、linkedlist
- 集合: intset(小集合)、hastable
- 哈希表: zipmap(小哈希表)、hashtable
- 有序结合: ziplist(小有序集合列表)、skiplist
Hash
- 写入
- 单个设置
HSET key filed value
HSETNX key filed value
: 当field不存在才设置
- 批量设置
HMSET key filed value filed1 value1
- field增加
HINCRYBY key field increment
: hash中指定域增加数字HINCRYBYFLOAT key field incrment
: 增加浮点数
- 查询
- 批量获取值
HMGET key field1, field2...
:获取HGETALL key
: 通过kv形式,返回数组值HVALS key
: 仅获取key的所有值到数组HKEYS key
: 仅获取key的所有field到数组
- 删除
- Hash信息
HEXISTS key field
: field是否存在HLEN key
: 所有field长度HSTRLEN key field
: 指定field长度
- Hash值迭代
HVALS key
: 所有值HSCAN key cursor [MATCH pattern] [COUNT count]
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
| // 全量hash表的kv返回
127.0.0.1:6379[1]> HGETALL myhash
1) "f3"
2) "333"
3) "f4"
4) "444"
5) "f5"
6) "500"
7) "f6"
8) "600"
9) "f7"
10) "700"
11) "f44"
12) "44"
13) "f99.8"
14) "99.9"
// 分批hash表kv返回
127.0.0.1:6379[1]> HSCAN myhash 0 MATCH * COUNT 1
1) "0"
2) 1) "f4"
2) "444"
3) "f5"
4) "500"
5) "f6"
6) "600"
7) "f7"
8) "700"
9) "f44"
10) "44"
11) "f99.8"
12) "99.9"
// 所有keys数组
127.0.0.1:6379[1]> HKEYS myhash
1) "f3"
2) "f4"
3) "f5"
4) "f6"
5) "f7"
6) "f44"
7) "f99.8"
// 所有vals数组
127.0.0.1:6379[1]> HVALS myhash
1) "333"
2) "444"
3) "500"
4) "600"
5) "700"
6) "44"
7) "99.9"
// 批量查询
127.0.0.1:6379[1]> HMGET myhash f3 f5 f6
1) (nil)
2) "500"
3) "600"
127.0.0.1:6379[1]> HMGET myhash f4 f5 f6
1) "444"
2) "500"
3) "600"
// field长度
127.0.0.1:6379[1]> HGET myhash f99.8
"99.9"
127.0.0.1:6379[1]> HSTRLEN myhash f99.8
(integer) 4
127.0.0.1:6379[1]> HSTRLEN myhash f88.9
(integer) 0
127.0.0.1:6379[1]> HSTRLEN myhash f6
(integer) 3
// 删除
127.0.0.1:6379[1]> HDEL myhash 33
(integer) 0
127.0.0.1:6379[1]> HDEL myhash f3
(integer) 1
// field加减
127.0.0.1:6379[1]> HINCRBY myhash f99 99.8
(error) ERR value is not an integer or out of range
127.0.0.1:6379[1]> HINCRBYFLOAT myhash f99.8 99.9
"99.9"
|
Go redis