• 欢迎光临~

Redis缓存那些事儿

开发技术 开发技术 2022-04-24 次浏览

1、Redis支持好几种数据结构的存储:

  • String
  • Hash
  • List
  • Set
  • SortedSet
  • Bitmap
  • ······

2、缓存过期 && 缓存淘汰

缓存过期:给缓存内容设置一个超时时间,具体设置多长交给应用程序们去设置。

=> 定期删除: 随机选择一部分来清理,缓解内存压力。    缺点:某些键值对每次都能幸免于难,长时间霸占内存。

=> 惰性删除: 那些原来逃脱随机选择算法的键值,一旦遇到查询请求,发现已经超期,就立即删除。    缺点:被动式触发的,不查询就不会发生。导致某些键值一直逍遥法外,可以使用的内存空间却越来越少。

=> 内存淘汰策略: 8种。

  • noeviction:返回错误,不会删除任何键值
  • allkeys-lru:使用LRU算法删除最近最少使用的键值
  • volatile-lru:使用LRU算法从设置了过期时间的键集合中删除最近最少使用的键值
  • allkeys-random:从所有key随机删除
  • volatile-random:从设置了过期时间的键的集合中随机删除
  • volatile-ttl:从设置了过期时间的键中删除剩余时间最短的键
  • volatile-lfu:从配置了过期时间的键中删除使用频率最少的键
  • allkeys-lfu:从所有键中删除使用频率最少的键

3、缓存穿透 && 布隆过滤器

缓存穿透:某些请求,查询的数据不存在,也没法缓存,导致同样的请求来了每次都要去让MySQL白忙活一场。

Redis缓存那些事儿

 

 

=> 解决方法:将不会有结果的查询请求挡一下,不去查库。

=> 布隆过滤器 BloomFilter:

  擅长从超大的数据集中快速告诉你查找的数据存不存在(悄悄告诉你,我的这位朋友有一点不靠谱,它告诉你存在的话不能全信,其实有可能是不存在的,不过它他要是告诉你不存在的话,那就一定不存在)。

4、缓存击穿 && 缓存雪崩

=> 缓存击穿:刚刚有一个热点数据到了过期时间,被删掉了,不巧的是随后就有对这个数据的大量查询请求来了,由于已经被删,所以请求都发到数据库。

Redis缓存那些事儿

 

=>缓存雪崩:一大批数据几乎同时过了有效期,然后又发生了很多对这些数据的请求,所以比起上一次这规模更大了。

Redis缓存那些事儿

 

=> 解决方案:在应用程序中,把键值的过期时间随机一下(设置的均匀一些,至少别让大量数据集体失效),还设置了热点数据永不过期。

 

程序员灯塔
转载请注明原文链接:Redis缓存那些事儿
喜欢 (0)