美文网首页
0x01缓存基本概念一览

0x01缓存基本概念一览

作者: 夏大王2019 | 来源:发表于2018-09-18 16:14 被阅读22次

    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的问题

    相关文章

      网友评论

          本文标题:0x01缓存基本概念一览

          本文链接:https://www.haomeiwen.com/subject/zvupnftx.html