`
xiemingmei
  • 浏览: 210513 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论
阅读更多
双缓存防止缓存雪崩,原理不难。 并发量非常大的WEB应用可以用上。
http://www.oschina.net/question/12_26514

存在:key1: time,key2: time+n分
原理:get时,如果key1失效,则取key2返回,同时启动线程去刷新key1、key2。
有多个线程来刷新,则需要并发控制,只让一个线程访问数据库。

分布式系统怎么来并发控制? 可用memcached的add方法,如下:

			/**防同ID重复提交*/
			String preventKey = "unique_id_" + id;
			boolean isSuccess = xClient.add(preventKey, 3*60, "Y"); 
			if (!isSuccess){
				throw new PayException("请勿重复提交该订单");
			}



如果key1、key2都是失效了,则需要启动一个线程去刷新缓存,
然后取缓存逻辑的方法,则需要sleep(time)一下,然后重取, 重试3-5次应该足够了。

伪代码如下:
//重试3次
for(int i=0;i<3;i++) {

   value = get(key1)
   if (value!=null) {
      return value;
    }
    
    if(获取lock)  {
        启动刷新key1、key2的线程;          
    }

    value = get(key2) 
    if (value != null) {
      return value;
    }

    sleep(200); 
}


分享到:
评论

相关推荐

    Redis缓存穿透,缓存击穿,缓存雪崩面试题解析

    Redis缓存穿透、缓存击穿、缓存雪崩面试题解析 Redis缓存穿透、缓存击穿、缓存雪崩是Redis中的三个重要概念,它们都是Redis缓存机制中可能出现的错误或问题。下面我们将详细解析这三个概念,并提供相应的解决方案。...

    Redis扩展:缓存雪崩和缓存穿透问题解决方案.docx

    ### Redis扩展:缓存雪崩和缓存穿透问题解决方案 #### 缓存雪崩 **定义**:在Redis等缓存系统中,当大量数据同时失效时,原本由缓存承担的请求会在短时间内集中到后端数据库上,这种现象称为“缓存雪崩”。缓存...

    springboot缓存一致性解决

    例如,设置合理的缓存过期时间、使用随机盐值防止缓存穿透、以及使用互斥锁防止缓存雪崩和击穿。 10. **监控与调优**: 使用监控工具(如Spring Boot Actuator)监控缓存性能,及时发现并解决问题,通过调整缓存...

    阿里双十一系统项目实战(缓存架构+高可用服务架构+微服务架构.txt

    - **缓存雪崩**:指的是多个缓存实例同时失效的情况,导致所有请求都到达后端数据库,造成服务崩溃。解决方法包括设置不同的过期时间、使用限流机制等。 #### 高可用服务架构 高可用性是指系统能够持续提供服务的...

    Go-api接口缓存服务

    4. **缓存雪崩**:如果大量缓存同一时间过期,可能导致同时从数据库加载数据,造成服务器压力。可以通过设置随机过期时间或使用互斥锁来防止这种情况。 5. **Go语言中的缓存库**:如前面提到的,Go语言中有多个成熟...

    Go-一个简单高效用于go的LRU缓存包

    - **缓存击穿与缓存雪崩**:确保在高并发场景下,正确处理缓存失效可能导致的大规模数据库请求,防止缓存击穿和缓存雪崩问题。 - **缓存同步**:在多线程环境下,需要考虑缓存的并发安全问题,可能需要使用互斥锁或...

    4种常见的缓存问题及解决方案详解.docx

    然而,缓存的使用也伴随着一些常见的问题,如缓存穿透、缓存击穿、缓存雪崩以及双写不一致。以下是对这些问题及其解决方案的详细说明。 **缓存穿透** 缓存穿透是指用户频繁请求数据库中不存在的数据,导致每次请求...

    高并发缓存器(基于ehcache)

    5. **缓存雪崩和缓存击穿**:预防大量请求同一时刻导致缓存失效,可采用预加载、加锁或者设置随机过期时间等方式避免。 **三、代码整合与更新器** 在"localcache"这个文件中,我们可以推测这是对本地缓存的实现...

    亿级流量电商详情页系统的大型高并发与高可用缓存架构实战-未加密

    3. 缓存雪崩:通过设置合理的过期时间和使用随机过期时间,避免大量缓存同一时间失效。 总结,构建亿级流量电商详情页系统的大型高并发与高可用缓存架构,需要考虑缓存策略、高并发处理、高可用设计等多个层面,并...

    一个轻量级,高性能的缓存构架,以android缓存而设计为初衷,也可以应用于一般的Java项目中。.zip

    5. **缓存穿透、缓存雪崩和缓存击穿**:讲解这三种常见问题及其预防措施,比如布隆过滤器用于防止缓存穿透,设置合理的缓存更新策略避免缓存雪崩,以及加锁机制处理缓存击穿。 6. **Guava Cache**:Google的Guava库...

    构建高效可伸缩的缓存demo

    5. **缓存穿透**与**缓存雪崩**:缓存穿透是指请求的数据既不在缓存中也不在数据库中,可能导致大量请求直接打到数据库。可以通过布隆过滤器防止这种情况。缓存雪崩则是大量缓存同时失效,造成系统崩溃。解决方法...

    缓存组件的实现.zip

    6. **缓存雪崩**:大量缓存同一时间失效,导致请求瞬间涌向数据库。避免方式包括设置随机过期时间、使用互斥锁控制并发更新等。 7. **缓存击穿**:某个热点数据恰好在缓存失效的瞬间,大量请求同时击中数据库。可以...

    05、缓存&分布式锁1

    然而,缓存系统也存在一些问题,例如缓存穿透、缓存雪崩和缓存击穿。 1. 缓存穿透:当查询不存在的数据时,缓存和数据库均返回null,为防止这种情况,可以将null结果缓存一段时间,并设置较短的过期时间。 2. 缓存...

    《在线视频播放平台》重点讲解-pom-登录-文件上传-缓存.zip

    《在线视频播放平台》前后台-前端功能演示,Redis实现首页热点数据缓存 防止缓存雪崩 延迟双删实现缓存同步 登录校验 退出登录 Cookie Redis模拟Session 项目笔记讲解总结。登录的过程: ​ 前台获取username和user...

    谈谈redis高性能缓存.docx

    其次,缓存雪崩是指大量缓存同时过期导致数据库压力过大。解决方法包括设置随机过期时间、分散热点数据到不同节点或让热点数据永久不过期。最后,缓存击穿是指某个热点key过期时,大量请求直接涌向数据库。对此,...

    亿级流量电商详情页系统的大型高并发与高可用缓存架构实战2

    - 这是一种避免缓存雪崩的有效方法。通过对每个缓存条目设置不同的随机过期时间,可以分散缓存失效和重建的压力,防止大量缓存同时过期导致的服务器压力剧增。 7. **高可用分布式系统架构** - 高可用架构的关键...

    开放平台资源控制缓存体系的优化.zip

    5. **缓存穿透与雪崩问题**:设计合理的防穿透机制(如布隆过滤器)避免无效请求穿透缓存直接到数据库,同时防止缓存失效时大量请求同时落库导致的雪崩现象。 6. **资源配额与限流**:为每个用户或应用设定资源使用...

    《在线视频播放平台》前后台-前端功能演示.zip

    《在线视频播放平台》前后台-前端功能演示,Redis实现首页热点数据缓存 防止缓存雪崩 延迟双删实现缓存同步 登录校验 退出登录 Cookie Redis模拟Session 项目笔记讲解总结。登录的过程: ​ 前台获取username和user...

    《在线视频播放平台》疑难杂症总结笔记.zip

    《在线视频播放平台》前后台-前端功能演示,Redis实现首页热点数据缓存 防止缓存雪崩 延迟双删实现缓存同步 登录校验 退出登录 Cookie Redis模拟Session 项目笔记讲解总结。登录的过程: ​ 前台获取username和user...

    YiCache_Java

    - **缓存穿透**和**缓存雪崩**的预防:对于不存在的键值,防止大量请求导致底层系统压力过大;保持缓存失效策略的稳定,防止大量缓存同时失效引发问题。 总的来说,YIIM的YiCache_Java模块提供了对LRU二级缓存的...

Global site tag (gtag.js) - Google Analytics