设计一个缓存器 ReadLock提高性能

Posted 安静

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计一个缓存器 ReadLock提高性能相关的知识,希望对你有一定的参考价值。

/**
 * 
 * @描述: 设计一个缓存器 ReadLock提高性能.
 * @作者: Wnj .
 * @创建时间: 2017年5月16日 .
 * @版本: 1.0 .
 */
public class CacheDemo {
    
    private Map<String, Object> cache = new HashMap<String, Object>();
    
    public static void main(String[] args) {
        
    }
    
    private ReadWriteLock rwl = new ReentrantReadWriteLock();
    
    /**
     * 检查是有对应key的数据,有则返回,没有则从DB中查询
     * <功能详细描述>
     * @param key
     * @return
     */
    public Object getData(String key) {
        //上读锁
        rwl.readLock().lock();
        Object value = null;
        try {
            value = cache.get(key);
            if (value == null) {
                //发现要写的时候,释放读锁,不让别人读了
                rwl.readLock().unlock();
                //上写锁,当有三个线程,第一个线程lock之后,其它线程就锁不了了,或者说等其它两个读(写)的线程,读(写)完,lock才能锁上去
                rwl.writeLock().lock();
                
                //第之前一个写线程释放后,第二个线程获取写lock,要重新判断一下是否需要再写(读),具体可参考jdk文档
                try {
                    if (value == null) {
                        value = "aaaa";//查询数据库存
                    }
                }
                finally {
                    //释放写锁
                    rwl.writeLock().unlock();
                }
                //还原成读锁
                rwl.readLock().lock();
            }
        }
        finally {
            rwl.readLock().unlock();
        }
        return value;
    }
}

 

以上是关于设计一个缓存器 ReadLock提高性能的主要内容,如果未能解决你的问题,请参考以下文章

多级缓存:架构设计中提升性能最直接的方式

如何编写最能利用 CPU 缓存来提高性能的代码?

多级缓存:架构设计中提升性能最直接的方式

如何使用缓存技术提高性能

如何提高查询性能?

Kong入门指南 - 通过代理缓存提高性能