redis热点问题和热点发现

Redis缓存系列:你所不知道的Redis热点问题以及如何发现热点

前言
热点就是访问量特别大所形成的热点数据。
因此需要缓存,于是使用了redis缓存。

缓存化
使用了redis缓存会有以下一个问题:
1、热点数据过期,会导致大量请求访问DB,造成DB崩溃
解决方案:
1、使用分布式锁,只允许一个线程访问DB,其他阻塞
2、设置成永不过期,但是需要进行预热处理

以上两个方案还存在一个问题:
1、redis达到负载时,也会崩溃
解决方案:
1、可以使用redis集群
但是redis集群set和get都是走的主redis,从redis只是为了高可用存在,即使请求打到从redis,从redis也会转发给主redis,而其他的主redis只是作为数据扩容用。
因此可以实现读写分离,即在从redis加上readonly命令,这样从redis就不会转发了,可以提供读请求服务。
但是redis官方不推荐,因此可以使用第2种方案。
2、本地缓存,这是多级缓存方案,把缓存前置到web应用层
web服务会把热点数据存储在本地缓存,并且因为热点数据不会很多,所以保存在本地缓存是没有问题的。

热点发现
1、人为标记,预测某些数据会成为热点,打个标记。web应用根据这个标记把这些数据保存到本地缓存中,但是这不靠谱,因此考虑第22、系统预测,
2.1、可以使用访问日志来推算热点数据
2.2、也可以使用redis的lfu(最近最少使用)机制
只要把redis内存淘汰机制设置为allkeys-lfu或者volatile-lfu方式,再执行redis-cli --hotkeys命令,即可返回访问频率高的key,并从高到底的排序。

猜你喜欢

转载自blog.csdn.net/weixin_43871678/article/details/115113156