Redis6 最重要的新功能「客户端缓存」是个什么鬼?

十五、Redis6.0 新功能 Redis ACL是Access Control List(访问控制列表)的缩写,该功能允许根据可以执行的命令和可以访问的键来限制某些连接。在Redis 5版本之前,Redis 安全规则只有密码控制 还有通过rename 来调整高危命令比如 flushdb , KEYS* , shutdown 等。Redis 6 则提供ACL的功能对用户进行更细粒度的权限控制 :(1)接入权限:用户名和密码(2)可以执行的命令(3)可以操作的 KEYRedis6终于支撑多线程了,告别单线程了吗? 阅读详情

应用缓存通常分两种,本地缓存和远程缓存。本地缓存就是内存缓存 LocalCache,远程缓存就是分布式共享缓存比如 Redis。本地缓存在访问性能上远胜过远程缓存,但是在一致性上要弱一些。我们平时经常会用到的 Guava Cache 就是内存缓存技术框架。

Redis6 反复提到的「客户端缓存」就是本地缓存,这意味着 Redis 欲将缓存的魔爪从分布式共享缓存延伸到内存缓存,进一步榨干缓存的技术市场。如果该技术未来普遍流行起来,内存缓存相关技术框架也会被打掉半壁江山。Redis 誓要将缓存能力做到极致。

我们平时经常说的 CAP 定律,是说在分布式系统中,如果出现了网络分区 P,一致性 C 和可用性 A 不能两全。这里的可用性可以不严格的简单理解为访问性能,性能慢的难以忍受就是不可用。内存缓存舍一致性得高性能,远程缓存舍高性能得一致性。

到这里可能有读者要提问了,Redis 不是最终一致性的超高性能存储数据库么,怎么到这里它又成了「舍高性能」得「一致性」呢?

有这个疑问是正常的,因为这里说的舍和得只是相对于内存缓存而言的。相比于内存缓存,远程缓存的读写涉及到网络 IO,性能上自然要弱一些。

如果一个 API 服务有多个物理进程,每个进程里面都有一份内存缓存的数据(比如全局配置参数),这多个进程的内存缓存的数据在同一时间就会不一致。API 服务进程可能会选择每隔 N 秒轮询式从远程缓存同步一次最新的数据到内存,那么在这 N 秒范围内,数据的一致性是要打折的。如果没有这个内存缓存,API 服务获取全局配置参数总是要从远程缓存获取最新的参数,这就不存在配置一致性问题。

那 Redis 要对这个「客户端缓存」做到什么程度呢?它如何平衡性能和一致性的问题呢?上面的例子中提到的多进程之间本地缓存不一致的本质在于「轮询式」的时间间隔。如果轮询的够快,数据也就会更加一致一些,但是这也会对远程缓存增加访问压力。还有一种比较明显的方式就是当远程缓存中的数据发生变动时,主动通知各进程更新本地缓存,那么不一致的问题就可以得到非常显著的缓解。

Redis6 的这个「客户端缓存」就是用的这种方式,主动通知客户端 —— 你的数据过时了,请赶快刷新。看到这里,对 Redis 稍微熟悉一点的同学可能很快就会想到 Redis 有个 Pub/Sub 的订阅更新能力是不是可以实现这个小需求,何必要大张旗鼓发明「客户端缓存」这个新概念呢?

好,下面我们来看一下 Redis 提供的 Pub/Sub 该如何才能做到这一点呢?有两种方式

  1. 使用自定义的 channel,当远程缓存变化时,修改方(业务进程中的生产方)需要执行 Publish 指令。消费方订阅这个 channel,收到消息时刷新本地缓存。这里生产和消费就有了一定程度的耦合,消费者能不能及时刷新缓存取决于生产者有没有配合 Publish 消息。而且每个业务点需要一个独立的不一样的 channel 名称,不能混淆。

  1. 使用 Redis 自带的 Keyspace Notification Event 内置的一些 channel。当某个 Key 被删除时,会向 del channel 发送一个 Del 事件。当某个 Key 过期时,会向 expire channel 发送一个 Expire 事件 。会有非常多的内置 channel。当某个 Key 被 Set 时,会向  set channel 发送一个 Set 事件等等。这里的问题在于客户端需要监听处理很多的 内置channel 才能知道内存缓存关联的那个 Redis Key 值是否发生了变化。如果开启了 Keyspace Notification Event,事件发生的太频繁了,Redis 的性能也会受到显著的影响。除此之外,这里还存在一个明显的惊群问题,我不想关心的事件 Redis 也会通知给我,因为这里的内置 channel 是所有 key 共享的,任意的 key 发生的变化,channel 的消费者都能收到相应的事件。

