Redis缓存穿透是指当查询一个不存在的key时,缓存不会命中,请求会直接落到数据库上,这种查询方式会频繁地对数据库进行访问,从而导致数据库崩溃。
这种情况的出现是因为缓存中没有该数据,而黑客通过修改查询参数,不断地尝试去查询不存在的数据,实现攻击,从而导致缓存穿透。
Redis缓存击穿是什么
Redis缓存击穿是指当某个热点key失效时,大量的请求会直接落到数据库上,从而导致数据库崩溃。
这种情况的出现是因为当多个请求同时请求一个热点key,而该key失效时,大量的请求直接落到了数据库上,导致数据库直接崩溃。
如何防止Redis缓存穿透和缓存击穿
为了避免缓存穿透和缓存击穿的出现,我们需要采取一些措施来保证我们的系统能够正常地工作。
1. 缓存空值
当一个查询请求返回的是空值时,我们应该创建一个对应的key,该key的超时时间较短,来防止重复的调用。
2. 布隆过滤器
布隆过滤器可以快速地判断查询的key是否在缓存中不存在,从而避免缓存穿透。
3. 分布式锁
采用分布式锁的方式来防止多个请求同时请求同一个热点的key,从而避免缓存击穿。
以上方法可以在一定程度上避免缓存穿透和缓存击穿的问题,提高系统的并发能力和性能。