十四. Redis 新功能
目录
- 十四. Redis 新功能
- 1. ACL
- 2. IO多线程
- 3. 工具支持 Cluster
- 4. 其它新功能-介绍
- 5. 最后:
1. ACL
基本阐述
- Redis的ACL即访问控制列表,该功能可限制能够执行的命令以及能够访问的键。
- 在Redis 5版本之前,Redis的安全规则仅有密码管控,还通过rename来调整诸如flushdb、KEYS*、shutdown这类高危命令。
- Redis 6提供了ACL功能,能对用户进行更细致的权限把控:
- 接入层面的权限:包含用户名与密码
- 能够执行的命令
- 能够操作的键
常用ACL指令
acl list
命令用于展示用户的权限列表,示例如下:
127.0.0.1:6379> acl list
acl cat
命令可查看添加权限指令的类型,示例:
127.0.0.1:6379> acl cat
若要查看特定类型可执行的指令,可带上参数类型名,例如:
127.0.0.1:6379> acl cat string
acl whoami
命令用来查看当前用户,示例:
127.0.0.1:6379> acl whoami
acl setuser
命令可用于创建和编辑用户的ACL配置。
操作示例
- 通过命令创建新用户的默认权限,执行:
127.0.0.1:6379> acl setuser tom
若该用户不存在,会以just created
的默认属性进行创建;若已存在,则此命令不做任何操作。
- 设置用户名、密码、ACL权限并启用用户,执行:
127.0.0.1:6379> acl setuser jack on >123456 ~cached*:* +get
此指令中,jack
是用户名,on
表示启用该用户,>123456
表示密码为123456,~cached*:*
表示只能操作以cached:
开头的键,+get
表示只能执行get命令。然后验证用户:
127.0.0.1:6379> auth jack 123
- 给
jack
用户增加权限或删除用户,例如增加set权限:
127.0.0.1:6379> acl setuser jack +set
删除用户tom
:
127.0.0.1:6379> acl deluser tom
2. IO多线程
- IO多线程意味着在与客户端进行交互时,网络IO交互处理模块采用多线程模式,而执行命令的过程并非多线程。
- Redis6执行命令依旧是单线程模式。
- 换言之,Redis与客户端的交互是通过多线程来开展的,而在执行具体指令时,仍然是单线程配合IO多路复用机制。
原理架构
Redis 6加入了多线程机制,其多线程部分仅仅用于处理网络数据的读取、写入以及协议解析工作,执行命令的环节依然是单线程。之所以这样设计,是为了防止因多线程引入复杂性,需要对key、lua、事务、LPUSH/LPOP等情况进行并发控制。整体的设计大致如下:
多线程IO默认处于关闭状态,需要在配置文件redis.conf中进行如下配置才能开启:
io-threads 4
io-threads-do-reads yes
3. 工具支持 Cluster
- 要是之前使用的老版本Redis想要搭建集群,需要单独安装ruby环境。
- Redis 5把redis-trib.rb的功能整合到了redis-cli当中。
- 此外,官方的redis-benchmark工具(这是一个性能测试工具,能够模拟N个客户端同时向Redis发送M条查询命令的应用场景)开始支持cluster模式了,借助多线程的方式对多个分片进行压力测试。
- 查看示例:
[root@localhost rainbowsea]# redis-benchmark --help
4. 其它新功能介绍
- RESP3:这是一种全新的Redis通信协议,能够优化服务端与客户端之间的通信状况。
- Client side caching:基于RESP3协议实现的客户端缓存功能。为了进一步提高缓存性能,把客户端频繁访问的数据缓存到客户端,从而减少TCP网络交互。
- Proxy 集群代理模式:Proxy功能让Cluster拥有如同单例一般的接入方式,降低了使用cluster的难度。
- Modules API
在Redis 6中,模块API的开发取得了很大进展,Redis可以变为一个框架,借助Modules来构建不同的系统,而不用从零开始编写。Redis从最初就是一个面向构建各类系统开放的平台。
5. 最后:
“在这终章里,我要向每一位读者表达我的感激。你们的关注与回应是我创作的动力所在,我从你们身上获取了无穷的灵感与勇气。我会把你们的鼓励铭记于心,继续在其他领域拼搏。感谢你们,我们定会在某个时刻再度相逢。”
相关文章
暂无评论...