基于这个原因,Redis6 对「客户端缓存」进行了重新设计,让它使用起来更加方便而且不会显著导致 Redis 本身的性能下降。有了「客户端缓存」,Redis 服务器本身的访问压力也会显著减轻,应用程序只需要访问本地内存就可以得到期望的数据,如此 Redis 就可以应用于更高的并发应用场景。

Redis6 将「客户端缓存」称为「Client Key Tracking」,表示客户端对指定的 Key 感兴趣,它会订阅这些 Key 的修改通知,如果 Key 发生了变化,客户端会立即收到一个「缓存失效」通知。紧接着客户端就会清空并重建本地缓存。

那如何订阅具体的 Key 呢,Redis6 提供了两种方式,自动订阅和手动订阅。自动订阅就是客户端的某个开关打开后,服务器会自动帮助客户端订阅它所读取的所有的 Key。这种自动订阅的方式虽然很方便,在某些特定的场合下可能并不合适。所以 Redis 也提供了 手动订阅的方式,需要在每一条需要缓存的读 Key 命令之前打上一条特殊的标记表示接下来的这条指令读取的值会缓存在内存里。

除此之外,Redis 还提供了前缀订阅指令(也叫广播指令),可以让客户端一次性订阅以固定前缀开头的所有的 Key。这种方式需要小心使用,如果前缀对应的 Key 非常多而且修改又很频繁就会给服务器带来广播风暴,严重影响服务器的性能。

