缓存常见问题
- 缓存雪崩
- 缓存穿透
- 缓存占用过多内存
缓存雪崩
缓存雪崩指的是在某一个时间点里边, 有大量的Key过期, 然后引起大量请求同时访问到数据库
针对这个问题, 我们可以把Key的过期时间随机化或等差划分, 反正就是要消除掉大量缓存同时失效的情况.
缓存穿透
缓存穿透指的是访问到了缓存当中不存在的数据, 在缓存里边拿不到数据就会从数据库里边取, 如果并发数量大, 也会造成大量请求直接访问到数据库的现象
- 如果请求访问的都是同一条缓存数据, 可以设置访问互斥锁, 只允许第一个请求访问数据库, 其他请求则添加到队列, 等第一个请求从数据库里拿到数据并更新缓存后, 队列里的请求直接访问缓存数据
- 如果请求访问的都是不同的数据, 且当数据库里查询不到数据后并不会更新缓存, 那么可以往缓存里边设置空对象, 简单直接, 碰到查询结果为空的键, 放一个空值在缓存中, 次再访问就立刻知道这个键无效, 而不会再次访问数据库
缓存占用过多内存
查看redis里各Key占用内存