博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用CountDownLatch和AtomicReference解决cache失效大并发透传DB的思路
阅读量:4214 次
发布时间:2019-05-26

本文共 1482 字,大约阅读时间需要 4 分钟。

  cache失效大并发透传DB,在TimYang的一篇博文 介绍过。提到了两种方案。其中第一方案的sleep时长不好把握。
if (memcache.get(key) == null) {    // 3 min timeout to avoid mutex holder crash    if (memcache.add(key_mutex, 3 * 60 * 1000) == true) {        value = db.get(key);        memcache.set(key, value);        memcache.delete(key_mutex);    } else {        sleep(50);        retry();    }}
我们假设在单机cache中解决这个问题,不涉及分布式锁。可不可以做到用notify代替sleep。memcached的add操作可以演绎成java的cas操作,cas成功的线程从db中取数据,失败的线程进入wait状态,当成功的线程设置cache以后,notify所有等待的线程,他们就可以从cache中取数据了。那么如何实现notify呢?首先我们想到了CountDownLatch,基本代码如下:
  
CountDownLatch latch = new CountDownLatch(1);            if(_reference.compareAndSet(null, latch)){                // Fetch from DB                //if done                 System.out.println("Thread:" + Thread.currentThread().getName() +" I'm here  Get DB");                 cache.put("a", "1");                _reference.get().countDown();                _reference.set(null);                            }else{                try {                    CountDownLatch la = _reference.get();                    System.out.println("Thread:" + Thread.currentThread().getName() +" I'm here Wait  Result" + cache.get("a"));                    la.await();                    System.out.println("Thread:" + Thread.currentThread().getName() +" I'm here Get   Result" + cache.get("a"));                    //something to do                } catch (InterruptedException e) {                    e.printStackTrace();                }            }
 
 

转载地址:http://sqdmi.baihongyu.com/

你可能感兴趣的文章
关于mongodb的 数组分组 array group
查看>>
MongoDB新的数据统计框架介绍
查看>>
mongodb 增加全文检索索引
查看>>
mysql数据库主从同步的问题解决方法
查看>>
QC数据库表结构
查看>>
测试工具厂商的编程语言什么时候“退休”?
查看>>
资源监控工具 - Hyperic HQ
查看>>
LoadRunner中Concurrent与Simultaneous的区别
查看>>
SiteScope - Agentless监控
查看>>
质量度量分析与测试技术 培训大纲
查看>>
欢迎加入【亿能测试快讯】邮件列表!
查看>>
为什么我们的自动化测试“要”这么难
查看>>
LoadRunner性能脚本开发实战训练
查看>>
测试之途,前途?钱途?图何?
查看>>
adb常用命令
查看>>
通过LR监控Linux服务器性能
查看>>
通过FTP服务的winsockes录制脚本
查看>>
LRwinsocket协议测试AAA服务器
查看>>
Net远程管理实验
查看>>
反病毒专家谈虚拟机技术 面临两大技术难题
查看>>