解析Redis Key Prefix配置之谜:双冒号“::”的由来与作用

前言

在使用Spring Boot集成Redis进行应用开发时,为了增强缓存键的可读性和管理性,我们常常会在配置文件中设定一个全局的key-prefix。如果你发现存储至Redis的键自动附加了“::”,本文将深入探讨这一现象背后的原因,解析Spring Data Redis是如何基于你的配置自动生成这一格式的。

背景介绍

在Spring Boot应用中,通过application.propertiesapplication.yml配置Redis缓存时,可以设置如下属性来指定所有缓存键的前缀:

spring:
  cache:
    type: redis
  redis:
    cache:
      key-prefix: myapp

​​​​在这里插入图片描述
​​​​在这里插入图片描述

设置上述配置后,每当应用执行缓存操作时(如@Cacheable注解的方法被调用),实际存储到Redis中的键名会以前缀myapp::开头,紧随其后的才是具体的业务键值。这里的“::”正是引发好奇的地方。

源码透视:双冒号的起源

让我们追溯到Spring Data Redis的内部实现,揭秘双冒号的生成逻辑。核心在于CacheKeyPrefix接口及其默认实现SimpleCacheKeyPrefix。简化的源码逻辑如下:

public class SimpleCacheKeyPrefix implements CacheKeyPrefix {

    private final String prefix;

    public SimpleCacheKeyPrefix(String prefix) {
        this.prefix = prefix;
    }

    @Override
    public String compute(String cacheName) {
        return this.prefix + "::";
    }
}

在这里插入图片描述

当你在配置文件中设定了key-prefix,如myapp,实际上就是初始化了SimpleCacheKeyPrefix实例,其中compute方法负责生成最终的缓存键前缀。这里,Spring框架巧妙地在用户定义的前缀后添加了双冒号“::”,形成了最终的格式化字符串,比如myapp::

双冒号的智慧
  1. 逻辑分隔:“::”作为一个明确的分隔符,清晰地区分了自定义前缀与原始键值,使得键名更具可读性,便于在Redis客户端直接辨认和操作特定前缀下的所有键。

  2. 冲突规避:即便原始键值中包含了冒号,通过固定格式的双冒号,依然能保证键名的唯一性和解析的准确性,避免了键名解析上的歧义。

  3. 统一管理:在多模块或大规模应用中,统一的前缀格式便于实施缓存策略,如一键清除某个模块下的所有缓存,提高了缓存维护的便捷性。

应用实践

了解了“::”生成的原理,你就可以更加自信地在自己的应用中运用这一机制。例如,通过调整不同的key-prefix配置,实现不同环境或模块间缓存的隔离,或者利用这一特性进行更精细化的缓存管理和监控。

结语

通过本次解析,我们不仅揭示了Redis缓存键中“::”的由来,也深刻理解了Spring Data Redis在此设计上的考量。这一小小的设计细节,体现了框架设计者对开发者体验和系统可维护性的高度关注。在未来的开发实践中,合理利用这一特性,将助力你的应用构建更加高效、有序的缓存体系。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/583899.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis线程模型及性能优化概述

