Redis 6.0进化之路:关键新特性详解

这篇具有很好参考价值的文章主要介绍了Redis 6.0进化之路:关键新特性详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引言

        随着技术发展的日新月异,Redis作为业界知名的开源内存数据结构存储系统,在不断演进中为开发者带来了众多令人瞩目的新特性。在2020年4月底正式发布的Redis 6.0版本中,一系列重大改进不仅提升了性能和扩展性,更强化了安全性及管理灵活性。本文将深入探讨Redis 6.0的关键新特性及其对开发实践的影响。

        Redis 6.0 中的几个关键新特性,分别是面向网络处理的多IO线程、客户端缓存、细粒度的权限控制,以及RESP 3协议的使用。

多线程IO处理

        在 Redis 6.0 中,非常受关注的第一个新特性就是多线程。这是因为,Redis 一直被大家熟知的就是它的单线程架构,虽然有些命令操作可以用后台线程或子进程执行(比如数据删除、快照生成、AOF 重写),但是,从网络 IO 处理到实际的读写命令处理,都是由单个线程完成的。

        随着网络硬件的性能提升,Redis 的性能瓶颈有时会出现在网络 IO 的处理上,也就是说,单个主线程处理网络请求的速度跟不上底层网络硬件的速度。

        Redis 的多 IO 线程只是用来处理网络请求的,对于读写命令,Redis 仍然使用单线程来处理。这是因为,Redis 处理请求时,网络处理经常是瓶颈,通过多个 IO 线程并行处理网络操作,可以提升实例的整体处理性能。而继续使用单线程执行命令操作,就不用为了保证 Lua 脚本、事务的原子性,额外开发多线程互斥机制了。这样一来,Redis 线程模型实现就简单了。

        在 Redis 6.0 中,主线程和 IO 线程具体是怎么协作完成请求处理的。掌握了具体原理,才能真正地会用多线程。为了方便理解,我们可以把主线程和多 IO 线程的协作分成四个阶段。

Redis 6.0进化之路:关键新特性详解,redis,数据库,缓存,Redis 6.0新特性

        1、服务端和客户端建立 Socket 连接,并分配处理线程。首先,主线程负责接收建立连接请求。当有客户端请求和实例建立 Socket 连接时,主线程会创建和客户端的连接,并把 Socket 放入全局等待队列中。紧接着,主线程通过轮询方法把 Socket 连接分配给 IO 线程。

         2、IO 线程读取并解析请求。主线程一旦把 Socket 分配给 IO 线程,就会进入阻塞状态,等待 IO 线程完成客户端请求读取和解析。因为有多个 IO 线程在并行处理,所以,这个过程很快就可以完成。

        3、主线程执行请求操作。等到 IO 线程解析完请求,主线程还是会以单线程的方式执行这些命令操作。

        4、IO 线程回写 Socket 和主线程清空全局队列。当主线程执行完请求操作后,会把需要返回的结果写入缓冲区,然后,主线程会阻塞等待 IO 线程把这些结果回写到 Socket 中,并返回给客户端。

        和 IO 线程读取和解析请求一样,IO 线程回写 Socket 时,也是有多个线程在并发执行,所以回写 Socket 的速度也很快。等到 IO 线程回写 Socket 完毕,主线程会清空全局队列,等待客户端的后续请求。

客户端缓存

        Redis 6.0 新增了一个重要的特性,就是实现了服务端协助的客户端缓存功能,也称为跟踪(Tracking)功能。有了这个功能,业务应用中的 Redis 客户端就可以把读取的数据缓存在业务应用本地了,应用就可以直接在本地快速读取数据了。

        当把数据缓存在客户端本地时,我们会面临一个问题:如果数据被修改了或是失效了,如何通知客户端对缓存的数据做失效处理?6.0 实现的 Tracking 功能实现了两种模式,来解决这个问题。

        第一种模式是普通模式。在这个模式下,实例会在服务端记录客户端读取过的 key,并监测 key 是否有修改。一旦 key 的值发生变化,服务端会给客户端发送 invalidate 消息,通知客户端缓存失效了。使用普通模式时,有一点你需要注意一下,服务端对于记录的 key 只会报告一次 invalidate 消息,也就是说,服务端在给客户端发送过一次 invalidate 消息后,如果 key 再被修改,此时,服务端就不会再次给客户端发送 invalidate 消息。

        只有当客户端再次执行读命令时,服务端才会再次监测被读取的 key,并在 key 修改时发送 invalidate 消息。这样设计的考虑是节省有限的内存空间。毕竟,如果客户端不再访问这个 key 了,而服务端仍然记录 key 的修改情况,就会浪费内存资源。

        第二种模式是广播模式。这个模式下,服务端会给客户端广播所有 key 的失效情况,不过,这样做了之后,如果 key 被频繁修改,服务端会发送大量的失效广播消息,这就会消耗大量的网络带宽资源。

        所以,在实际应用时,我们会让客户端注册希望跟踪的 key 的前缀,当带有注册前缀的 key 被修改时,服务端会把失效消息广播给所有注册的客户端。和普通模式不同,在广播模式下,即使客户端还没有读取过 key,但只要它注册了要跟踪的 key,服务端都会把 key 失效消息通知给这个客户端。

Access Control Lists (ACL) 权限系统

        Redis 6.0全面引入了访问控制列表(ACL)功能,它允许管理员为不同用户分配精细到命令级别的权限,告别以往单一密码管理所有资源的局面。这一变革使得 Redis 在大型组织和复杂环境中能够更好地适应严格的权限管理和审计需求。