使用 Client Key Tracking 的原则就是读多写少,比如业务系统使用的全局配置参数

  1. 变化频繁的 Key 不要本地缓存,缓存刷新过于频繁

  2. 读频率低的 Key 不要缓存,缓存意义不大

    遗憾的是,大部分企业都还没能用得上 Redis5,就更别提 Redis6 了。对于这个新特性,我们还是慢慢等着时间来逐步接受它吧。

    Spring Boot集成Redis实现keyspace监听 | Spring Cloud 34 现在开始我们正式学习`Redis`的`keyspace`(**键空间通知**),在本章节主要进行对以下部分讲解说明: - `keyspace`(**键空间通知**)介绍 - `Redis`事件通知开启方式及配置说明 - `keyspace`各种事件通知的产生 - `keyspace`监听的`redis-cli`客户端验证 - `Spring Boot`集成`Redis`实现`keyspace`监听 - `RedisMessageListenerContainer` 使用自定义线程池 阅读详情

    相关推荐

    CMOS锁相环核心:四种鉴频鉴相器(PFD)结构深度剖析与选型指南

    本文深入剖析了CMOS锁相环中四种鉴频鉴相器(PFD)的结构与性能,包括传统RS触发器型、非时钟型、预充电型和边沿触发型PFD。通过详细的电路分析、实测数据和工程案例,提供了PFD选型的实用指南,帮助工程师根据速度、功耗和精度需求选择最优方案,提升锁相环设计效率。

    weixin_42530458的博客 588

    【Redis】 - Redis 6.0 新特性之客户端缓存

    antirez 写了一篇有关客户端缓存设计的想法:《antirez 认为,Redis 接下来的一个重点是配合客户端,因为客户端缓存显而易见的可以减轻 Redis 的压力,速度也快很多。实际上,几乎每个大公司都有实现这种应用端缓存的机制,antirez 想通过 server 端的一些设计来减少客户端缓存实现的复杂度和成本,甚至不惜在 Redis 协议上做修改。

    迪曼奥特迦-博客 2231

    linux基线检查、基线加固、安全漏扫、系统漏洞、centos7、文尾部附脚本

    等保三级-CentOS Linux 7合规基线检查 风险分类:系统-等保三级-CentOS Linux 7合规基线检查 检测项说明: CentOS Linux 7合规基线检查,对标中国等保2.0第三级等级保护基本要求部分检查项目,仅供参考 检查项目 : 应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换 加固建议: 1、执行`cat /etc/shadow | awk -F: '($2 == "" ) { print $1}' `, 查看空密码账户并处理; 2、

    swindy博客 5624

    Redis 客户端缓存

    Redis 客户端缓存

    阿呆的隐秘角落 928

    四、嘉立创EDA原理图绘制实战:从零搭建STM32温湿度监测系统

    本文详细介绍了使用嘉立创EDA标准版从零开始绘制STM32温湿度监测系统原理图的完整流程。涵盖核心元器件选型、电源电路设计、ADC按键创新应用及模块化布局技巧,帮助电子爱好者快速掌握STM32系统设计,提升嵌入式开发实战能力。

    h0i1j2k3l的博客 884

    组态王|组态王通过选择日期实现历史数据的查询

    ②在弹出的【插入通用控件】对话框选择【Calender Control】控件,然后点击【确定】按钮,关闭对话框,然后在画面上适当的位置按住鼠标左键并拖动,绘制出一个矩形框,放开鼠标,就完成了控件的绘制。此函数将指定的时间格式(年,月,日,时,分,秒)转换为以秒为单位的长整型数,转换的时间基准是UTC(格林尼治)1970年1月1日00:00:00。实现内容,通过两个日历控件选择开始日期和结束日期,然后点击【历史数据查询】按钮,在报表中显示对应时间段的数据集。另外你用过哪些组态软件?

    做有价值的事,积累有价值的笔记! 4568

    redis键空间通知(keyspace notification)

    目录redis键空间通知(keyspace notification)1 事件类型2 key-event 通知订阅机制3 过期事件的时间安排4 用代码实现发布订阅5 事件发布广播机制 redis键空间通知(keyspace notification) Redis键空间通知 redis 事件的影响del、expired 发布一个通知 pub/sub发布/订阅 1 事件类型 键空间通知的实现是为每一个影响Redis数据空间的操作发送两个不同类型的事件。例如,在数据库0中名为mykey的键上执行DEL操作,将

    Y7000也拯救不了我的博客 2797

    Microsoft AI SDK 与 SAP ABAP:让企业级 AI 能力触手可及的深度整合指南

    借助 Microsoft AI SDK,ABAP 开发者无需跳出熟悉的事务码与数据字典,就能把 GPT‑4 的强大语言理解与生成能力深度植入采购、销售、财务等核心业务流程。只要掌握“初始化 SDK → 构造 Prompt → 解析输出”这一范式,未来无论 Azure OpenAI、OpenAI 还是本地化 LLM,都能在同一套代码骨架内快速切换,实现真正的“AI 即服务”。现在,就让我们在下一行 ABAP 里拥抱智能未来。参考链接均于 2025‑07‑22 提取,推荐读者结合实际版本进一步验证。

    2007 年 ~ 2025 年,深耕 SAP 技术 18 年 437

    Redis的键空间监听功能

    keyspace(键空间通知)针对指定key发生的一切改动,推送给订阅的客户端,侧重于针对指定key的操作。

    Filwaod 3294

    越野换了逐飞的ips200pro的屏幕后代码烧录中报错: “Cannot initialize device connection” 和 “Flashing failed” ...如何解决?

    🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

    **My Coding Family** 1152

    少儿学编程系列--使用递归画出龙形曲线DragonCurve

    龙形曲线(Dragon Curve) 龙形曲线(Dragon Curve)又叫分形龙,是一种自相似碎形曲线的统称,因形似龙的蜿蜒盘曲而得名 使用黄金比例画龙形曲线 根据黄金比例画一条龙曲线。每次递归,第一步向左转32.89度,移动0.74倍原距离;第二个递归步骤向右转46.99度,移动原来距离的0.55倍。请查看这个网页(https://larryriddle.agnesscott.org/ifs/heighway/goldenDragon.htm)了解关于龙形黄线数学的细节 龙形曲线效果 .

    penriver的博客 2298

    syslog 向内存中缓存_Redis6 最重要的新功能客户端缓存是个什么鬼?

    应用缓存通常分两种,本地缓存和远程缓存。本地缓存就是内存缓存 LocalCache,远程缓存就是分布式共享缓存比如 Redis。本地缓存在访问性能上远胜过远程缓存,但是在一致性上要弱一些。我们平时经常会用到的 Guava Cache 就是内存缓存技术框架。Redis6 反复提到的「客户端缓存」就是本地缓存,这意味着 Redis 欲将缓存的魔爪从分布式共享缓存延伸到内存缓存,进一步榨干缓存...

    weixin_42286789的博客 127

    嵌入式内存管理之“LittleFS文件系统”开发(附LittleFS项目源码)

    本文介绍了如何在嵌入式系统中实现 LittleFS 文件系统,并结合 Flash 存储进行数据管理。通过详细的代码示例,展示了如何配置、挂载 LittleFS 文件系统,并进行文件操作,如读取、写入和更新数据。特别地,博客通过实际应用演示了如何实现启动计数功能,以及如何处理文件系统的格式化和挂载过程。该示例帮助读者掌握在资源受限的嵌入式环境中实现高效文件存储管理的关键技术。

    Bit_Dong的博客 3189

    「最强」Lettuce 已支持 Redis6 客户端缓存

    Redis 客户端缓存 缓存的解决方案一般有两种: 【L1】 内存缓存(如 Caffeine、Ehcache) —— 速度快,进程内可用,但重启缓存丢失,出现缓存雪崩的问题。 【L2】集中式缓存(如 Redis)—— 可同时为多节点提供服务,但高并发下,带宽成为瓶颈。 业内有很多开源框架来解决以上问题,既能有 L1 速度,并且拥有 L2 集群态。如下 J2Cache 两级缓存框架 hotkey 热点数据实时同步 在 redis 6.0 版本中,已经默认支持了客户端缓存功能,Java 中主流的连接客户端 le

    冷冷的博客 2155

    廖雪峰Python教程[完整版]

    廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

    Camera2Demo

    在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

    十四. Redis 新功能

    RESP3 新的 Redis 通信协议:优化服务端与客户端之间通信。Client side caching 客户端缓存:基于 RESP3 协议实现的客户端缓存功能。为了进一步提升缓存的性能,将客户端经常访问的数据 cache 到客户端。减少 TCP 网络交互。Proxy 集群代理模式:Proxy 功能,让 Cluster 拥有像单例一样的接入方式,降低大家使用 cluster 的门槛。

    weixin_61635597的博客 1386

    jre9下载 jdk9

    (Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

    14【Redis6】Redis6.0新功能

    Redis ACL是Access Control List(访问控制列表)的缩写,该功能允许根据可以执行的命令和可以访问的键来限制某些连接。在Redis 5版本之前,Redis 安全规则只有密码控制 还有通过rename 来调整高危命令比如 flushdb , KEYS* , shutdown 等。Redis 6 则提供ACL的功能对用户进行更细粒度的权限控制 :(1)接入权限:用户名和密码(2)可以执行的命令(3)可以操作的 KEY。

    记录生活 913

    怀旧版电脑GBC模拟器

    再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

    基于redis客户端缓存机制实现本地缓存

    基于redis6.x新增的客户端缓存机制实现了本地缓存,提高数据查询效率,减少redis服务端的请求压力

    弹指天下 4057

    Redis 6 客户端缓存机制:解决本地缓存与远程缓存不一致问题的全新方案

    在高并发系统中,缓存作为优化查询性能的核心手段,起着至关重要的作用。而多级缓存架构也逐渐成为业界主流方案。然而,随着缓存层次的增加,特别是引入本地缓存(如Guava、EhCache)与远程缓存(如Redis)后,如何保证它们之间的数据一致性,成为了架构设计中的一大难题。在 Redis 6 发布之前,开发者必须手动编排如消息队列(MQ)等中间件来同步本地缓存与 Redis 的变化。这不仅开发成本高,而且系统复杂度也大幅增加。而 Redis 6 引入的客户端缓存机制(Client-side Caching)

    qq_46371374的博客 1405

    Redis 6 客户端缓存

    Redis服务器辅助的客户端缓存 客户端缓存是一种用于创建高性能服务的技术。它利用应用服务器中的可用内存,这些服务器通常是与数据库节点不同的计算机,以便将数据库信息的某些子集直接存储在应用程序端。 通常当需要一些数据时,应用服务器会向数据库询问这些信息,如下图所示: +-------------+ +----------+ | | ------- GET user:1234 -------> | |

    ZEEKLING 585

    Redis 6.0 客户端缓存:Tracking 模式、广播与失效策略实践

    本文深入解析 Redis 6.0 客户端缓存机制,重点介绍 Tracking 模式的工作原理、广播机制与失效策略,并通过实际案例展示如何有效利用这一特性提升应用性能。

    ✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 3069

    带你100% 地了解 Redis 6.0 的客户端缓存

    近日 Redis 6.0.0 GA 版本发布,这是 Redis 历史上最大的一次版本更新,包括了客户端缓存 (Client side caching)、ACL、Threaded I/O 和 Redis Cluster Proxy 等诸多更新。 我们今天就依次聊一下客户端缓存的必要性、具体使用、原理分析和实现。 为什么需要客户端缓存? 我们都知道,使用 Redis 进行数据的缓存的主要目的是减少对 MySQL 等数据库的访问,提供更快的访问速度,毕竟 《Redis in Action》中提到的, Redis

    taylor的专栏 3008

    Redis6.0 新功能

    Redis ACL 是 Access Control List(访问控制列表)的缩写,该功能允许根据可以执行的命令和可以访问的键来限制某些连接在 Redis 5 版本之前,Redis 安全规则只有密码控制 还有通过 rename 来调整高危命令比如 flushdb,KEYS* ,shutdown 等。Redis 6 则提供 ACL 的功能对用户进行更细粒度的权限控制 : (1)接入权限:用户名和密码 (2)可以执行的命令 (3)可以操作的 KEY参考官网:https://redis.io/topics/ac

    长期更新自学笔记 2948

    基于Redis6.0 tracking客户端缓存实现本地缓存

    如果Redis连接断了,并且客户端自动重连,那么新的连接是没有开启Tracking机制的,该连接查询的键不会受到失效消息,后果很严重。所以我们的需求就变更为我们需要使用本地缓存,但是当Redis远程缓存出现数据变更的时候,所有Java应用实例的本地缓存都需要得到通知并刷新它本地缓存的数据。我们可以发现Redis客户端数据发生变更的时候,本地缓存这边接受到了数据变更的消息,然后将变更数据的key置为了失效。最后我们可以得到结果,当远程缓存的数据发生变更的时候,本地缓存就会收到变更通知,并更新本地缓存的数据。

    水瓶座鬼才的博客 1084

    【译】antirez:Redis6将支持客户端缓存

    本文翻译自Redis作者antirez的一篇博客,原文地址是:http://antirez.com/news/130 纽约Redis日已经结束了,我仍然与意大利时区同步,早上5点30起床,并立即走上了曼哈顿的街道,我很喜欢这里的风景,并且享受着成为这里的一部分。当时我正在考虑发布Redis 6的release版本,这是在未来一段时间最重要的事了。新版本的Redis协议(RESP3)推进得还很慢,如...

    K_Ohaha的博客 708

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

    x-oss-Redis 6.0是刚刚推出的,新的功能特性还需要在实际应用中进行部署和验证,所以,如果你想试用Redis 6.0,可以尝试先在非核心业务上使用Redis可以验证新特性带来的性能或功能优势避免因为新特性不稳定而导致核心业务受到影响。

    Innocence_0的博客 1067
    上一篇: Redis 生涯就此结束
    下一篇: 性能优化搞不好,CRUD 干到老!
    码洞
    博客等级 码龄10年 41粉丝 137原创
    评论
    成就一亿技术人!
    拼手气红包6.0元
    还能输入1000个字符
     
     条评论被折叠 查看
    添加红包

    请填写红包祝福语或标题

    个

    红包个数最小为10个

    元

    红包金额最低5元

    当前余额3.43元 前往充值 >
    需支付:10.00元
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付元
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值