1、ACL

  • 简介

ACL是Access Control List(访问控制列表)的缩写,该功能允许根据可以执行的命令和可以访问的键来限制某些链接

在redis5之前,redis的安全规则只能密码控制,或者通过renmame来调整高危命令,如:flushdb,keys*,shutdown等。redis6提供了ACL的功能对用户进行更细粒度的权限控制:

1)接入权限:用户名和密码

2)可以执行的命令

3)可以操作的key 

  • 命令
  • acl list:展示用户权限列表

centos redis权限用户 redis多用户权限_nosql

        

  • acl cat:显示具体命令
  • 可以通过acl创建用户并赋予权限
  • acl whoami:查看当前用户
  • acl setuser 用户名:创建用户

centos redis权限用户 redis多用户权限_多线程_02

  • 设置用户,添加密码和权限并启用用户

centos redis权限用户 redis多用户权限_nosql_03

  • 切换用户,验证权限

 

centos redis权限用户 redis多用户权限_缓存_04

  • 提示没有权限

 

centos redis权限用户 redis多用户权限_nosql_05

 2、IO多线程

  •  简介

IO多线程是指客户端交互部分的网络IO交互处理模块多线程,而并不是执行命令多线程,redis6执行命令仍然是单线程


reids加入多线程是为了处理网络数据的读写和协议解析,和memcached这种从IO处理到数据访问多线程的实现方式有差异

  • 原理架构图

 

centos redis权限用户 redis多用户权限_redis_06

流程简述如下:

  • 主线程负责接收建立连接请求,获取 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