Redis企业级解决方案

Redis企业级解决方案

一、缓存预热
前言:
在我们服务器刚开始启动时,服务器缓存空间中是还没有数据的,这时候用户如果访问,是查询不到任何数据的。(毕竟Redis数据是在内存上,而不是磁盘上的)。
概念:
缓存预热就是系统启动前,提前将一部分数据(访问量较多的数据)加载到缓存系统,使得用户在系统刚启动时也能查询到被预热的缓存数据。
解决方案:
日常例行统计数据访问记录,统计访问频度较高的热点数据。
利用LRU删除策略,构建数据留存队列
将统计结果中的数据分类,根据级别,redis优先加载热度高的数据。

二、缓存雪崩

造成原因:
短时间内,redis中大量的key集中过期,这个周期内,用户访问数据,redis未命中,导致redis集中向数据库获取数据。而数据库性能问题,无法及时处理,导致redis中大量请求被积压,出现超时现象。而后越来越多请求导致数据库与redis崩溃,这就是缓存雪崩。

解决方案:
1、更多页面静态化处理,减少走缓存,数据库获取数据。
2、构建多级缓存结构,比如在redis和数据库中再加一层ehcache缓存
3、优化数据库的一些耗时业务,提高效率
4、灾难级预警,实时监控redis服务器性能的指标,CUP占用,内存容量,查询平均响应时间,线程数等等
5、限流。对访问量进行限流,限制一部分用户的访问,降低压力
6、LRU与LFU切换,尽量让常使用的继续保留在缓存中
7、数据有效期的进行错峰,尽量不要让数据在同一刻过期,让其过期时间错开。
8、超热数据设置为永久性
9、定期维护,查询快过期key的数据访问量,如果访问量很大,延长过期时间

三、缓存击穿

造成原因
某个key过期后,该key一时间访问量巨大,redis无法命中,然后redis大量集中访问数据库,造成崩溃。

解决方法:
1、对预先知道会有激增访问量的数据,延长其有效期
2、监控访问量,如果自然激增数据,可以适当延长过期时间

四、缓存穿透

造成原因:
redis中大面积出现未命中,出现非正常url访问。如有人故意访问不存在的数据。导致未命中

解决方案:
1、如果发现有人恶意攻击,则将查询为null的数据缓存,且设置一个短时限(不超过5分钟)。
2、布隆过滤器
3、实施监控。实时监测redis的命中率与null数据的占比,如果发现命中率偏差较大,访问null数据明显较多的用户,将其拉入黑名单

ps:另附 布隆过滤器 说明
(布隆过滤器底层)
把所有可能存在的请求的值都存放在布隆过滤器中,当⽤户请求过来,先判断⽤户发来的请求的值是否存在于布隆过滤器中。不存在的话,直接返回请求参数错误信息给客户端,存在的话才会⾛后续的流程

但是,需要注意的是布隆过滤器可能会存在误判的情况。总结来说就是: 布隆过滤器说某个元素存在,⼩概率会误判。布隆过滤器说某个元素不在,那么这个元素⼀定不在。

为什么会出现误判的情况呢?

我们先来看⼀下,当⼀个元素加⼊布隆过滤器中的时候,会进行哪些操作:

  1. 使用布隆过滤器中的哈希函数对元素值进行计算,得到哈希值(有几个哈希函数得到几个哈希值)。
  2. 根据得到的哈希值,在位数组中把对应下标的值置为 1。
    我们再来看⼀下,当我们需要判断⼀个元素是否存在于布隆过滤器的时候,会进行哪些操作:
  3. 对给定元素再次进行相同的哈希计算;
  4. 得到值之后判断位数组中的这个元素位置是否为 1,如果值为 1,那么说明这个值在布隆过滤器中,如果这个值不为 1,说明该元素不在布隆过滤器中。
    然后,⼀定会出现这样⼀种情况:不同的字符串可能哈希出来的位置相同。 (可以适当增加位数组大小或者调整我们的哈希函数来降低概率)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值