知识点4:redis常见问题

    •缓存穿透:每个缓存都有一个key,当缓存中有这个key,不需要到数据库去查询,如果调用方查询提供的一个不存在的key,每次都需要与数据库查询数据,数据库压力变大,这样缓存就失去了作用,这种情况叫缓存穿透。
    •解决方案:
    采用布隆过滤器,布隆过滤器可以检索一个数据是否在集合中。如果在在经过缓存或数据库,不在直接返回结果不与数据库交互

    •缓存雪崩:在某一时刻,大量缓存同时失效,导致所有的请求都去查询数据库。导致数据库压力过大,挂掉的情况叫雪崩。
    •解决方案:
    1、高设缓存时间(随机几分钟等),避免同时失效
    2、服务限流:限制访问次数
    3、对数据库查询的地方加锁控制(分步式锁),不让同一时间都去查询数据库。

    缓存击穿
    缓存击穿是指缓存中没有但数据库中有的数据(一般是缓存时间到期),由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力
    解决方案:
    A:设置热点数据永远不过期。
    B:加互斥锁,互斥锁参考代码如下

    bigkeys
    hotkeys
    知识点4:缓存hotkeys热键:
    hotkeys是在Redis实例中某些key的操作频次远高于其他key,那么这些被频繁操作的热点key我们就称之为
    hotkeys.
    hotkey危害、将面临以下挑战:
    A、请求分配不均,存在hotkeys的节点面临较大的访问压力
    B、缓存击穿,hotkeys过期时,大量请求将直接导向DB
    C、缓存雪崩,击垮存在hotkeys的节点,导致不能正常提供服务
    Redis4. 0之后客户端提供了hotkeys发现的命令,我们可以通过 redis-cli — hotkeys 来发现hotkeys;
    首先针对hotkeys过期,面临的重建问题,可以使用以下有效手段来尽可能的减少key重建的过程:
    解决方案:
    A、设置互斥锁,保证由一个线程完成热点key的重建,避免大量的请求直接导向DB
    B、“永不过期”,将hotkeys的过期时间设置较长的时间,或者永不过期;等待hotkeys触发的热点事件过去后再考虑过期。