#

Set#

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
-- set o(1)
SET key value
-- mset mget 多条set一起执行,可以减少网络开销 o(n)

set number "10086"

set book "today is a nice day"

-- key不存在时创建, key存在时覆盖
set book "today is a nice2 day"

-- key不存在时操作失败,key存在时覆盖
set book "today is a nice day" nx

-- key存在时覆盖, 不存在时操作失败
set book "today is a nice day" xx

-- key存在时返回值, 不存在时返回nil
get book

-- 获取旧值并设置新值(如果key存在覆盖;不存在创建)
getset book "today is a nice2 day"
getset books "today is a nice day"
-- ----------------------------------------------
-- 获取key对应值的字节长度 book-20, 不存在返回0
strlen book

-- GETRANGE-SETRANGE 左闭右闭 o(n) 文章的预览功能,截取部分内容
-- 索引:
-- 0 1 2 3 4 5 6 7 8 9 10 正向索引
-- -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 反向索引
-- t o d a y i s a n text: today is a nice2 day
getrange book 0 6
-- 获取全部 0 -1
getrange book 0 -1
-- 按照索引设置值, 直接覆盖,自动扩展
setrange book 0 "TYYYY"
-- 修改后为: TYYYY is a nice2 day

-- append 追加值到末尾,若key不存在,则创建 o(n)
append book "!!!"
-- 修改后为: TYYYY is a nice2 day!!!

------------------------------------------------
-- INCR-DECR 自增自减1 ; INCRBY-DECRBY 自增自减指定值 ; INCRBYFLOAT 自增指定浮点数 o(1) 可以用作计数器,限制次数器
set in 1

incrby in 2
-- 输出: 3

decrby in 1
-- 输出: 2

incr in
-- 输出: 3

decr in
-- 输出: 2

image-20241128000639499

Hash#

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
------------------------------------------------
-- HSET-HGET-HGETALL-HDEL-HLEN o(1) 用于存储对象, 存储无序的键值对
-- HSET hash field value
-- Hash的操作对象一般都是 key-field 的形式,然后获取或存储value

-- 不存在时创建, 存在时覆盖
HSET say name "zhangsan"
HSET say age 18
-- 不存在时创建, 存在时操作失败
HSETNX say name "lisi"
-- 存在时覆盖, 不存在时操作失败
HSETXX say name "lisi"
-- 获取key中的field对应的值,不存在返回nil
HGET say name

-- 对字段存储的整数值进行加减法操作, 直接修改数值正负
HINCRBY say age 1
-- 对字段存储的浮点数值进行加减法操作, 直接修改数值正负
HINCRBYFLOAT say age 1.5

-- 获取字段值的长度
HSTRLEN say name
-- 检查字段是否存在
HEXISTS say name

-- 获取散列的field数量
HLEN say
-- 设置多个field-value
HMSET say name "zhangsan" age 18
-- 获取多个field-value
HMGET say name age

-- 获取所有字段
HKEYS say
-- 获取所有值
HVALS say
-- 获取所有field-value
HGETALL say

-- 删除字段
HDEL say name
-- 删除key
DEL say

List#

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
------------------------------------------------
-- LIST o(1) 用于存储列表
-- LPUSH 从左边插入元素 [c,b,a]
LPUSH list "a" "b" "c"
-- RPUSH 从右边插入元素 [c,b,a,d,e]
RPUSH list "d" "e"
-- LPUSHX 从左边插入元素, key不存在时操作失败
LPUSHX list "f" "g"
-- RPUSHX 从右边插入元素, key不存在时操作失败
RPUSHX list "f" "g"

-- LPOP 从左边弹出元素 1个
LPOP list
-- RPOP 从右边弹出元素 1个
RPOP list
-- RPOPLPUSH 将list1的最后一个元素弹出并插入到list2的最前面,list2不存在时创建
RPOPLPUSH list list2

-- LLEN 获取列表长度
LLEN list
-- LINDEX 获取指定索引的元素
LINDEX list 0
-- LRANGE 获取指定范围的元素
LRANGE list 0 -1

-- LSET 设置指定索引的元素 o(n)
LSET list 0 "A"
-- LINSERT 在指定元素前或后插入元素 o(n)
LINSERT list BEFORE "A" "B"
LINSERT list AFTER "A" "C"

-- LTRIM 只保留[start,end]之间的元素 o(n)
LTRIM list 0 2
-- LREM 删除指定数量的元素 o(n) , count>0 从左到右删除count个; count<0 从右到左删除count个; count=0 删除所有
LREM list 1 "B"
LREM list -1 "C"
LREM list 0 "A"

-- DEL 删除key
DEL list

-- 阻塞式弹出元素 -- 可以实现消息队列 o(n)
-- BLPOP list [list ...] timeout
-- BRPOP list [list ...] timeout
-- BRPOPLPUSH list1 list2 timeout
-- BLPOP 命令会按照从左到右的顺序依次检查用户给定的列表,并对最先遇到的非空列表执行左端元素弹出操作。
-- 如果 BLPOP 命令在检查了用户给定的所有列表之后都没有发现可以执行弹出操作的非空列表,那么它将阻塞执行该命令的客户端并开始等待,
-- 直到某个给定列表变为非空,又或者等待时间超出给定时限为止。

