群友面试时,面试官问了这么一个题,让他说一下redis的热点key。
作为一个菜鸟,我虽然不是第一次听到这个名词,但我是第一次知道这是什么意思
( 0 x 0 )
我又在网上查了一些资料,对它有了以下的理解:
1.redis热点key是指请求次数过多,频率过高,又过于集中的一些key。
2.它的危害在于,当请求太过集中,会占用大量的流量,会导致其他服务难以进行。
或者热点key的有效期过了,key失效,造成缓存击穿,大量请求落在数据库上,有可能击垮数据库,导致服务器崩溃。
如何解决呢?网上的资料我是没看懂,不过脑海里出现了自己的一个解决办法,可以解决热点数据不多的情况。
那就是把它们缓存到jvm里⌯'ㅅ'⌯
具体这样做:
创建一个Map1用来保存热点数据
客户端每一次请求的key都用Map保存下来,value是当前key在规定时间内被访问的次数。定时把Map2中的数据导入到最大优先队列中,清空Map2重新计数。
从优先队列中取前n个热key,把它们和对应的数据更新到Map1上。
以上做成定时任务按照需要定时跑一遍就行啦。