小胖博客

记录开发和使用中的点滴

redis杂谈

最近有时候会使用redis处理一些功能,所以最近遇到了一些坑点,然后自己做了一些总结在这里分享一下。

缓存失效,在查询一个一定不存在的数据的时候,由于缓存不命中的时候被动写,然而存储层查不到该数据也不会写入缓存,这样相当于绕开了缓存,缓存的存在显得没有意义。当流量大的时候DB就可能挂掉,所以这个点需要关注。

缓存失效问题,我一般会用缓存空来处理,当然设置空的缓存过期时间应该是较短的,建议是在5分钟之内。

缓存雪崩,这个其实很容易理解,但这个问题新手很容易犯。原因是设置缓存的时候,过期时间没有进行散列处理。大量的缓存同一时间失效的时候,请求就全部转发到DB了,DB就有可能压力过大而崩掉。

解决缓存雪崩也比较容易,我的处理方式也比较简单,直接在失效时间的基础上加一个随机值,就是让失效时间线有个坡度或是说不在那么平滑,这样就很难引发缓存大规模失效的而导致的问题。

缓存击穿,击穿很形象,就是某个缓存过期时,正好来了对于这个缓存的大量请求,简而言之就是针对单个key有大量的并发的请求,请求发现key已经过期就大量的涌入DB,那DB就很可能挂掉。

缓存击穿可以使用互斥锁来解决,在缓存失效时,不是立即去load db,而是去做一些set mutex key的操作,操作返回成功,则load db并load redis。

发表评论

电子邮件地址不会被公开。