专栏首页上善若水0x01缓存基本概念一览

0x01缓存基本概念一览

tags: redis,ehcahe,jcache,memcache

缓存机制的引入可以提高系统的访问效率。

它的主要实现思想是:在程序和数据源之间引入一个中间层即Cache,访问cache的时间成本肯定远低于数据源。

按照Cache所在可以简单分为进程外缓存和本地缓存。

对于单机推荐使用 ehcahe

对于分布式 推荐使用 redis 和   MemCached;

  1. SpringBoot支持很多种缓存方式:redis、guava、ehcahe、jcache等等。
  2. Redis && memcache 缓存中间件:属于独立的运行程序 可以单机部署,也可以分布式部署;
  3. ehcache: 是程序的一个功能模块。 缓存的访问速度快,但不太适合分布式部署。
  4. 读写速度,不考虑并发问题,本地缓存是最快的

缓存预热

在缓存初始化时,缓存中是没有任何缓存数据的,需先将数据缓存后,缓存服务才算完全启动。预热方式:

  • miss后,实时查询,然后更新缓存数据;
    1. 缺点1:多个tomcat实例同时查询数据并跟新缓存,在一段时间内缓存近似于失效;
    2. 缺点2:在高并发场景下,无法限制对数据库访问速度;
  • 通过task或接口预先加载服务,然后开启缓存服务;
    1. 优势1:在初始化服务时,限制加载数据的速度;
    2. 优势2:批量查询数据库,减少与数据库之间的网络交互;

缓存穿透的问题

问题:

  • 缓存穿透是指查询一个根本不存在的数据,缓存层和存储层都不会命中,
  • 缓存穿透将导致不存在的数据每次请求都要到存储层去查询,失去了缓存保护后端存储的意义。

原因:代码问题, 爬虫,攻击,大量空命中

场景:查询某个文章,给了一个错误的文章id。一直查询不到。

方法:

缓存空对象

  • 空值做缓存,即缓存层中存了更多的键,这就需要更多的内存空间 ,可以对其设置一个较短的过期时间,让其自动清除。
  • 优点是实时性高,代码维护简单。

可以缓存到本地内存中,空对想用一个静态变量。这样不会造成 造成占用内存。

参考链接

  1. ehcache、memcache、redis三大缓存比较
  2. MemCached vs Redis 对象缓存的比较
  3. 总结:如何使用redis缓存加索引处理数据库百万级并发
  4. 学习笔记:cache 和spring cache 技术---本地缓存-分布式缓存,缓存穿透,雪崩,和热点key的问题

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 016 进程内缓存和进程外缓存的对比

    在java应用中,对于访问频率比较高,又不怎么变化的数据,常用的解决方案是把这些数据加入缓存。相比DB,缓存的读取效率快好不少。java应用缓存一般分两种,一是...

    上善若水.夏
  • s001android逆向安全初级篇之apk逆向常用工具及简单使用一览

    关于apk 逆向中的一些工具的使用,看了不少文章,也使用过有很长一段时间了,今天对此做一总结:

    上善若水.夏
  • java002-java学习路线

    ​ JSP(Java Server Pages) : Java服务器页面

    上善若水.夏
  • 对缓存的思考——提高命中率

    开篇 编写高效的程序并不只在于算法的精巧,还应该考虑到计算机内部的组织结构,cpu微指令的执行,缓存的组织和工作原理等。 好的算法在实际中不见得有高效率,如果完...

    猿人谷
  • 面对缓存,出现这些问题你要如何思考!

    缓存可以说是无处不在,比如 PC 电脑中的内存、CPU 中的二级缓存、HTTP 协议中的缓存控制、CDN 加速技术都是使用了缓存的思想来解决性能问题。 Java...

    Java架构
  • 聊聊Yii2和ThinkPHP5的文件缓存

    写PHP的老王
  • 【玩转Redis面试第4讲】Redis缓存雪崩、缓存穿透、缓存击穿对比看这一篇就够了

    缓存穿透是指用户请求的数据在缓存中不存在即没有命中,同时在数据库中也不存在,导致用户每次请求该数据都要去数据库中查询一遍,然后返回空。

    爱笑的架构师
  • 深入理解浏览器的缓存机制

    缓存可以说是性能优化中简单高效的一种优化方式了。一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟,并且由于缓存文件可以重复利用,还可以减少带宽,降低网络负...

    前端迷
  • 缓存有那么多种,分别是干什么的?

    只要是位正儿八经的程序员应该都知道“缓存”是什么,甚至我司的很多做运营的小姐姐现在和程序员小哥哥交流中都时不时冒出“缓存”这个词,让人压力山大。

    AI乔治
  • redis学习(二十)

    Redis缓存的使用,极大的提升了应用程序的性能和效率,特别是数据查询方面。但同时,它也带来了一 些问题。其中,最要害的问题,就是数据的一致性问题,从严格意义...

    崔笑颜

扫码关注云+社区

领取腾讯云代金券