缓存空对象的使用
来源:互联网 发布:淘宝放心淘是什么 编辑:程序博客网 时间:2024/05/20 05:54
缓存空对象是一种用空间换其他资源(时间、IO、CPU)的技术,可以有效的防止数据库被击穿,并一度程序上减少恶意攻击(特别是将Cache做到client本地)。
普通使用缓存的场景是,将请求从数据库中读出数据返回的时候,将读出的正常数据写到缓存。而空缓存的意思是,如果请求在数据库中没有命中,依然在缓存中放入一个空缓存对象,这样的话,以后请求过来时访问缓存就会命中这个空缓存,它也就明白了自己的要查的数据不存在,从而避免访问数据库。
普通使用缓存的代码,例:
public class UserManager { UserDAO userDAO; LocalCache localCache; public UserDO getUser(String userNick) { UserDO user = (UserDO)localCache.get(userNick); if(user == null) { user = userDAO.getUser(userNick); if(user != null) { localCache.put(userNick,user); } } return user; } }
使用空缓存对象的示例:
public class NullValueResultDO implements Serializable{ private static final long serialVersionUID = -6550539547145486005L;}public class UserManager { UserDAO userDAO; LocalCache localCache; public UserDO getUser(String userNick) { Object object = localCache.get(userNick); if(object != null) { if(object instanceof NullValueResultDO) { return null; } return (UserDO)object; } else { User user = userDAO.getUser(userNick); if(user != null) { localCache.put(userNick,user); } else { localCache.put(userNick, new NullValueResultDO()); } return user; } } }
缓存空对象可没想象中的那么尽善尽美,对于大量分散的失效的访问会造成缓存容量的膨胀,这可算是一种内存攻击,即使缓存采用LRU实现,也会挤压其他正常数据的空间,所以对于缓存空对象要慎用。缓存空对象最适用于集中地无效数据高频度访问的状况,这种状况可能最适用于内部服务的应用,这种服务应用的请求无效数据的较少,但频度较高。
0 0
- 缓存空对象的使用
- ASP.NET 缓存对象的使用
- 空对象和空的对象
- 2、对象的使用方法, 多个对象的生成及使用, 匿名对象, 空对象
- java空对象与空的区别
- 怎样清空一个对象(来自于缓存)?
- C++使用string.getline()和cin混合输入的问题(cin清空缓存)
- java对象的缓存
- 清空浏览器客户端的缓存
- 清空浏览器客户端的缓存
- 清空弹出窗口的缓存
- 【c语言】清空缓存 的问题
- 清空Linux系统的缓存
- mysql清空缓存的命令
- iphone 如何清空UIWebView的缓存
- 【c语言】清空缓存 的问题
- 清空linux的DNS缓存
- stringStream清空缓存的方法
- 我所知道的Ribbon库
- unrecognized selector sent to instance出现的原因和解决方案
- 机器学习-百度笔试题
- 从设计层面看abstract class和interface
- WinCE SD模块结构
- 缓存空对象的使用
- WebKit参考学习资料
- [转] Android Activity的生命周期
- 北大POJ题库使用指南
- php检测文件编码的方法示例
- (一)ZigBee 技术简介
- 手把手教你在STM32下移植UCGUI(基于正点原子的MINI开发板)
- 12.I/O超时设置方法
- Android数据之SQLiteDatabse储存(一)