缓存问题解决方案&批量查询优化
2023-09-27 14:19:50 时间
缓存问题解决方案&批量查询优化
1 缓存问题解决方案
1.1 缓存穿透
缓存没有,数据库也没有,业务系统访问压根就不存在的数据,导致每次访问都将压力挂到了数据库服务器上导致服务崩溃,一般来说都是恶意访问导致
解决方案:
1.缓存空数据
第一,空值做了缓存,意味着缓存层中存了更多的键,需要更多的内存空间(如果是攻击,问题更严重),比较有效的方法是针对这类数据设置一个较短的过期时间,让其自动剔除。
第二,缓存层和存储层的数据会有一段时间窗口的不一致,可能会对业务有一定影响。例如过期时间设置为 5 分钟,如果此时存储层添加了这个数据,那此段时间就会出现缓存层和存储层数据的不一致,此时可以利用消息系统或者其他方式清除掉缓存层中的空对象。
2.BloomFilter(布隆过滤器):在缓存之前再加一道屏障,里面存储目前redis数据库中存在的所有key。
在讲布隆过滤器之前我们思考下:
有些同学可能会在想,我使用集合行不行呢:比如在海量元素中(例如 10 亿无序、不定长、不重复)快速 判断一个元素是否存在?好,我们最简单的想法就是把这么多数据放到数据结构里去,比如List、Map、Tree,一搜不就出来了吗,比如map.get(),我们假设一个元素1个字节的字段,10亿的数据大概需要900G的内存空间,这个对于普通的服务器来说是承受不了的,当然面试官也不希望听到你这个答案,因为太笨了吧,我们肯定是要用一种好的方法,巧妙的方法来解决,这里引入一种节省空间的数据结构 —位
相关文章
- Unity & CityEngine 根据地图中建筑矢量数据批量建模
- Mysql批量更新的一个坑-&allowMultiQueries=true允许批量更新
- <二代測序> 批量下载 NCBI sra 文件
- 我的Android进阶之旅------>Android关于Activity管理的一个简单封装
- MySQL服务器端&客户端常见错误
- shell 重定向 1> 2> &>
- idea把项目模块添加到maven管理 & Structure中添加模块【我】
- RabbitMQ之Consumer消费模式(Push & Pull)
- 我的Android进阶之旅------>解决AES加密报错:java.security.InvalidKeyException: Unsupported key size: 18 bytes
- 我的Android进阶之旅------>Android利用温度传感器实现带动画效果的电子温度计
- Java语言实现简单FTP软件------>辅助功能模块FTP站点管理的实现(十二)
- 我的Android进阶之旅------>Android中使用HTML作布局文件以及调用Javascript