Redis 5.0
Redis5.0版是Redis产品的重大版本发布,咱们先看一下它的最新特色:node
- 新的流数据类型(Stream data type) https://redis.io/topics/streams-intro
- 新的 Redis 模块 API:定时器、集群和字典 API(Timers, Cluster and Dictionary APIs)
- RDB 增长 LFU 和 LRU 信息
- 集群管理器从 Ruby (redis-trib.rb) 移植到了redis-cli 中的 C 语言代码
- 新的有序集合(sorted set)命令:ZPOPMIN/MAX 和阻塞变体(blocking variants)
- 升级 Active defragmentation 至 v2 版本
- 加强 HyperLogLog 的实现
- 更好的内存统计报告
- 许多包含子命令的命令如今都有一个 HELP 子命令
- 客户端频繁链接和断开链接时,性能表现更好
- 许多错误修复和其余方面的改进
- 升级 Jemalloc 至 5.1 版本
- 引入 CLIENT UNBLOCK 和 CLIENT ID
- 新增 LOLWUT 命令 http://antirez.com/news/123
- 在不存在须要保持向后兼容性的地方,弃用 "slave" 术语
- 网络层中的差别优化
- Lua 相关的改进
- 引入动态的 HZ(Dynamic HZ) 以平衡空闲 CPU 使用率和响应性
- 对 Redis 核心代码进行了重构并在许多方面进行了改进
Redis Stream
Redis stream本质上是个时序数据结构,具备以下特色:redis
- 每条记录是结构化、可扩展的对
- 每条记录在日志中有惟一标识,标识中包含了时间戳信息,单调递增
- 能够根据须要自动清理历史记录
- 保存在内存中,支持持久化
底层是修改版的radix tree,每一个node存储了一个listpack。listpack是一块连续的内存block,用于序列化msg entry及相关元信息,如msg ID,使用了多种编码,用于节省内存,是ziplist的升级版。若是XADD每次添加的对中的field是同样的,那么field不会重复存储。安全

内存友好,对于简单的十几~几十字节的msg,100MB内存能够存储数百万个。listpack在内存和disk上的存储结构是同样的,因此stream数据在作RDB时效率很是高,0.3s,500w entries。网络
Redis Stream使用演示

发布消息数据结构

读取消息性能

阻塞读取大数据

发布新消息优化

消息返回阿里云

建立消费组编码

经过消费组读取消息


Redis Stream使用场景
可用做时通讯等,大数据分析,异地数据备份等

客户端能够平滑扩展,提升处理能力

Zpop
Sorted Sets 增长了相似List的pop命令:
ZPOPMAX 命令用于移除并弹出有序集合中分值最大的 count 个元素
ZPOPMIN 命令用于移除并弹出有序集合中分值最小的 count 个元素
BZPOPMAX 和 BZPOPMIN 是上述两个命令的阻塞变种.

CLIENT:
Client id返回当前链接的ID,每一个ID符合以下约束:
- 永不重复,能够判断当前连接是否断链过
- 单调递增,能够判断不一样连接的接入顺序
Client unblock:
当客户端由于执行具备阻塞功能的命令(如BRPOP、XREAD或者WAIT)被阻塞时,该命令能够经过其余链接解除客户端的阻塞

阿里云Redis 5.0优点:
- 新增的stream数据结构,丰富的应用场景和想象空间
- 内核的改进和bugfix,使用更健壮
- 支持帐号体系,根据帐号用途赋予相应的权限,更加安全
- 审计日志,记录了读写操做、敏感操做(keys、flushall等)、慢日志、管理类命令,供用户查询
- 大key分析,基于快照的完整内存分析,更准确,直接输出内存消耗top排行的key
- 支持单机和集群版的平滑迁移
本文做者:stools
原文连接
本文为云栖社区原创内容,未经容许不得转载。