Skip to content

Latest commit

 

History

History
37 lines (15 loc) · 2.59 KB

HotKey.md

File metadata and controls

37 lines (15 loc) · 2.59 KB

Redis热点Key

在一定时间内,被频繁访问的key称为 热点key 。比如突发性新闻,微博上常见的热搜新闻,引起千千万万人短时间内浏览;在线商城大促活动,消费者比较关注的商品突然降价,引起成千上万消费者点击、购买。热点key会导致流量过于集中,缓存服务器的压力骤然上升,如果超出物理机器的承载能力,则缓存不可用,进而可能诱发缓存击穿、缓存雪崩的问题。

缓存击穿

解决方案


一、读写分离

读写分离

通过将数据的写入与读取分散去各个节点,通过数据复制到达各个节点数据一致性的目的。在写少的情形下,master节点写入数据,在读取请求压力大的情形下,配置多个slave节点,数据横向同步(拓扑结构)。结合Redis Sentinel (或其他高可用技术)实现缓存节点的高可用。

二、阿里云云数据库 Redis 版解决方案

阿里云云数据库 Redis 版解决方案

在热点 Key 的处理上主要分为写入跟读取两种形式,在数据写入过程当 SLB 收到数据 key1 并将其通过某一个 Proxy 写入一个 Redis,完成数据的写入。假若经过后端热点模块计算发现 key1 成为热点 key 后, Proxy 会将该热点进行缓存,当下次客户端再进行访问 key1 时,可以不经 Redis。最后由于 Proxy 是可以水平扩充的,因此可以任意增强热点数据的访问能力。

三、热点key不过期

如果key存在,那么不要设置key过期时间,如果key对应的数据不可用(比如删除了),那么从缓存中删除key。从请求来说,如果在缓存找到对应的key,表明该key及其value就是用户需要的数据。如果缓存中不存在对应的key,表明无对应的数据,返回空值。比如微博发来爆料某明星文章,短时间内访问量直接上升,如果key不过期,那么请求永远命中缓存。只有当文章被删除的时候,才从缓存中删除对应的key,如果此时还有请求访问,在缓存中查无数据时,直接返回空值,表明文章被删除。当然也可以更新key对应的value值,返回想要表达的value。

参考资料:

阿里云:热点 Key 问题的发现与解决