缓存

作者: OPice | 来源:发表于2019-12-30 15:34 被阅读0次

缓存

  缓存就是将系统或者程序需要的数据存在内存中,以便快速访问,不用重新创建新的实例。减少系统开销提高系统效率。

  常见的缓存场景:

  • 客户端浏览器缓存 —— 减少网站的访问或者静态资源的加载
  • Web服务端缓存 —— 减少应用服务器的请求
  • 应用程序缓存 —— 减少数据库的访问
  • 数据库缓存 —— 减少文件系统的IO
  • 操作系统磁盘缓存 —— 减少磁盘机械操作

缓存的实现

  1. 存储方式
    内存:直接使用JVM的内存,比如定义一个对象,Map map = new HashMap();
    自身内存不够,第三方内存型数据库来凑:Redis
  2. 技术方案

问题及解决方案

  • 缓存穿透
    描述:访问数据库不存在的数据,不存在的数据缓存中也没有,请求会直接打到DB,造成系统瘫痪。
    方案:1、空值缓存 2、BloomFilter 在缓存前加一道屏障,缓存数据库存在的所有Key,不存在的Key直接返回null。

  • 缓存雪崩
    描述:如果缓存存储服务挂掉,所有请求会像雪崩一些狂涌到DB造成整个服务Down掉。
    方案:保证存储服务的高可用(废话);采用熔断、降级、限流三个方面降低损失。具体实现 —— Hystrix ,预设置一个请求失败率,当某一服务失败率达到预设置的值,将该服务的请求拒绝(熔断);过一段时间,放开一部分请求(限流),重新统计失败率;将拒绝的请求返回预定义的返回值(降级)。

  • 缓存击穿
    描述:又叫热点数据集中失效。一般情况下会对缓存的数据加一个过期时间,数据过期之后重新更新缓存数据。当缓存数据失效的时间,有大量请求失效数据。
    方案:使用互斥锁,缓存失效时,会向数据库重新读取数据,这时将这条数据上锁,当请求读完数据库更新过缓存后释放,期间所有请求该数据的线程同步等待。避免集中失效可以设置随机过期时间。

  • 缓存一致性
    描述:现象是数据库数据和缓存数据不一致 缓存一致性场景分析
    方案: 自己实现方案思路:

  1. 先更新数据库,后删除缓存。

1、更新数据库
2、通过拦截器或者订阅binlog来删除缓存
3、删除失败通过MQ或者retry重试

  1. 先删缓存,后更新数据库
    具体方案要结合业务,后失败哪个对业务影响小选择哪种方案。

相关文章

网友评论

      本文标题:缓存

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