缓存穿透
缓存穿透是指客户端请求的数据在缓存中和数据看中都不存在,这样缓存就用永远不会生效,这些请求都会打到数据库中。
缓存空对象
原理:在缓存和数据库中如果都不存在的情况下,将一个控制写入缓存,在下次查询的时候就不会存在缓存击穿的问题了。同时也用设置有效时长。
优点:实现简单,维护方便
缺点:额外内存消耗 可能造成短期的不一致
、
布隆过略器
优点:内存占用较少,没有多余的key
缺点:实现复杂 存在误判可能
布隆过略器:是一系列的hash函数+bitmap实现的。本质是一个很长的位数组和一系列的随机映射哈希函数
通过将hash计算把数据计算出hashCode值之后存入bitmap中,而hashcode可能出现重复,所以只能说明在hashCode存在情况下,只能说明字符串有可能存在于集合中,因此你通过布隆过滤器只能实现的功能为:能够确认一个字符不存在于集合中,但是无法确认一个字符串存在于集合中。有可能因为hashCode相同存在误判存在的可能。
解决缓存穿透的方案有:
缓存空值
布隆过略
增强id的复杂度,避免被猜测id规律
做好数据的格式校验
加强用户权限校验
做好热点参数的限流