缓存学习
2017-01-21 22:34
134 查看
缓存学习
缓存学习常见的缓存设计
第一种
第二种
第三种
缓存穿透
什么是缓存穿透
如何避免缓存穿透
缓存雪崩
什么是缓存雪崩
如何避免缓存雪崩
缓存数据清理策略
缓存算法
常见的缓存设计
第一种
读操作写操作
第二种
左边是读操作,右边是写操作。当发生读操作时,如果没有目标没有进入缓存,或者已经失效,这个时候由缓存自己去控制区数据源读取数据并set回缓存,对使用缓存的应用是透明的,应用不用关心。
当发生写操作时,如果没在缓存,那么直接去写缓存,如果存在缓存,那么写完缓存再同步写下级存储。
这样做的有这么的一些好处,应用不再需要去关心缓存与下层存储结构的关系。大大地简化了开发。
非常容易扩展,象一些缓存数据自动回源呀,突然热点防穿透呀,都可以在上面的基础上进行开发。
上面这种方案应该友框架实现,如果缓存服务实现这种方案,耦合性太高
第三种
该方案是异步方案,第三种跟第二种非常的相似,主要区别就是不再同步写数据库,而是交给缓存定时将更新地数据写入持久存储。这也是操作系统的pageCache的算法。因为是异步刷新,意味着可以批量刷新,所以速度快得飞起,但同时也会因为断电,crush之类的造成数据的丢失,所以选择这种方式需要谨慎。缓存穿透
什么是缓存穿透
当数据库没有该数据或者缓存数据过期失效的时候,客户端会频繁的访问后台数据,给后端服务造成压力.如何避免缓存穿透
如果数据库没有数据,可以直接在缓存中缓存一个默认值,这种做法比较粗暴.缓存的key要符合某种规则,如果客户端请求不符合规则就直接过滤掉请求,这样也能缓存后端服务的压力
采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的BitSet中,不存在的数据将会被拦截掉,从而避免了对底层存储系统的查询压力
缓存雪崩
什么是缓存雪崩
当缓存实效的时候或者缓存服务器重启的时候,请求会给后端服务(数据库)带来较大压力.如何避免缓存雪崩
访问后端服务可以通过限制qps以及使用队列限流来减轻后端服务的压力.缓存服务避免单点失效,服务A失效,客户端可以访问服务B.
分析用户的行为,尽量将数据失效的时间设置的均匀.
缓存数据清理策略
定时清理: 启动一个守护线程,定期去清楚已经过期的键值(不是全量删除,如果数据量比较大每次只会清楚一部分数据)主动清理: 客户端在获取键值的时候,服务会判断该值是否过期,如果过期就返回给客户端null。
缓存算法
相关文章推荐
- 100 个最佳 Ubuntu 应用(中)
- 在 AppImage、Flathub 和 Snapcraft 平台上搜索 Linux 应用
- 比容器快 10-20 倍的 unikernel 应用
- web性能优化之:no-cache与must-revalidate深入探究
- 页面缓存:内存和文件之间的那些事
- 24 个必备的 Linux 应用程序
- 注册表趣味应用小集
- 远程控制技术的应用
- 路由器访问列表的应用
- xDSL技术及其应用
- 基于XML的桌面应用
- SQL Server 2008 R2 应用及多服务器管理
- 浅析SQL Server中的执行计划缓存(上)
- Enterprise Library for .NET Framework 2.0缓存使用实例
- PowerShell中编程清空IE缓存方法
- PowerShell中使用.NET将程序集加入全局程序集缓存
- C#中缓存的基本用法总结
- mysql缓冲和缓存设置详解
- Node.js 应用跑得更快 10 个技巧
- Android实现图片异步加载并缓存到本地