Redis 核心技术与实战
蒋德钧
中科院计算所副研究员
81696 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 53 讲
开篇词 (1讲)
实践篇 (28讲)
Redis 核心技术与实战
15
15
1.0x
00:00/00:00
登录|注册

39 | Redis 6.0的新特性:多线程、客户端缓存与安全

阶段四:IO线程回写Socket和主线程清空全局队列
阶段三:主线程执行请求操作
阶段二:IO线程读取并解析请求
阶段一:服务端和客户端建立Socket连接,并分配处理线程
以key为粒度设置访问权限
以用户为粒度设置命令操作的访问权限
创建不同用户来使用Redis
从简单的基于密码访问到细粒度的权限控制
RESP 3协议的使用
广播模式
普通模式
主线程和IO线程的协作
提高网络请求处理速度
建议
启用RESP 3协议
实例的访问权限控制列表功能(ACL)
实现服务端协助的客户端缓存的设置
实现服务端协助的客户端缓存
启用多线程的设置
面向网络处理的多IO线程
每课一问
总结
RESP 3协议
安全
客户端缓存
多线程
Redis 6.0的新特性

该思维导图由 AI 生成,仅供参考

你好,我是蒋德钧。
Redis 官方在今年 5 月份正式推出了 6.0 版本,这个版本中有很多的新特性。所以,6.0 刚刚推出,就受到了业界的广泛关注。
所以,在课程的最后,我特意安排了这节课,想来和你聊聊 Redis 6.0 中的几个关键新特性,分别是面向网络处理的多 IO 线程、客户端缓存、细粒度的权限控制,以及 RESP 3 协议的使用。
其中,面向网络处理的多 IO 线程可以提高网络请求处理的速度,而客户端缓存可以让应用直接在客户端本地读取数据,这两个特性可以提升 Redis 的性能。除此之外,细粒度权限控制让 Redis 可以按照命令粒度控制不同用户的访问权限,加强了 Redis 的安全保护。RESP 3 协议则增强客户端的功能,可以让应用更加方便地使用 Redis 的不同数据类型。
只有详细掌握了这些特性的原理,你才能更好地判断是否使用 6.0 版本。如果你已经在使用 6.0 了,也可以看看怎么才能用得更好,少踩坑。
首先,我们来了解下 6.0 版本中新出的多线程特性。

从单线程处理网络请求到多线程处理

在 Redis 6.0 中,非常受关注的第一个新特性就是多线程。这是因为,Redis 一直被大家熟知的就是它的单线程架构,虽然有些命令操作可以用后台线程或子进程执行(比如数据删除、快照生成、AOF 重写),但是,从网络 IO 处理到实际的读写命令处理,都是由单个线程完成的。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Redis 6.0版本引入了多线程处理网络请求的新特性,以提高性能和安全性。该版本的关键特性包括面向网络处理的多IO线程、客户端缓存、细粒度的权限控制和RESP 3协议的使用。多线程特性提高了网络请求处理速度,客户端缓存允许应用在客户端本地读取数据,提升Redis的性能。细粒度权限控制增强了Redis的安全保护,RESP 3协议增强了客户端的功能,使应用更便于使用Redis的不同数据类型。Redis 6.0的多线程特性采用了多个IO线程来处理网络请求,但仍然使用单线程来处理读写命令,以简化线程模型实现。此外,实例的访问权限控制列表功能(ACL)提升了Redis的使用安全性。另外,Redis 6.0实现了RESP 3通信协议,支持多种数据类型的区分编码,提升了客户端的效率。这些新特性为用户提供了更高性能和更安全的Redis使用体验。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Redis 核心技术与实战》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(36)

  • 最新
  • 精选
  • Geek_04f704
    老师,redis支持多线程后,怎么实现单命令操作原子性的?

    作者回复: Redis 6.0中的多线程只是指,在客户端请求接收和解析,以及请求后的数据通过网络返回给客户端时,使用了多线程。而命令请求本身的数据读写操作还是由单线程来完成的,所以仍然可以保证单命令操作的原子性。

    2020-12-16
    4
    24
  • 6.0的权限细粒度控制对我们很有用,以前多个微服务共享同一个redis集群,权限没法隔离,现在可以控制不同的服务使用不同的key前缀,从而很好的隔离了服务,可以有效避免误操作,或者一个服务的bug影响到所有服务。

    作者回复: 这是个很好的用例场景!

    2020-11-23
    15
  • 🌾🌾🌾小麦🌾🌾🌾
    请问老师客户端缓存端缓存会不会导致缓存污染及内存泄露问题?

    作者回复: 我们说的缓存污染一般是指缓存系统里面的数据不被访问,但是由于缓存策略没有及时淘汰,又滞留在缓存中,导致缓存空间被占用,但是又不服务访问请求,造成了污染。 客户端缓存的主要问题是要和缓存系统中的数据保存一致,也就是说缓存系统中的数据被更新了,客户端需要及时做invalidation操作,避免应用在客户端缓存中读到旧的缓存数据。 内存泄露一般是内存没有正确回收导致的,和缓存污染、客户端缓存倒没有必然的联系。

    2020-12-19
    8
  • Dolly
    客户端缓存那个直接解决redis和本地缓存的一致性问题

    作者回复: 除了保证一致性,客户端缓存本身也能加速访问,所以,这个特性是Redis 6.0中比较重要的一个,可以重点关注 :)

    2020-12-31
    2
    7
  • pretty.zh
    老师,redis常量池是什么

    作者回复: 你说的是指Redis中的整数对象共享池么?例如0到9999这些整数会被频繁用到,所以,使用共享对象来表示这些数,每个数只存一份String对象,可以节省内存空间。

    2020-11-23
    6
  • Kaito
    Redis 6.0 的哪些新特性帮助最大? 我觉得 Redis 6.0 提供的多 IO 线程和客户端缓存这两大特性,对于我们使用 Redis 帮助最大。 多 IO 线程可以让 Redis 在并发量非常大时,让其性能再上一个台阶,性能提升近 1 倍,对于单机 Redis 性能要求更高的业务场景,非常有帮助。 而客户端缓存可以让 Redis 的数据缓存在客户端,相当于每个应用进程多了一个本地缓存,Redis 数据没有变化时,业务直接在应用进程内就能拿到数据,这不仅节省了网络带宽,降低了 Redis 的请求压力,还充分利用了业务应用的资源,对应用性能的提升也非常大。
    2020-11-23
    12
    106
  • 那时刻
    Redis 6.0增加了IO线程来处理网络请求,如果客户端先发送了一个`set key1 val1`写命令,紧接着发送一个`get key1`读命令。请问老师,由于IO线程是多线程处理的,是否会导致`get key1`读命令 先于 `set key1 val1`写命令执行呢?结果客户端读到了key1的旧值。
    2020-11-23
    14
    19
  • 王世艺
    多线程io和epoll啥区别
    2020-11-23
    4
    15
  • kevin
    请问下,redis的客户端缓存与业务实例的本地缓存有区别吗?
    2020-11-23
    4
  • 听秋
    老师,客户端缓存的普通模式,当不在收到服务端的通知时,服务端 的 key 被修改了,应用读的是缓存到本地的数据,那不就读到旧数据了吗?
    2021-12-26
    1
    1
收起评论
显示
设置
留言
36
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部