缓存系统的实现原理
来源:互联网 发布:怎么破解软件密码 编辑:程序博客网 时间:2024/05/21 20:24
今天给大家分享一个小知识,那就是如何实现一个简单的缓存系统。
先把代码贴上
import java.util.HashMap;import java.util.Map;public class CacheSystem {private Map<String, Object> cache=new HashMap<>();public static void main(String[] args) {// TODO Auto-generated method stub}public synchronized Object getData(String key){//从缓存中查询数据Object result=cache.get(key);//缓存中没有则从数据库中查询if (result==null) {result=queryFromDB();//查询出的数据也要存入缓存if (result!=null) {cache.put(key, result);}}//返回查询的数据return result;}private Object queryFromDB() {// TODO Auto-generated method stub//此处代码不作实现return null;}}由于是演示,此处并没有给出从数据库中查询部分的代码。在上述代码中,因为方法getData()加了synchronized关键字,导致当前的的查询线程会阻塞其余查询线程的执行,因此有必要加上读写锁来提高查询性能。
优化后的代码如下:
import java.util.HashMap;import java.util.Map;import java.util.concurrent.locks.ReadWriteLock;import java.util.concurrent.locks.ReentrantReadWriteLock;public class CacheSystem {private Map<String, Object> cache=new HashMap<>();//添加读写锁private ReadWriteLock lock=new ReentrantReadWriteLock();public static void main(String[] args) {// TODO Auto-generated method stub}public Object getData(String key){lock.readLock().lock();Object result=null;try {//从缓存中查询数据result=cache.get(key);//缓存中没有则从数据库中查询if (result==null) {result=queryFromDB();//查询出的数据写入缓存,因此清读写,加写锁lock.readLock().unlock();lock.writeLock().lock();try {//若存在多个写锁,只写一次即可if (cache.get(key)==null) {if (result!=null) {cache.put(key, result);}}} finally {// TODO: handle finally clauselock.writeLock().unlock();}//写操作完成,恢复读锁lock.readLock().lock();}} catch(Exception e){e.printStackTrace();System.out.println("异常发生");}finally {// TODO: handle finally clauselock.readLock().unlock();}//返回查询的数据return result;}private Object queryFromDB() {// TODO Auto-generated method stub//此处代码不作实现return null;}}本人水平有限,如有错误,欢迎大家批评指正,本人将十分感激。
阅读全文
0 0
- 缓存系统的实现原理
- Memcache缓存系统原理
- 码农小汪-缓存的原理 读写锁的实现缓存
- CI框架缓存的实现原理
- Message缓存池的实现原理
- mybatis的一级缓存实现原理
- LruCache的实现原理(图片三级缓存)
- java 缓存机制 实现的原理?
- http协议学习-缓存的实现原理
- Android中内存缓存和文件缓存的实现原理
- Android中内存缓存和文件缓存的实现原理
- 浏览器缓存实现原理
- php缓存实现原理
- 浏览器缓存实现原理
- 浏览器缓存实现原理
- PHP缓存实现原理
- 浏览器缓存实现原理
- 系统调用的实现原理
- 杭电oj1019多个数的公倍数
- word设置正文默认字体
- 1011 World Cup Betting (20)
- java中几种简单排序
- Axure产品原型设计工具
- 缓存系统的实现原理
- Hibernate需要的10个jar包
- P2P中DHT网络介绍
- java中 遍历 map 的 四种方法
- OA系统审批邮件业务规则整理
- 深入理解JVM(四)——对象内存的分配策略
- c++ 宏要点;
- Linux文件管理常用命令
- Oracle常用批量操作