缓存穿透-访问key未在DB查询到值,也将空值写进缓存
Windows启动Redis:redis
redis-server.exe redis.windows.confwindows
redis-cli.exe -h 127.0.0.1 -p 6379缓存
概念
访问一个不存在的key,缓存不起做用,请求会穿透到DB,流量大时DB会挂掉。spa
解决方案
- 采用布隆过滤器,使用一个足够大的bitmap,用于存储可能访问的key,不存在的key直接被过滤;
- 访问key未在DB查询到值,也将空值写进缓存,但能够设置较短过时时间。
缓存雪崩-设置过时时间
概念
大量的key设置了相同的过时时间,致使在缓存在同一时刻所有失效,形成瞬时DB请求量大、压力骤增,引发雪崩。server
解决方案
能够给缓存设置过时时间时加上一个随机值时间,使得每一个key的过时时间分布开来,不会集中在同一时刻失效。blog
缓存击穿-在访问key以前,采用SETNX(set if not exists)来设置另外一个短时间key来锁住当前key的访问
概念
一个存在的key,在缓存过时的一刻,同时有大量的请求,这些请求都会击穿到DB,形成瞬时DB请求量大、压力骤增。it
解决方案
在访问key以前,采用SETNX(set if not exists)来设置另外一个短时间key来锁住当前key的访问,访问结束再删除该短时间key。io
