分布式缓存Redis6.X新特性讲解拓展
新版Redis6核心特性-多线程介绍
新版Redis6核心特征介绍-多线程
- 支持多线程
- redis6多线程只是用来处理网络数据的读写和协议解析上,底层数据操作还是单线程。
- 执行命令仍是单线程,之所以这么设计是不行因为多线程而变得复杂,需要去控制key、lua、事务,LPUSH/LPOP等等的并发问题
- 默认不开启
io-threads-do-reads yes
io-threads 线程数
- 建议(线程数小于机器核数)
- 4 核的机器建议设置为 2 或 3 个线程
- 8 核的建议设置为 4或6个线程
- 开启多线程后,是否会存在线程并发安全问题?
- 不会有安全问题, Redis 的多线程部分只是⽤来处理网络数据的读写和协议解析,执行命令仍然是单线程顺序执行。
新版Redis6核心特性-Access ControlList权限控制
引入ACL(Access Control List)
- 之前redis没有用户的概念,redis6引入了acl
- 可以给每个用户分配不同的权限来控制权限
- 通过限制对命令和密钥的访问来提高安全性,以使不受信任的客户端⽆法访问
- 提高操作安全性,以防止由于软件错误或⼈为错误而导致进程或⼈员访问 Redis,从而损坏数据或配置
- 文档:https://redis.io/topics/acl
- 常用命令
- acl list 当前启⽤的 ACL 规则
- acl cat ⽀持的权限分类列表
- acl cat hash 返回指定类别中的命令
- acl setuser 创建和修改用户命令
- acl deluser 删除用户命令
+<command> 将命令添加到⽤户可以调⽤的命令列表中,如+@hash
-<command> 将命令从⽤户可以调⽤的命令列表中移除
#切换默认⽤户
auth default 123456
#例⼦ 密码 123 ,全部key,全部权限
acl setuser jack on >123 ~* +@all
#例⼦ 密码 123 ,全部key, get权限
acl setuser jack on >123 ~* +get
参数 | 说明 |
---|
user | 用户 |
default | 表示默认用户名,或则自己定义的用户名 |
on | 表示是否启用改用户,默认为off(禁用) |
#… | 表示用户密码, nopass表示不需要密码 |
~* | 表示可以访问的Key(正则匹配) |
+@ | 表示用户的权限, “+”表示授权权限,有权限操 作或访问, “-”表示还是没有权限;@为权限分类,可以通过 ACL CAT 查询⽀持的分类。 +@all 表示所有权限,nocommands 表示不给与任何命令的操作权限 |
新版Redis6核心特性-Client-SideCaching 客户端缓存
新版Redis6特性讲解
- client side cachin客户端缓存
- 类似浏览器缓存一样
- 在服务器端更新了静态⽂件(如css、 js、图片),能够在客户端得到及时的更新,但又不想让浏览器每次请求都从服务器端获取静态资源
- 类似前端的-Expires、 Last-Modified、 Etag缓存控制
- 文档: https://redis.io/topics/client-side-caching
redis在服务端记录访问的连接和相关的key, 当key有变化时通知相应的应用
应用收到请求后⾃⾏处理有变化的key, 进⽽实现client cache与redis的⼀致
这需要客户端实现,⽬前lettuce对其进⾏了⽀持
默认模式
- Server 端全局唯⼀的表(Invalidation Table)记录每个Client访问的Key,当发⽣变更时,向client推送数据过期消息。
- 优点:只对Client发送其访问过的被修改的数据
- 缺点: Server端需要额外存储较⼤的数据量。
广播模式
- 客户端订阅key前缀的⼴播,服务端记录key前缀与client的对应关系。当相匹配的key发⽣变化时通知client。
- 优点:服务端记录信息比较少
- 缺点: client会收到自己未访问过的key的失效通知