Redis
1、缓存穿透:
查询了一个不存在的数据,由于无法命中缓存,导致每次都会到数据库去查询。因为一般查询结果为空都不会写入缓存,使用每次这个不存在的数据的请求都会到存储层查询,失去看缓存的意义。流量大的情况下,数据库就扛不住了。用不存在的key频繁查询就可以攻击我们的系统。
解决办法:查询结果为空的也给他缓存,但是失效时间放短一些。
2、缓存击穿:
当热点的数据被访问时,正好失效,过期时间到了,那么数据查询都到了数据库
解决办法:加锁(redisson),100万请求同时查询一个缓存没有的key,先放行一个,查询结束后放到缓存
3、缓存雪崩:
设置缓存时,多个key使用了相同的过期时间导致同一时间过期,请求全部转发到数据库
解决办法:原有的失效时间加随机值,比如1-5分钟
分布式锁:
与分布式锁对应的有线程锁(方法和代码块上锁),
由来:分布式系统,多进程在不同机器上,原本的单机并发控制锁策略失效,需要控制多进程对资源的访问处理。
使用redis实现
评论区