Redis 模块

官方提供的模块

RedisBloom

支持布隆过滤模块

GitHub

使用

1
docker run -p 6379:6379 --name redis-redisbloom redislabs/rebloom:latest
1
redis-server --loadmodule /path/to/redisbloom.so

命令

1
2
3
4
5
6
7
8
9
10
11
12
13
# 添加元素
BF.ADD key value
bf.madd key value value...

# 判断元素是否存在
BF.EXISTS key value
bf.mexists key value value...

# 创建一个过滤器
# one-more-filter: 键
# 0.0001: 期望错误率,期望错误率越低,需要的空间就越大。默认为0.01
# 1000000: 初始容量,当实际元素的数量超过这个初始化容量时,误判率上升。默认为100
bf.reserve one-more-filter 0.0001 1000000

CuckooFilter

布谷鸟过滤器:Cuckoo hash算法的哈希函数是成对的(具体的实现可以根据需求设计),每一个元素都有两个哈希函数用来分别映射到两个位置,其中一个是记录的位置,另一个是备用位置,这个备用位置是处理碰撞时用的。

GitHub

Redisjson

RedisJSON是一个Redis模块,它实现了JSON数据交换标准ECMA-404,作为原生数据类型。它允许从Redis中存储、更新和获取JSON值.

GitHub

使用

1
docker run -p 6379:6379 --name redis-redisjson redislabs/rejson:latest
1
loadmodule /usr/lib/redis/module/rejson.so

命令

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
85
86
87
88
89
90
91
92
93
94
命令和子命令的名称是大写的,例如JSON.SET 和INDENT
强制参数用尖括号括起来,例如<path>
可选参数用方括号括起来,例如[index]
其他可选参数由三个句点字符表示,即...
管道字符|表示异或

##标量命令
#设置json值
JSON.SET <key> <path> <json> [NX | XX]
说明:
NX: 如果不存在就添加
XX: 如果存在就更新

#查询key的值
JSON.GET <key> [INDENT indentation-string] [NEWLINE line-break-string] [SPACE space-string] [path ...]
说明:
可以接受多个path,默认是root
INDENT: 设置嵌套级别
NEWLINE: 每行末尾打印的字符串
SPACE: 设置key和value之间的字符串
JSON.GET myjsonkey INDENT "\t" NEWLINE "\n" SPACE " " .

JSON.SET doc $ '{"a":2, "b": 3, "nested": {"a": 4, "b": null}}'
JSON.GET doc $..b
JSON.GET doc ..a $..b


#查询指定路径下的多个key,不存在的key或path返回null
JSON.MGET <key> [key ...] <path>

JSON.SET doc1 $ '{"a":1, "b": 2, "nested": {"a": 3}, "c": null}'
JSON.SET doc2 $ '{"a":4, "b": 5, "nested": {"a": 6}, "c": null}'

JSON.MGET doc1 doc2 $..a

#删除值
JSON.DEL <key> [path]
说明:
不存在的key或path会被忽略
返回integer

#增加数字的值
JSON.NUMINCRBY <key> <path> <number>

#数字乘法,过时了
JSON.NUMMULTBY <key> <path> <number>

#追加字符串
JSON.STRAPPEND <key> [path] <json-string>

#字符串的长度
JSON.STRLEN <key> [path]

##数组命令
#追加数组元素
JSON.ARRAPPEND <key> <path> <json> [json ...]

#搜索指定元素在数组中第一次出现的位置,如果存在返回索引,不存在返回-1
JSON.ARRINDEX <key> <path> <json-scalar> [start [stop]]
说明:
[start [stop]] 从start开始(包含)到stop(不包含)的范围

#在数组指定位置插入元素
JSON.ARRINSERT <key> <path> <index> <json> [json ...]
说明:
index: 0是数组第一个元素,负数表示从末端开始计算

#数组的长度
JSON.ARRLEN <key> [path]
说明:
如果key或path不存在,返回null

#删除返回数组中指定位置的元素
JSON.ARRPOP <key> [path [index]]
说明:
index: 默认是-1,最后一个元素


#去掉元素,使其仅包含指定的包含范围的元素
JSON.ARRTRIM <key> <path> <start> <stop>

##对象命令
#返回对象中的key
JSON.OBJKEYS <key> [path]

#返回对象key的数量
JSON.OBJLEN <key> [path]

##模块命令
#返回json value的数据类型
JSON.TYPE <key> [path]

#返回key的字节数
JSON.DEBUG MEMORY <key> [path]

redlock

分布式锁