启用 RESP 3 协议

        Redis 6.0 实现了 RESP 3 通信协议,而之前都是使用的 RESP 2。在 RESP 2 中,客户端和服务器端的通信内容都是以字节数组形式进行编码的,客户端需要根据操作的命令或是数据类型自行对传输的数据进行解码,增加了客户端开发复杂度。

        而 RESP 3 直接支持多种数据类型的区分编码,包括空值、浮点数、布尔值、有序的字典集合、无序的集合等。

结论

        Redis 6.0版本的发布标志着其在保证传统优势的同时,正朝着更加现代化、安全化和可扩展化的方向迈进。这些新特性无疑将进一步巩固Redis在高速缓存、持久化存储以及实时数据处理领域的领先地位,赋能更多企业和开发者实现高效率、高性能的应用架构设计。对于正在寻找灵活、安全且高性能数据存储方案的团队来说,Redis 6.0无疑是值得深入研究和采用的重要选择。文章来源地址https://www.toymoban.com/news/detail-800757.html

到了这里,关于Redis 6.0进化之路:关键新特性详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Redis 详解及高级特性

    Redis 是一个基于内存的高性能键值数据库,它支持多种数据结构,包括字符串、列表、集合、有序集合和哈希表等。Redis 将数据存储在内存中,因此拥有非常高的读取和写入性能,适用于需要快速读取和写入数据的应用程序场景。同时,Redis 还支持持久化存储和数据复制等功

    2024年02月04日
    浏览(45)
  • redis夯实之路-哨兵(Sentinel)机制详解

    Sentinel(哨兵)保证了redis的高可用性,一个Sentinel或多个Sentinel组成的系统监视多个主从服务器,当主服务器下线时,自动将一个从服务器升级为主服务器。 集群监控:负责监控redis master和slave进程是否正常工作  消息通知:如果某个redis实例有故障,那么哨兵负责发送消息给

    2024年01月21日
    浏览(40)
  • 【后端面经-数据库】Redis详解——Redis基本概念和特点

    目录 1. Redis基本概念 2. Redis特点 2.1 优点 2.2 缺点 3. Redis的应用场景 面试模拟 参考资料 声明:Redis的相关知识是面试的一大热门知识点,同时也是一个庞大的体系,所涉及的知识点非常多,如果用一篇文章罗列,往往会陷入知识海洋中无法感知其全貌,因此,这段时间我会试

    2024年02月13日
    浏览(52)
  • redis(6.0以上版本)哨兵、生产级redis cluster集群部署、测试、特点

    目录 一、特点    可自由指定主从    可自定义分配哈希槽    先建立单个实例,在分配主从 二、生产级redis cluster部署 :一台服务器即可(192.168.1.134) 1关闭防火墙 2获取redis6.2.12tar包(官网获取) 3.为了方便管理创建单独目录 4.修改配置文件 5.启动服务 6.用集群模式登

    2024年02月12日
    浏览(40)
  • Linux服务器快速安装Redis-6.0

    ​本文提供了在Linux服务器上安装Redis-6.0的详细步骤和配置方法,适用于阿里云ECS,CentOS 7.9操作系统。通过按照给定的步骤,您可以轻松地将Redis-6.0部署到您的服务器上,并进行必要的配置。

    2024年02月04日
    浏览(50)
  • 数据库信息速递 MONGODB 6.0 的新特性,更多的查询函数,加密查询,与时序数据集合 (译)...

    开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到3群(共1000人左右 1 + 2 + 3),最近发展的速度比较快,2群除特殊情况,不在添加

    2024年02月16日
    浏览(46)
  • Redis 6.0 多线程模型比单线程优化在哪里了

    Redis 6.0 引入了多线程模型,相比于单线程模型,带来了一些优化和改进。在这篇博客中,我们将探讨Redis 6.0多线程模型相对于单线程的优化之处。 并发处理能力提升: 多线程模型允许Redis同时处理多个客户端请求,从而提高了并发处理能力。在单线程模型中,Redis一次只能执

    2024年01月25日
    浏览(43)
  • 【Redis 进阶之路】3. Redis 主从 以及哨兵

    上述的是一个单实例的Redis。 我们可以先分析下有哪些不足: 单点故障 (是每个单实例必须面对的问题) 容量有限 (Redis毕竟是缓存型数据库,容量取决于服务器分配的容量,但容量毕竟是有限的) 压力大(如果出现高并发的场景,所有查询的压力都集中在Redis上) 所以我

    2023年04月15日
    浏览(45)
  • Redis 高级特性 Redis Stream使用

    Redis Stream 是 Redis 5.0 版本新增加的数据结构。 Stream从字面上看是流类型,但其实从功能上看,应该是Redis对消息队列(MQ,Message Queue)的完善实现。下文称Stream为队列 Stream 出现原因 : Stream的出现是为了给Redis提供完善的消息队列功能 基于Reids的消息队列实现有很多种,例如

    2024年02月05日
    浏览(42)
  • 【Redis高手修炼之路】②Redis的五大数据类型

    字符串是Redis最基础的数据类型: 字符串类型实际可以存储字符串、数字、二进制数据; Redis中的键都是字符串类型,值也支持字符串类型; 字符串类型的存储空间是有限的,最大可以存放512M的数据。 1.1.1 添加、查询、获取长度、字符串的追加 set key value 设置指定 key 的值 get

    2023年04月19日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包