当前位置: 首页 > news >正文

Redis不同环境缓存同一条数据,数据内部值不同

背景

       现实中,本地环境(dev)和开发环境(feature)会共同使用相同的中间件(本篇拿Redis举例),对于不同环境中的,图片、视频、语音等资源类型的预览地址url,需要配置不同的ip和port地址;如何优美的解决它?

解决方案

  1. 使用配置,不同环境配置不同的 数据库索引:database: 0-15;但随之引起的问题就是,如果Redis是集群怎么办?Redis 集群不像单机版本的 Redis 那样支持多个数据库,集群只有数据库 0,而且也不支持 SELECT 命令。
  2. 对于资源型url数据,使用相对路径,到门户层,或者前端自己拼接;这种深入业务的使用方式,需要很多程序员的协作,并且花费很多沟通、文档、测试时间,最不可取;话分两头:如果是大型项目,并且无法保证公网ip或域名唯一的项目,也只能通过业务方式解决;
  3. 使用@Cacheable 的keyGenerator 属性;不同环境生成不同的缓存key, 从而保证不同公网访问的数据中 图片、视频等预览地址不同;这样顺便解决不同公网的跨域问题;

keyGenerator 使用

项目中添加下方类CacheKeyGenerator:

import java.lang.reflect.Method;import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.stereotype.Component;import lombok.extern.slf4j.Slf4j;@Component
@Slf4j
public class CacheKeyGenerator implements KeyGenerator {@Value("${spring.profiles.active}")private String profilesActive;@Overridepublic Object generate(Object target, Method method, Object... params) {Long id = (Long) params[0];String cacheKey = new StringBuilder(profilesActive).append("_").append(id).toString();log.info("[cacheKeyGenerate],cacheKey={}", cacheKey);return cacheKey;}}

在需要缓存的Service方法上添加@Cacheable注解:

@Cacheable(cacheNames = CacheNames.DETAIL, keyGenerator = "cacheKeyGenerator")
public XXXXVo queryById(Long id){XXXX;return vo;
}
//请原谅不能贴源码出来;

redis下存储最终效果:

http://www.lryc.cn/news/277174.html

相关文章:

  • MySQL之导入、导出远程备份
  • OpenGL学习笔记-Blending
  • 支持 input 函数的在线 python 运行环境 - 基于队列
  • 欧拉Euler release 21.10 (LTS-SP2)升级openssh至9版本记录
  • php 数组中的元素进行排列组合
  • Python从入门到网络爬虫(OS模块详解)
  • 人机交互不是人机融合智能
  • RabbitMQ解决消息丢失以及重复消费问题
  • docker 安装redis集群
  • 锂电池制造设备中分布式IO模块优势
  • Android Room数据库升级Migration解决方案
  • 离线安装docker和docker-compose
  • 奇怪的事情记录:外置网卡和外置显示器不兼容
  • 【大数据进阶第三阶段之Hive学习笔记】Hive基础入门
  • 第三代量子计算机交付,中国芯片开辟新道路,光刻机难挡中国芯
  • react native中使用tailwind并配置自动补全
  • 数据分析——火车信息
  • Bert-vits2最终版Bert-vits2-2.3云端训练和推理(Colab免费GPU算力平台)
  • Asp .Net Web应用程序(.Net Framework4.8)网站发布到IIS
  • vue element plus Typography 排版
  • 理论U3 决策树
  • Redis 常用操作
  • c# 使用Null合并操作符例子
  • 【Docker】docker部署conda并激活环境
  • HarmonyOS@Link装饰器:父子双向同步
  • 【idea】idea插件编写教程,博主原创idea插件 欢迎下载
  • 深入理解 Hadoop (四)HDFS源码剖析
  • 【Vue3+React18+TS4】1-1 : 课程介绍与学习指南
  • Nacos与Eureka的区别详解
  • 【算法刷题】Day28