Redis_command

AI 摘要: 本文主要介绍了Redis命令的使用,包括列表操作、键操作和Go Redis教程。列表操作包括值的插入、更新、删除和查询以及列表长度的获取等操作。键操作介绍了scan、hscan、sscan、zscan等操作。最后还简要提及了Go Redis教程。

Redis命令的使用

List 列表

  • 值插入:
    • 值支持左、右PUSH,左、右POP
    • 值支持阻塞左、右POP
    • 值指定在pivot前或后位置插入LINERT
    • 插入支持RPUSHXLPUSHX的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可以指定stringlist等类型

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

  1. 超时后,只有对key执行更新如del、set、getset才会清除,还有包括类似incr、lpush、hset等
  2. 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操作

  1. 重命名: rename oldkey newkey,已存在则覆盖,没有类型要求,同时时间会以oldkey同步
  2. 类型识别: type
  3. 批量keys
  4. 删除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到数组
  • 删除
    • HDEL key field,field2...
  • 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