Redis Stack扩展功能--重点笔记
一 Redis JSON
Redis JSON模块为Redis添加了JSON数据类型的⽀持,并且对JSON数据提供了快速进⾏增、删、改、查的操作。
-- 设置⼀个JSON数据 JSON.SET user $ '{"name":"loulan","age":18}' ## key是user,value就是⼀个JSON数据。其中$表示JSON数据的根节点。 -- 查询JSON数据 JSON.GET user -- 查询JSON对象的name属性 JSON.GET user $.name -- 查看数据类型 JSON.TYPE user -- object JSON.TYPE user $.name --- string JSON.TYPE user $.age --- integer --修改JSON数据 年龄加2 JSON.NUMINCRBY user $.age 2 -- 添加新的字段 JSON.SET user $.address '{"city": "Changsha", "country": "China"}' NX ## NX 表示只有当address字段不存在的时候才进⾏设置。 -- 在JSON数组中添加元素 JSON.SET user $.hobbies '["reading"]' JSON.ARRAPPEND user $.hobbies '"swimming"' -- 查看JSON对象中key的个数 JSON.OBJLEN user $.address -- 查看user对象的所有key JSON.OBJKEYS user -- 删除JSON中的key JSON.DEL user $.address
Redis JSON的优势
Redis JSON存储数据的性能更⾼。Redis JSON底层其实是以⼀种⾼效的⼆进制的格式存储。相⽐简单的⽂本格式,⼆进制格式进⾏JOSN格式读写的性能更⾼,也更节省内存。根据官⽹的性能测试报告,使⽤
Redis JSON读写JSON数据,性能已经能够媲美MongoDB以及ElasticSearch等传统NoSQL数据库。
Redis JSON使⽤树状结构来存储JSON。这种存储⽅式可以快速访问⼦元素。与传统的⽂本存储⽅案相⽐,树状存储结构能够更⾼效的执⾏查询操作。
与Redis⽣态集成度⾼。作为Redis的扩展模块,Redis JSON和Redis的其他功能和⼯具⽆缝集成。这意味着开发者可以继续使⽤TTL、Redis事务、发布/订阅、Lua脚本等功能。
二 Bloom Filter
⼀句话解释:⼀种快速检索⼀个元素是否在⼀个海量集合中的算法。
布隆过滤器使⽤⼀个很⻓的⼆进制位数组和⼀系列哈希函数来保存元素。优点是⾮常节省空间,并且查询时间也⾮常快。缺点是有⼀定的误失败概率以及⽆法删除元素 ,也⽆法给元素计数。
位数组(Bit Array):布隆过滤器使⽤⼀个⻓度固定的位数组来存储数据。每个位置只占⽤⼀个⽐特(0或1),初始时所有位都设置为0。位数组的⻓度和哈希函数的数量决定了过滤器的误报率和容量。
哈希函数集合:布隆过滤器使⽤多个哈希函数,每个函数都会将输⼊数据映射到位数组的⼀个不同位置。哈希函数的选择对过滤器的性能有很⼤影响,理想的哈希函数应该具有良好的散列性,使得不同的输⼊尽 可能均匀地映射到位数组的不同位置。

布隆过滤器判断⼀个元素不在集合中,那么这个元素肯定不在集合中。但是,布隆过滤器判断⼀个元素在集合中,那么这个元素有可能不在集合中。
布隆过滤器中,将⼀个原本不在集合中的元素判断成为在集合中,这就是误判。⽽误判率是布隆过滤器⼀个很重要的控制指标。
在算法实现时,误判率是可以通过设定更复杂的哈希函数组合以及做更⼤的位数组来进⾏控制的。所以,在布隆过滤器的初始化过程中,通常只需要指定过滤器的容量和误判率,就⾜够了。
Guava的布隆过滤,Redis的BloomFilter,Cuckoo Filter 作为了解

浙公网安备 33010602011771号