SET#

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
------------------------------------------------
-- SET o(1) 用于存储集合 会忽略不存在(srem)或者已经存在(sadd)的元素 主要是为了去重-点赞,投票,好友关系
-- SADD set element [element ...] set中的元素是唯一的 o(n)
sadd set "a" "b" "c"
sadd set2 "b" "c" "d"
-- SREM set element [element ...] 删除set中的元素 o(n)
srem set "a"
-- smove 将set1中的元素移动到set2中 o(n)
smove set set2 "b"
-- SMEMBERS 获取set中的所有元素 o(n)
smembers set
-- SCARD 获取set中元素的数量 o(1)
scard set
-- SISMEMBER 判断元素是否在set中 o(1)
sismember set "b"

-- 随机处理:
-- SRANDMEMBER set [count] 随机获取set中的元素
srandmember set 2
-- SPOP 随机删除元素,并返回删除的元素
spop set

-- 交集-并集-差集
-- set:[a,b,c] set2:[b,c,d]
-- SINTER key [key ...] 获取多个set的交集
sinter set set2
-- 输出: [b,c]
-- SUNION key [key ...] 获取多个set的并集
sunion set set2
-- 输出: [a,b,c,d]
-- SDIFF key [key ...] 获取多个set的差集
sdiff set set2
-- 即set - set2 输出: [a]
sdiff set2 set
-- 即set2-set 输出: [d]
-- SDIFFSTORE - SINTERSTORE - SUNIONSTORE 将结果存储到新的set
SDIFFSTORE set3 set set2
SINTERSTORE set3 set set2
SUNIONSTORE set3 set set2

数据库#

redis 有 0-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
------------------------------------------------
-- 数据库 在数据库层面的操作是对于key的操作
-- 切换数据库
SELECT 1

-- 获取所有的key,这个是一次性返回,会导致redis阻塞
KEYS *
-- 可以使用匹配符号来匹配自己想要的key
KEYS "book*"

-- 游标查询返回KEYS SCAN cursor [MATCH pattern] [COUNT count]
Scan 0
-- 输出:["say", "books", "list", "set", "set2", "book", "number", "in"]
SCAN 0 COUNT 3
-- 输出:["say", "books", "list"]
SCAN 6
-- 输出:["set", "set2", "book", "number", "in"]
SCAN 0 MATCH "book*"
-- 输出["books", "book"]
-- 如果要对值进行游标查询返回: 主要是为了避免HKEYS,HVALS,SMEMBERS的阻塞问题
-- HSCAN - SSCAN - ZSCAN 命令来实现
HSCAN say 0
SSCAN set 0
ZSCAN list 0

-- SORT 排序key的值
-- EXIST key 判断key是否存在
-- TYPE key 获取key的类型
-- TTL key 获取key的过期时间
-- RENAME key newkey 重命名key
-- MOVE key db 移动key到指定数据库
-- DEL key [key ...] 删除key 注意会阻塞
-- EXPIRE key seconds 设置key的过期时间
-- UNLINK key [key ...] 删除key(非阻塞)
-- FLUSHDB 清空当前数据库的数据
-- FLUSHALL 清空所有数据库的数据

EXPIRE#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
------------------------------------------------
-- set 这里的过期时间是针对key的
-- expire 是秒级的精度,可以设置key的过期时间
expire set 3
-- pexpire 是毫秒级的精度,可以设置key的过期时间
pexpire set 3000
-- set 和 expire的同时进行 -- 可以保证原子性
set set "f" EX 3
set set "a" PX 3000

-- EXPIREAT key timestamp 设置key的过期时间戳
-- PEXPIREAT key timestamp 设置key的过期时间戳(毫秒级)
EXPIREAT set 1610000000
PEXPIREAT set 1610000000000

-- 获取过期时间
TTL set
PTTL set

ZSET#

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
--------------------------------------------------
-- zset 有序集合
zadd zss 1 a 2 b 3 c 4 d 5 e

-- zrandmember 随机获取指定元素
zrandmember zss 2

-- zrange 获取指定范围的元素
zrange zss 0 -1

-- zrangebyscore 获取指定分数范围的元素
zrangebyscore zss 1 3

-- zrevrangebyscore 获取指定分数范围的元素, 从大到小
zrevrangebyscore zss 3 1

-- zrank 获取指定元素的排名
zrank zss a

-- zrevrank 获取指定元素的排名, 从大到小
zrevrank zss a

-- zscore 获取指定元素的分数
zscore zss a

-- zcount 获取指定分数范围的元素数量
zcount zss 1 3

-- zcard 获取元素数量
zcard zss

-- zrem 删除指定元素
zrem zss a

LUA脚本#