1. hash:如果没有值则默认为0进行增加

  2. list:leftPush头插入、leftPop头移出;rightPush尾插入,rightPop尾移出

redis v4-v5-v6对比请参考:https://blog.csdn.net/sinat_14840559/article/details/108326178

Redis 5

Stream类型

Stream与Redis现有数据结构比较:

Stream List, Pub/Sub, Zset
获取元素高效,复杂度为O(logN) List获取元素的复杂度为O(N)
支持offset,每个消息元素有唯一id。不会因为新元素加入或者其他元素淘汰而改变id。 List没有offset概念,如果有元素被逐出,无法确定最新的元素
支持消息元素持久化,可以保存到AOF和RDB中 Pub/Sub不支持持久化消息
支持消费分组 Pub/Sub不支持消费分组
支持ACK(消费确认) Pub/Sub不支持
Stream性能与消费者数量无明显关系 Pub/Sub性能与客户端数量负相关
允许按时间线逐出历史数据,支持block,给予radix tree和listpack,内存开销少 Zset不能重复添加相同元素,不支持逐出和block,内存开销大
不能从中间删除消息元素 Zet支持删除任意元素

Redis 6

多线程IO

SSL支持

连接支持SSL协议,更加安全。

ACL支持

RESP3

RESP(Redis Serialization Protocol)是 Redis 服务端与客户端之间通信的协议。Redis 6之前使用的是 RESP2,而Redis 6开始在兼容RESP2的基础上,开始支持RESP3。在Redis 6中我们可以使用HELLO命令在RESP2和RESP3协议之间进行切换

客户端缓存

基于 RESP3 协议实现的客户端缓存功能。

使用

数据类型 聚合统计 排序统计 二值状态统计 基数统计
Set 交、并、差 不支持 不支持 精确统计,大数据内存消耗大,统计慢
Sorted Set 交、并、差 支持 不支持
Hash 不支持 不支持 不支持
List 不支持 支持,分页不灵活 不支持 不支持,不能去重
Bitmap 与、异或、或计算 不支持 支持,效率高,节省内存 精确统计,内存开销大于HLL
HyperLogLog 不支持 不支持 不支持 概率统计,存在误差,但节省内存
  1. Set和Sorted Set支持交集、并集的聚合运算,但是Sorted Set不支差集运算。Set集合的交差并的计算复杂度很高,如果数据量很大的情况下,可能会造成Redis的阻塞,这时可以通过从库进行计算或交由客户端计算。
  2. Bitmap也能对多个Bitmap做与、异或、或的聚合运算。
  3. List和SortedSet都支持排序统计,但是List是根据元素先后插入顺序排序,Sorted Set支持权重,相对于List排序来说更加灵活。
  4. 对于二值状态统计,判断某个元素是否存在等场景,建议使用Bitmap,节省的内存空间(1亿位约12MB)。
  5. 对于基数统计,在大数据量、不要求精准的情况建议使用HyperLogLog(误差概率约0.81%),节省内存空间(计算2^64个元素大概只需要12KB的内存空间);对于精准的基数统计,最好还是使用Set集合。