Redis 6.0 新功能
ACL
Redis ACL 是Access Control List (访问控制列表)的缩写,该功能允许根据可以执行的命令和可以访问的键来限制某些连接。
在Redis 5版本之前,Redis安全规则只有密码控制还有通过rename来调整高危命令比如flushdb , KEYS*, sHutdown等。Redis 6则提供ACL的功能对用户进行更细粒度的权限控制:
- 接入权限:用户名和密码
- 可以执行的命令
- 可以操作的KEY
命令
acl list:展现用户的权限列表
on表示权限启动,nopass表示不需要密码,~*可操作的key,+@all 可执行的命令
acl cat: 查看添加权限的指令类别
acl whoami: 查看当前用户
创建新用户默认权限
acl setuser lucy
设置密码、acl权限、并启用用户
acl setuser marry on >password ~cached:* +get
切换用户
auth password marry
127.0.0.1:6379> set key1 value1 (error) NOPERM this user has no permissions to run the 'set' command or its subcommand 127.0.0.1:6379> set cached:key1 value1 (error) NOPERM this user has no permissions to run the 'set' command or its subcommand 127.0.0.1:6379> get a (error) NOPERM this user has no permissions to access one of the keys used as arguments 127.0.0.1:6379> get cached:a (nil) 127.0.0.1:6379>
IO多线程
IO 多线程其实指客户端交互部分的网络I0交互处理模块多线程,而非执行命令多线程。Redis6执行命令依然是单线程。·只是用来处理网络数据的读写和协议解析
另外,多线程IO默认也是不开启的,需要在配置文件中配置
io-threads-do-reads yes
io-threads 4
工具支持Cluster
之前老版Redis想要搭集群需要单独安装ruby环境,Redis 5将redis-trib.rb的功能集成到redis-cli。另外官方redis-benchmark工具开始支持cluster模式了,通过多线程的方式对多个分片进行压测。
Redis6新功能还有
- RESP3新的 Redis 通信协议:优化服务端与客户端之间通信
- Client side caching客户端缓存:基于 RESP3 协议实现的客户端缓存功能。为了进一步提升缓存的性能,将客户端经常访问的数据cache到客户端。减少TCP网络交互。
- Proxy集群代理模式:Proxy 功能,让 Cluster 拥有像单实例一样的接入方式,降低大家使用cluster的门槛。不过需要注意的是代理不改变 Cluster 的功能限制,不支持的命令还是不会支持,比如跨 slot 的多Key操作。
- Modules API:Redis 6中模块API开发进展非常大,因为Redis Labs为了开发复杂的功能,从一开始就用上Redis模块。Redis可以变成一个框架,利用Modules来构建不同系统,而不需要从头开始写然后还要BSD许可。Redis一开始就是一个向编写各种系统开放的平台。