互斥锁
  缓存击穿后,多个线程会同时去查询数据库的这条数据,那么我们可以在第一个查询数据的请求上使用一个互斥锁来锁住它。
  其他的线程走到这一步拿不到锁就等着,等第一个线程查询到了数据,然后做缓存。后面的线程进来发现已经有缓存了,就直接走缓存。

static Lock reenLock = new ReentrantLock();public String findPubConfigByKey1(String key) throws InterruptedException {PubConfig result = new PubConfig();// 从缓存读取数据result = redisService.getObject(PubConfigKeyConstants.TABLE_NAME + "_"+key, PubConfig.class) ;if (result== null ) {if (reenLock.tryLock()) {try {System.out.println("拿到锁了,从DB获取数据库后写入缓存");// 从数据库查询数据result = pubConfigRepository.queryPubConfigInfoByKey(key);// 将查询到的数据写入缓存Gson g = new Gson();String value = g.toJson(result);redisService.setNx(PubConfigKeyConstants.TABLE_NAME + "_"+key, value);} finally {reenLock.unlock();// 释放锁}} else {// 先查一下缓存result = redisService.getObject(PubConfigKeyConstants.TABLE_NAME + "_"+key, PubConfig.class) ;if (result== null) {System.out.println("我没拿到锁,缓存也没数据,先小憩一下");Thread.sleep(100);// 小憩一会儿return findPubConfigByKey1(key);// 重试}}}return result.getValue();}

Redis 增加互斥锁相关推荐

  1. JAVA 分布式环境 Redis互斥锁

    开始的时候项目没有添加互斥锁,用的依然是老的思路,在并发量增加的情况下,遇到了很多的问题,包括数据库重复读等,想了下考虑增加 互斥锁来排序对单个资源的操作. @Target(ElementType.M ...

  2. Redis:分布式锁setnx(只 实现了 互斥性和容错性)

    Redis:分布式锁setnx(只 实现了 互斥性和容错性) 关键词 同时在redis上创建同一个key,只有一个能成功,即获得锁 获取锁:原子性操作 set方法(推荐),谁set成功谁获取到锁(过期 ...

  3. Redis缓存击穿解决方案之互斥锁

    一.缓存击穿 缓存击穿问题也叫热点key问题,就是一个被高并发访问并且缓存重建业务较复杂的key突然失效了,无数的请求访问会在瞬间给数据库造成巨大的冲击. --引用哔哩哔哩UP主"黑马程序员 ...

  4. Redis( 缓存篇 ==> 互斥锁解决缓存击穿

    我们可以在查询缓存未命中的时候添加一个互斥锁.这样一来,在面对高并发的情况下,只有第一个进来的线程才可以拿到锁然后操作数据库,待操作结束后释放锁,未拿到锁的用户则等待一段时间重新查询缓存,直到缓存重建 ...

  5. Redis针对缓存击穿的解决方法-互斥锁

    参考至:Java岗大厂面试百日冲刺 - 日积月累,每日三题[Day2] -- Redis篇1_陈哈哈的菜园子-CSDN博客 缓存穿透:指缓存和数据库中都没有的数据,导致所有的请求都打到数据库上,然后数 ...

  6. nx set 怎么实现的原子性_基于Redis的分布式锁实现

    前言 本篇文章主要介绍基于Redis的分布式锁实现到底是怎么一回事,其中参考了许多大佬写的文章,算是对分布式锁做一个总结 分布式锁概览 在多线程的环境下,为了保证一个代码块在同一时间只能由一个线程访问 ...

  7. 基于Redis的分布式锁和Redlock算法

    来自:后端技术指南针 1 前言 今天开始来和大家一起学习一下Redis实际应用篇,会写几个Redis的常见应用. 在我看来Redis最为典型的应用就是作为分布式缓存系统,其他的一些应用本质上并不是杀手 ...

  8. 《Redis官方文档》用Redis构建分布式锁

    <Redis官方文档>用Redis构建分布式锁 用Redis构建分布式锁 在不同进程需要互斥地访问共享资源时,分布式锁是一种非常有用的技术手段. 有很多三方库和文章描述如何用Redis实现 ...

  9. 《Redis官方文档》用Redis构建分布式锁(悲观锁)

    2019独角兽企业重金招聘Python工程师标准>>> **用Redis构建分布式锁 ** 在不同进程需要互斥地访问共享资源时,分布式锁是一种非常有用的技术手段. 有很多三方库和文章 ...

  10. redis系列:基于redis的分布式锁

    一.介绍 这篇博文讲介绍如何一步步构建一个基于Redis的分布式锁.会从最原始的版本开始,然后根据问题进行调整,最后完成一个较为合理的分布式锁. 本篇文章会将分布式锁的实现分为两部分,一个是单机环境, ...

最新文章

  1. 求两个有序数组的中位数或者第k小元素
  2. 计算机二本生不学编程还能干什么6,不建议二本考生报考的6个专业,除非真的感兴趣!...
  3. vim+python3的字符串却不能使用中文
  4. 快上车!2021次“网易云信号”回顾列车发车啦!
  5. 自学机器学习、深度学习、人工智能的学习资源集合
  6. 00084_Map接口
  7. gitlab之 修改默认的仓库存储目录及数据迁移
  8. Word2016--显示/隐藏书签、批量删除书签
  9. 实现关联条件的casewhen效果
  10. 对称加密算法和非对称加密算法的区别
  11. 自动化成本高?那么如何获得最高的投资回报呢?
  12. 电路设计软件详谈,基于电路设计软件protel实现脉冲电路仿真
  13. 完全背包(背包问题)
  14. 14、RH850 F1 RAM存储器介绍
  15. Java集合或Map中元素排序及过滤
  16. 深度学习目标检测论文1(YOLOv1论文的翻译)
  17. Android 简易的自定义确认弹框AlertDialog
  18. (Bzoj1977)次小生成树
  19. 详解FFplay音视频同步
  20. 现代文阅读答案阿法狗大胜,人类该怎么办? 起源于中国的围棋一向是智者的运动

热门文章

  1. MTK 修改ro.hardware 获取cpu 和固件版本号方法
  2. 伺服舵机匀加速和匀减速运动Demo
  3. 滴答清单迅速入门【一知半解】
  4. ICMP协议和ARP协议
  5. ICMP协议的作用是什么?
  6. 龙芯3A3000上实现BLFS的轻量级桌面LXDE
  7. springboot jpa 实体类继承
  8. SpringBoot中配置文件dev、test、和prod各自代表什么意思?
  9. 戴尔机架式服务器哪个型号好,戴尔_PowerEdge R540_机架式服务器参数_服务器推荐购买 | Dell 中国大陆...
  10. Archlinux下对ape文件自动分轨并转mp3