redis线程模型: 网络模块命令处理 redis的性能: 一个取决于物理内存,另一个是对于socket请求的处理速度。 4.0以前 单线程模式 请求流程:对于一个请求,线程会根据操作产生相应的事件(读,写事…

张大哥笔记:服务器有挖矿木马程序,该如何处理?

这篇文章发表于2021年,今天借这个平台再发布一下,希望对大家有所帮助! 今天收到一个粉丝求助,说收到了阿里云官方短信通知提示有挖矿程序,要求立即整改,否则会关停服务器,以下是我和他的对话内…

机器学习:深入解析SVM的核心概念(问题与解答篇)【二、对偶问题】

对偶问题 **问题一:什么叫做凸二次优化问题?而且为什么符合凸二次优化问题?**为什么约束条件也是凸的半空间(Half-Space)凸集(Convex Set)半空间是凸集的例子SVM 约束定义的半空间总结 **问题二…

CTFHub-Web-SSRF

CTFHub-Web-SSRF-WP 一、内网访问 1.题目提示说访问127.0.0.1的flag.php,在URL后面添加路径没想到直接访问成功 二、伪协议读取文件 1.题目提示说访问Web目录下的flag.php,联想到Web目录一般存放于/var/www/html/里,去修改URL尝试进行访问…

【多级缓存】多级缓存OpenResty,Canal,nginx本地缓存

多级缓存 安装OpenRestyOpenResty入门OpenResty获取请求参数OpenResty向tomcat服务器发送请求 在nginx与tomcat端之间添加redis缓存Redis本地缓存缓存同步缓存同步策略基于Canal的异步通知安装Canal Canal客户端 安装OpenResty OpenResty是一个基于 Nginx的高性能 Web 平台&am…

初探 JUC 并发编程:Java 并发包中并发 List 源码剖析

最近在阅读 《Java 并发编程之美》这本书,感觉学到了很多东西;所以我决定将从事书中学到的思想和一些经典的案例整理成博客的形式与大家分享和交流,如果对大家有帮助别忘了留下点赞和关注捏。 第五部分:Java 并发包中并发 List 源…

STM32CubeMX+MDK通过I2S接口进行音频输入输出(全双工读写一个DMA回调)续-音质问题解决总结

一、前言 之前进行了STM32CubeMXMDK通过I2S接口进行音频输入输出(全双工读写一个DMA回调)的研究总结: https://juejin.cn/post/7339016190612881408#heading-34 后续音质问题解决了,目前测试下来48khz的双声道使用效果很好&…

基于uniapp+微信小程序的智能停车场管理小程序,附源码

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

护航智慧交通安全 | 聚铭精彩亮相2024交通科技创新及信创产品推广交流会

4月26日,石家庄希尔顿酒店内,河北省智能交通协会盛大举办2024年度交通科技创新及信创产品推广交流会。聚铭网络受邀参与,携旗下安全产品及解决方案精彩亮相,为智慧交通安全保驾护航。 为深化高速公路创新驱动发展战略&#xff0…

Java网址url工具类

功能描述 无需引入三方依赖文本匹配网址(支持多个)网址解析(包括协议、主机、路径、参数等) package com.qiangesoft.image.utils;import org.springframework.util.Assert; import org.springframework.util.CollectionUtils;i…

深度学习基础之《TensorFlow框架(16)—神经网络案例》

一、mnist手写数字识别 1、数据集介绍 mnist数据集是一个经典的数据集,其中包括70000个样本,包括60000个训练样本和10000个测试样本 2、下载地址:http://yann.lecun.com/exdb/mnist/ 3、文件说明 train-images-idx3-ubyte.gz: training s…

C#编程模式之装饰模式

创作背景:朋友们,我们继续C#编程模式的学习,本文我们将一起探讨装饰模式。装饰模式也是一种结构型设计模式,它允许你通过在运行时向对象添加额外的功能,从而动态的修改对象的行为。装饰模式本质上还是继承的一种替换方…

分享三款可以给pdf做批注的软件

PDF文件不像Word一样可以直接编辑更改,想要在PDF文件上进行编辑批注需要用到一些专业的软件,我自己常用的有三款,全都是官方专业正版的软件,功能丰富强大,使用起来非常方便! 1.edge浏览器 这个浏览器不仅可…

爬虫实战-房天下(bengbu.zu.fang.com/)数据爬取

详细代码链接https://flowus.cn/hbzx/3c42674d-8e6f-42e3-a3f6-bc1258034676 import requests from lxml import etree #xpath解析库 def 源代码(url): cookies { global_cookie: xeqnmumh38dvpj96uzseftwdr20lvkwkfb9, otherid: b44a1837638234f1a0a15e…

JavaEE 初阶篇-深入了解特殊文件(Properties 属性文件、XML)

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 Properties 属性文件概述 1.1 Properties 属性文件特性与作用 1.2 使用 Properties 把键值对数据写出到属性文件中 1.3 使用 Properties 读取属性文件里的键值对数…

《动手学深度学习(Pytorch版)》Task03:线性神经网络——4.29打卡

《动手学深度学习(Pytorch版)》Task03:线性神经网络 线性回归基本元素线性模型损失函数随机梯度下降 正态分布与平方损失 线性回归的从零开始实现读取数据集初始化模型参数定义模型定义损失函数定义优化算法训练 线性回归的简洁实现读取数据集…

c#创建新项目

确保已安装.NET Core SDK。(visual studio installer中可安装) cmd中先引用到文件夹目录下。 mkdir MyConsoleApp MyConsoleApp是项目文件夹的名字。 mkdir 是一个命令行工具,用于在文件系统中创建新的目录(文件夹)…

用OpenCV先去除边框线,以提升OCR准确率

在OpenCV的魔力下,我们如魔法师般巧妙地抹去表格的边框线,让文字如诗如画地跃然纸上。 首先,我们挥动魔杖,将五彩斑斓的图像转化为单一的灰度世界,如同将一幅绚丽的油画化为水墨画,通过cv2.cvtColor()函数的…

主机ping不通虚拟机/虚拟机ping不通主机/xhell连接不了虚拟机/win10或win11系统升级导致无法连接到虚拟机

解决方案 重置网卡 找虚拟机ip,第二个inet对应的就是虚拟机ip地址 xshell连接 参考: 主机ping不通虚拟机

认识认识DHCP

文章目录 认识认识DHCP一、什么是DHCP?1.1、为什么要使用DHCP?1.2、DHCP是怎么工作的?1.2.1、客户端首次接入网络的工作原理1.2.2、客户端重用曾经使用过的地址的工作原理1.2.3、客户端更新租期的工作原理 二、配置DHCP Server,为…