1、ACL
- 简介
ACL是Access Control List(访问控制列表)的缩写,该功能允许根据可以执行的命令和可以访问的键来限制某些链接
在redis5之前,redis的安全规则只能密码控制,或者通过renmame来调整高危命令,如:flushdb,keys*,shutdown等。redis6提供了ACL的功能对用户进行更细粒度的权限控制:
1)接入权限:用户名和密码
2)可以执行的命令
3)可以操作的key
- 命令
- acl list:展示用户权限列表
- acl cat:显示具体命令
- 可以通过acl创建用户并赋予权限
- acl whoami:查看当前用户
- acl setuser 用户名:创建用户
- 设置用户,添加密码和权限并启用用户
- 切换用户,验证权限
- 提示没有权限
2、IO多线程
- 简介
IO多线程是指客户端交互部分的网络IO交互处理模块多线程,而并不是执行命令多线程,redis6执行命令仍然是单线程
reids加入多线程是为了处理网络数据的读写和协议解析,和memcached这种从IO处理到数据访问多线程的实现方式有差异
- 原理架构图
流程简述如下:
- 主线程负责接收建立连接请求,获取 Socket 放入全局等待读处理队列。
- 主线程处理完读事件之后,通过 RR(Round Robin)将这些连接分配给这些 IO 线程。
- 主线程阻塞等待 IO 线程读取 Socket 完毕。
- 主线程通过单线程的方式执行请求命令,请求数据读取并解析完成,但并不执行。
- 主线程阻塞等待 IO 线程将数据回写 Socket 完毕。
- 解除绑定,清空等待队列。
该设计有如下特点:
- IO 线程要么同时在读 Socket,要么同时在写,不会同时读或写。
- IO 线程只负责读写 Socket 解析命令,不负责命令处理。
Redis 6.0 默认是否开启了多线程?
否,在conf文件进行配置参数
io-threads-do-reads yes
io-threads 线程数
3、新的协议RESP3:优化客户端和服务端的通信
4、Client side caching:
基于RESP3协议实现的客户端缓存功能,将客户端经常访问的数据缓存到客户端,坚守TCP网络交互
5、Proxy集群代理模式:
让Cluster拥有像单实例一样的接入方式,但代理不改变cluster的功能限制,比如不支持跨slot的多key操作等
6、Modules API