发布日期:
2024-09-10
文章字数:
760
阅读时长:
3 分
阅读次数:
- 多线程
- Client Side Cache
- Acls
多线程
- redis 6.0 提供了多线程的读写IO, 但是最终执行用户命令的线程依然是单线程的
io‐threads 4
有三个IO线程,还有一个线程是main线程,,main线程负责IO读写和命令执行操作
- 这三个IO线程只会执行 IO中的write操作,也就是说, read和命令执行都由main线程执行。最后多线程将数据写回到客户端
io‐threads‐do‐reads yes
将支持IO线程执行读写任务
Client Side Cache
- 客户端缓存:redis 6 提供了服务端追踪key的变化,客户端缓存数据的特性
- 执行流程
- 当客户端访问某个key时,服务端将记录key 和 client
- 客户端拿到数据后,进行客户端缓存
- 这时,当key再次被访问时,key将被直接返回,避免了与redis服务器的再次交互
- 当数据被其他请求修改时,服务端将主动通知客户端失效的key
- 客户端进行本地失效
- 下次请求时,重新获取最新数据
- 目前只有lettuce对其进行了支持
ACL
- ACL 是对于命令的访问和执行权限的控制
- ACL 设置有两种方式
- 命令方式:ACL SETUSER + 具体的权限规则, 通过 ACL SAVE 进行持久化
- 对 ACL 配置文件进行编写,并且执行 ACL LOAD 进行加载
- ACL存储有两种方式,但是两种方式不能同时配置,否则直接报错退出进程
- redis 配置文件: redis.conf
- ACL 配置文件,在redis.conf 中通过 aclfile /path 配置acl文件的路径
ACL SETUSER alice
创建一个用户名为 alice的用户
- 用户alice 没有任何意义
- 处于 off 状态, 它是被禁用的,不能用auth进行认证
- 不能访问任何命令
- 不能访问任意的key
- 没有密码
acl setuser alice on >pass123 ~cached:* +get
创建一个对 cached: 前缀具有get命令执行权限的用户,并且设置密码
- 切换其他用户进行登录
ACL GETUSER alice
ACL SETUSER alice ~objects:* ~items:* ~public:*
添加多个访问模式,空格分隔
ACL SETUSER alice on +@all ‐@dangerous >密码 ~*
针对类型命令的约束
- +@all: 包含所有得命令
- 然后用 -@ 去除在 redis command table 中定义的 dangerous 命令
- 查看具体有哪些命令属于某个类别
acl cat
acl cat dangerous
- 开放子命令
ACL SETUSER myuser ‐client +client|setname +client|getname
- 禁用client 命令,但是开放 client 命令中的子命令 setname 和 getname
- 只能是先禁用,后追加子命令,因为后续可能会有新的命令增加