原理分析

在 Spring 中 CacheManager 负责创建管理 Cache,Cache 负责缓存的读写,因此使用 redis 作为缓存对应的就有 RedisCacheManager 和 RedisCache。

打开 RedisCache 源码,我们需要注意这两个方法:

1、读取数据,未加锁

@Override
protected Object lookup(Object key) {byte[] value = cacheWriter.get(name, createAndConvertCacheKey(key));if (value == null) {return null;}return deserializeCacheValue(value);
}

2、读取数据,加锁,这是 RedisCache 中唯一一个同步方法

@Override
public synchronized <T> T get(Object key, Callable<T> valueLoader) {ValueWrapper result = get(key);if (result != null) {return (T) result.get();}T value = valueFromLoader(key, valueLoader);put(key, value);return value;
}

通过打断点的方式可以知道 RedisCache 默认调用的是 lookup(),因此不能应对缓存穿透,如果有相关需求,可以这样配置:@Cacheable(sync = true),开启同步模式,此配置只在 @Cacheable 中才有。

总结

Spring Cache 对于读模式下缓存失效的解决方案:

  • 缓存穿透:cache-null-values: true,允许写入空值
  • 缓存击穿:@Cacheable(sync = true),加锁
  • 缓存雪崩:time-to-live:xxx,设置不同的过期时间

而对于写模式,Spring Cache 并没有相应处理,我们需要使用其它方式处理。

总的来说:

1、对于常规数据(读多写少,及时性、一致性要求不高的数据)完全可以使用 Spring Cache

2、对于特殊数据(比如要求高一致性)则需要特殊处理

缓存-SpringCache-原理与不足相关推荐

  1. mysql 缓存监控_MySql 缓存查询原理与缓存监控 和 索引监控

    MySql缓存查询原理与缓存监控 And 索引监控 by:授客 QQ:1033553122 查询缓存 1.查询缓存操作原理 mysql执行查询语句之前,把查询语句同查询缓存中的语句进行比较,且是按字节 ...

  2. C和混编混合编程----strcpy缓存溢出原理

    今天老师给了一到程序,让我们分析分析原理,关于strcpy缓存溢出原理的,反汇编一遍遍调试,终于看明白了,记录一下 C程序: #include "string.h" #includ ...

  3. MySql 缓存查询原理与缓存监控 和 索引监控

    MySql缓存查询原理与缓存监控 And 索引监控 by:授客 QQ:1033553122 查询缓存 1.查询缓存操作原理 mysql执行查询语句之前,把查询语句同查询缓存中的语句进行比较,且是按字节 ...

  4. 五分钟,带你彻底掌握 MyBatis缓存 工作原理

    作者:双子孤狼 blog.csdn.net/zwx900102/article/details/108696005 前言 在计算机的世界中,缓存无处不在,操作系统有操作系统的缓存,数据库也会有数据库的 ...

  5. mybatis 二级缓存失效_给我五分钟,带你彻底掌握MyBatis的缓存工作原理

    前言 在计算机的世界中,缓存无处不在,操作系统有操作系统的缓存,数据库也会有数据库的缓存,各种中间件如Redis也是用来充当缓存的作用,编程语言中又可以利用内存来作为缓存.自然的,作为一款优秀的ORM ...

  6. 16课:关于Springboot和@Cacheable注解拉去缓存,@CacheEvict清空缓存的原理

    16课:关于Springboot和@Cacheable注解拉去缓存,@CacheEvict清空缓存的原理 简介 代码展示 1.pox.xml 2.application.properties文件 3. ...

  7. 蚂蚁京东新浪10位架构师424页佳作深入分布式缓存从原理到实践

    前言 最近刷到了一句耐人寻味的话,"解决雪崩问题的最好办法是不发生雪崩". 不论是在硅谷互联网公司里还是在国内的互联网平台上,曾多次遇到过海量规模的交易瞬间吞噬平台的悲惨故事. 核 ...

  8. Spectre(幽灵)CPU缓存漏洞原理

    Spectre(幽灵)CPU缓存漏洞原理 偶然看到了一篇这样的推送,但是感觉作者没有说清楚,所以自己琢磨了好一会儿才弄懂,现在写来说说自己的通俗理解,Meltdown(熔断)原理和这个类似,网上有很多 ...

  9. linux系统中arp老化时间计算,Linux实现的ARP缓存老化时间原理解析

    Linux实现的ARP缓存老化时间原理解析 2012-02-11 22:00 1566人阅读 评论(0) 收藏 举报 一.问题 众所周知,ARP是一个链路层的地址解析协议,它以IP地址为键值,查询保有 ...

  10. 技术交流:分布式缓存的原理及应用

    文章目录 分布式缓存的原理及应用 缓存(进程级缓存与分布式缓存) 分布式缓存 Ehcache的原理及应用 Ehcache的原理 Ehcache的特点 Ehcache的架构 Ehcache的存储方式 E ...

最新文章

  1. 将多个文件的属性添加到数据库
  2. python是什么语言、即变量不需要显示声明数据类型-python中可以声明变量类型吗...
  3. 软件工程--需求分析
  4. 中国城市商业银行产业模式展望及布局规模前景分析报告2021-2027年
  5. sudo: apt-get:找不到命令”的解决方法
  6. [Abp 源码分析]自动审计记录
  7. storyboard之 Segue
  8. r k-means 分类结果_《机器学习》之 Kmeans聚类的原理及代码
  9. [2019.3.21]洛谷P3640 [APIO2013]出题人
  10. GET请求缓存问题及解决方案
  11. php短信验证码接口怎么写,PHP 攻击短信验证码接口
  12. 浅析export * from 与 export {default} from用法
  13. Android群英传笔记——第七章:Android动画机制和使用技巧
  14. 如何写PRD文档[最全版]
  15. tp获取php异常信息,ThinkPHP 异常处理
  16. 带中文字库的12864驱动笔记
  17. 用php计算自由落体,JavaScript模拟自由落体
  18. SDUT-1150 因式分解
  19. 用LU分解法来解矩阵方程
  20. Android 学习笔记之九 下拉刷新

热门文章

  1. mysql 读写分离 ,mysql_proxy实现
  2. C语言基础:C语言宏定义(4) - 多文件编译
  3. 推荐一个MDI模式的远程桌面管理程序
  4. 使用Hibernate生成数据库和连接数据库
  5. 错误 LINK : fatal error LNK1158: 无法运行“rc.exe”
  6. go defer性能测试
  7. 【Hadoop学起来】分布式Hadoop的搭建(Ubuntu 17.04)
  8. shell后台执行命令-crontab
  9. 02-24 面向对象--方法重载、隐藏
  10. 计算机数据库基础知识笔记,计算机基础及技巧(我的电脑笔记,适合新手!包含使用电脑最基本的知识及DOS、网络及数据库等。)...