Redis-6.0新特性


  • 多线程
  • 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
        • 只能是先禁用,后追加子命令,因为后续可能会有新的命令增加

文章作者: 钱不寒
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 钱不寒 !
  目录