Redis 5主要专注于几个重要功能。相比之下Redis 4非常非常专注于操作类型,Redis 5的变化大多是面向用户的。即在现有的基础上增加新的数据类型和操作类型。以下是此版本的主要功能:
redis5.0新特性
新的Stream类型
什么是Stream数据类型
- 抽象数据日志
- 数据流
新的Redis模块API:Timers and Cluster API
RDB现在存储LFU和LRU信息
集群管理器从Ruby(redis-trib.rb)移植到C代码
新的sorted set命令:ZPOPMIN/MAX和阻塞变种
主动碎片整理V2
增强HyperLogLog实现
更好的内存统计报告
许多带有子命令的命令现在都有一个Help子命令
客户经常连接和断开连接时性能更好
错误修复和改进
Jemalloc升级到5.1版本
安装和配置redis5.0
stream命令
- XADD
- 作用:创建一个stream
- 用法:XADD key ID field string [field string …]
- ID:毫秒的unix时间戳 – sequence(同一毫秒的序列号)组成
- XADD wangzhe * hero luban 创建默认id的key为hero的流数据
- XLEN
- 作用:返回stream中元素的个数
- 用法:XLEN key
- XDEL
- 作用:删除id
- 用法:XDEL key id,返回删除个数
- XRANGER
- 作用:返回给定ID范围内的stream数据
- 用法:XRANGE key start end [COUNT count]
- 特殊ID:+:最大ID -:最小ID
- XREAD
- 作用:从一个或多个stream读取数据
- 用法:XREAD[COUNT count][BLOCK milliseconds] STREAMS key [key …] ID [ID …]
- XREAD count 1 STREAMS LOL 1-1 读取流LOL中从id为1-1开始的的1条数据
- XREAD BLOCK 0 STREAMS key $ 永久堵塞,知道流key接收到最新数据,会显示阻塞时间
- XGROUP
- 作用:创建一个Consumer Group
- 用法:XGROUP CREATE key groupname ID
- XREADROUP
- 作用:从Consumer Group中读取数据
- 用法:XREADGROUP GROUP groupname consumer [COUNT count][BLOCK milliseconds STREAMS key [key …] ID [ID …]
- XREADGROUP GROUP fashi chuanrong STREAMS wangzhe > 表示查询最新数据
help特性
- XINFO help
- PUBSUB help
- XGROUP help
- … help
- 有子命令的命令才可以用
redis集群
1.16.1. 创建集群数据存储文件
- mkdir -p /usr/local/redis-cluster
- mkdir 5001 5002 5003 5004 5005 5006
- 修改redis.conf配置文件,开启集群配置,aof配置等等
- 每个文件夹下配置的区别就在端口,统一命令修改
:1,$s/5001/5002/g
- 都启动完成后,创建六个子节点
- ruby创建方法:redis-trib.rb create –replicas 1 192.168.4.147:500*
- 新特性创建方法:redis-cli –cluster create 192.168.4.147:500* –cluster-replicas 1
- 主/从 = 1 : cluster-replicas
- redis-cli -c -h 192.168.4.147 -p 5001 以集群的模式进入
动态添加节点
- ruby添加节点:redis-trib.rb add-node 192.168.4.147:5007 192.168.4.147:5001
- 新特性添加节点:redis-cli –cluster add-node 192.168.4.147:5007 192.168.4.147:5001
- 添加从节点:redis-cli –cluster add-node 192.168.4.147:5008 192.168.4.147:5001
- 在5008的client命令行里,cluster replicate 主节点,那么5008会成为该主节点的从节点
分片
- ruby分片方法:redis-trib.rb reshard 192.168.4.147:5007
- 新特性分片方法:redis-cli –cluster reshard 192.168.4.147 5007
删除节点
删除从节点
- ruby删除方法:redis-trib.rb del-node 192.168.4.147 5008
- 新特性删除方法:redis-cli –cluster del-node 192.168.4.147 5008 主节点唯一id
删除主节点(需要先把数据槽移动到其他节点,再删除主节点,防止数据丢失)
- ruby删除方法:redis-trib.rb reshard 192.168.4.147 5007
- 新特性删除方法:redis-cli –cluster reshard192.168.4.147 5007
- done
新的Sorted Set
- ZPOPMAX
- 作用:删除返回集合中分值最高的元素
- 用法:ZPOPMAX key [count]
- ZPOPMIN
- 作用:删除返回集合中分值最小的元素
- 用法:ZPOPMIN key [count]
- BZPOPMAX
- 作用:ZPOPMAX的阻塞版
- 用法:BZPOPMAX key [key …] timeout
4 BZPOPMIN - 作用:ZPOPMIN的阻塞版
- 用法:BZPOPMIN key [key …] timeout
测试
ZADD exam 100 daji
ZADD exam 99 xiaoqiao
ZADD exam 98 zhenji
ZADD exam 97 anqila
ZRANGE exam 0 -1 WITHSCORES 带分数的打印,从小到大输出
ZPOPMAX exam输出最大分数的值,会从元素中删除
碎片整理和内存报告
应用场景
- 在运行期进行自动内存碎片清理,释放内存空间
- 通过内存报告了解整个系统的内存使用情况
使用
- 配置项中找到 activedefrag yes,去掉注解,它下面和它相关的注解都解开
测试
- 使用debug populate 300000 imooc 1000 随机产生300000个key为imooc开头的 大小为1000的数据
- info memory 查看内存使用情况
- MEMORY STATS 查看内存详情
- memory usage imooc:1 查看键值占用内存
其它:
网络层中的差异优化
Lua 相关的改进
引入动态的 HZ(Dynamic HZ) 以平衡空闲 CPU 使用率和响应性
support docker
现在官方版本正式支持在Docker容器上部署和运行Redis集群了。有了官方的镜像,你能非常容易并快速部署几个容器来运行一个可扩展的,高可用的Redis集群。