缓存的变更(JVM本地缓存->Redis分布式缓存)

在一次需求修改中,下游的服务附加提出了,针对某个业务数据缓存的生效时间的要求

原JVM设计方案:

采用jvm本地缓存机制,定时任务30秒刷新一次

现在redis方案:

  1. 因为很多地方使用了这个业务数据缓存,使用方面不能改动过多
  2. 因为是分布式部署,如果只使用jvm缓存,无法更新其他的服务器中的缓存数据,达不到立刻生效的要求
  3. 不使用二级缓存的原因:理由和第二个一样,如果优先使用jvm时,哪怕更新了redis,其他服务器也会先用jvm缓存(另外为什么会使用二级缓存?:因为jvm本地缓存更快而已,还得加重了架构的负担,为了一个需求)

所以:直接把维护jvm业务缓存改成redis来维护

那便需要考虑主动刷新 被动刷新 生效时间等

  1. 被动刷新:依旧使用jvm缓存的定时任务机制,30秒更新一次(无改动,使用原本的机制)
  2. 主动刷新:由于生效时间是一秒生效,则在修改和更新后,需要立即主动刷新该缓存(改动少,维护都在一个项目里,不需要采用什么监听mysql表的东西)

修改中的收获:

  1. 工具类中获取注入的问题 BeanUtil.getBean(RedisTemplate.class);
  2. redis Pipeline管道提速 redisTemplate.STRINGS.setEx(redisCacheList,refreshTime);
  3. 分割思想:更小的粒度 如:redis 一个key存储一个表的数据太大了,则根据表中关键key进行切分
相关推荐
耀耀_很无聊19 小时前
12_Redis Lua 脚本踩坑:为什么 tonumber(ARGV[x]) 会得到 nil?
java·redis·lua
Rain的Java大神实战圈21 小时前
高并发下如何防止商品超卖少卖
经验分享·redis·高并发·架构设计·电商·面试经验
云计算磊哥@1 天前
运维开发宝典051-缓存服务Redis集群2
redis·缓存·运维开发
whaledown1 天前
互联网大厂Java求职面试三轮提问详解(涵盖Spring Boot、微服务、Kafka等核心技术)
java·jvm·数据库·spring boot·微服务·面试·kafka
hdsoft_huge1 天前
JDK系列19:JVM全维度调优实战,内存、元空间、线程栈、GC参数压测调优完整方案
java·开发语言·jvm
怕孤单的草丛1 天前
缓存管理面临的主要问题
java·数据库·缓存
摇滚侠2 天前
Redis7 零基础到进阶 Linux 离线安装 Redis 09-10
数据库·redis·缓存
-西门吹雪2 天前
现代C++ 并发编程-学习指南
java·jvm·c++
zenithdev12 天前
fastcache:为 Go 设计的低 GC 压力内存缓存
开发语言·其他·缓存·golang
techdashen2 天前
Uber 的全局限流系统:从零散 Redis 限流到服务网格里的自动化流量保护
数据库·redis·自动化