浅谈数据缓存

15 篇文章 0 订阅
本文探讨了数据缓存的重要性及其分类,介绍了Redis、Ehcache、Mangodb、Memcached等常用缓存组件,并详细阐述了缓存穿透、缓存雪崩和缓存击穿问题及解决方案。此外,还提及了布隆过滤器在防止缓存穿透中的应用。
摘要由CSDN通过智能技术生成

在系统架构中,为了提升系统的性能或者响应的时效性,会将需要的数据提前加载至内存中,或者从远端的数据库加载至本地系统中。这些数据包含业务需要的热点数据(如个人爱好等)、不易修改数据(流处理数据时,需要的全网数据)、计算结果(可以重复使用到的计算结果或者中间数据)等。

一、数据如何分类

在当今的业务系统,每天都有海量的数据生成,市场上也陆续出了很多的数据处理组件。有做数据缓存的组件,例如Redis、EhCache、Mongodb、MemCached等组件。也有做数据分析的组件,例如ES、HBase、Hive、S3等。

选择需要使用的组件时,需要多方向多角度综合去考虑,下面是常规的一些考虑角度。

  • 数据量。

数据最多会占多大的存储空间。并发时最大的数据访问量。

  • 访问频率。

数据的访问频率也是很重要的一个角度,根据紧要程度可以把数据放入不同的组件中,或者加载到不同位置上。

  • 更新频率。
  • 业务属性。
  • 存储周期。

二、常用的组件

1、Redis

    主要是热点数据的缓存。

2、Ehcache

    主要是做些数据量比较大,大量数据更新频率低。

3、Spring Data

4、Mangodb

5、Memcached

三、缓存问题

    redis缓存雪崩,缓存穿透,缓存击穿的解决方法

1、缓存穿透

缓存穿透是指查询一个一定不存在的数据。高流量时导致DB崩溃。

解决方案:

  1. 采用布隆过滤器。
  2. 缓存查询为空的数据,过期时间放短。

2、缓存雪崩

缓存大面积同时失效或者过期叫缓存雪崩。

解决方案:

  1. 在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。
  2. 可以通过缓存reload机制,预先去更新缓存。
  3. 不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀。
  4. 做二级缓存,或者双缓存策略。

3、缓存击穿

缓存高并发访问同一个Key(key过期)导致缓存失效叫缓存击穿。

解决方案:

  1. 后台刷新。
  2. 检查更新。
  3. 分级缓存,两级缓存失效时间不一致,缓存更新时,需要加锁。缺点是浪费空间。
  4. 加锁。

四、布隆过滤器

优质文档:黑客攻防:缓存穿透终极解决方案——布隆过滤器

应用场景:

  1. 网页爬虫对URL去重,避免爬取相同的URL地址。
  2. 反垃圾邮件,从数十亿垃圾邮件列表中判断邮箱是否是垃圾邮箱。
  3. Google Chrome使用布隆过滤器识别恶意URL。
  4. Medium使用布隆过滤器避免推荐给用户已经阅读过的文章。
  5. Google BigTable,Apache HBbase 和 Apache Cassandra使用布隆过滤器减少对不存在的行和列的查找。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值