Redis 增加互斥锁
互斥锁
缓存击穿后,多个线程会同时去查询数据库的这条数据,那么我们可以在第一个查询数据的请求上使用一个互斥锁来锁住它。
其他的线程走到这一步拿不到锁就等着,等第一个线程查询到了数据,然后做缓存。后面的线程进来发现已经有缓存了,就直接走缓存。
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 增加互斥锁相关推荐
- JAVA 分布式环境 Redis互斥锁
开始的时候项目没有添加互斥锁,用的依然是老的思路,在并发量增加的情况下,遇到了很多的问题,包括数据库重复读等,想了下考虑增加 互斥锁来排序对单个资源的操作. @Target(ElementType.M ...
- Redis:分布式锁setnx(只 实现了 互斥性和容错性)
Redis:分布式锁setnx(只 实现了 互斥性和容错性) 关键词 同时在redis上创建同一个key,只有一个能成功,即获得锁 获取锁:原子性操作 set方法(推荐),谁set成功谁获取到锁(过期 ...
- Redis缓存击穿解决方案之互斥锁
一.缓存击穿 缓存击穿问题也叫热点key问题,就是一个被高并发访问并且缓存重建业务较复杂的key突然失效了,无数的请求访问会在瞬间给数据库造成巨大的冲击. --引用哔哩哔哩UP主"黑马程序员 ...
- Redis( 缓存篇 ==> 互斥锁解决缓存击穿
我们可以在查询缓存未命中的时候添加一个互斥锁.这样一来,在面对高并发的情况下,只有第一个进来的线程才可以拿到锁然后操作数据库,待操作结束后释放锁,未拿到锁的用户则等待一段时间重新查询缓存,直到缓存重建 ...
- Redis针对缓存击穿的解决方法-互斥锁
参考至:Java岗大厂面试百日冲刺 - 日积月累,每日三题[Day2] -- Redis篇1_陈哈哈的菜园子-CSDN博客 缓存穿透:指缓存和数据库中都没有的数据,导致所有的请求都打到数据库上,然后数 ...
- nx set 怎么实现的原子性_基于Redis的分布式锁实现
前言 本篇文章主要介绍基于Redis的分布式锁实现到底是怎么一回事,其中参考了许多大佬写的文章,算是对分布式锁做一个总结 分布式锁概览 在多线程的环境下,为了保证一个代码块在同一时间只能由一个线程访问 ...
- 基于Redis的分布式锁和Redlock算法
来自:后端技术指南针 1 前言 今天开始来和大家一起学习一下Redis实际应用篇,会写几个Redis的常见应用. 在我看来Redis最为典型的应用就是作为分布式缓存系统,其他的一些应用本质上并不是杀手 ...
- 《Redis官方文档》用Redis构建分布式锁
<Redis官方文档>用Redis构建分布式锁 用Redis构建分布式锁 在不同进程需要互斥地访问共享资源时,分布式锁是一种非常有用的技术手段. 有很多三方库和文章描述如何用Redis实现 ...
- 《Redis官方文档》用Redis构建分布式锁(悲观锁)
2019独角兽企业重金招聘Python工程师标准>>> **用Redis构建分布式锁 ** 在不同进程需要互斥地访问共享资源时,分布式锁是一种非常有用的技术手段. 有很多三方库和文章 ...
- redis系列:基于redis的分布式锁
一.介绍 这篇博文讲介绍如何一步步构建一个基于Redis的分布式锁.会从最原始的版本开始,然后根据问题进行调整,最后完成一个较为合理的分布式锁. 本篇文章会将分布式锁的实现分为两部分,一个是单机环境, ...
最新文章
- 求两个有序数组的中位数或者第k小元素
- 计算机二本生不学编程还能干什么6,不建议二本考生报考的6个专业,除非真的感兴趣!...
- vim+python3的字符串却不能使用中文
- 快上车!2021次“网易云信号”回顾列车发车啦!
- 自学机器学习、深度学习、人工智能的学习资源集合
- 00084_Map接口
- gitlab之 修改默认的仓库存储目录及数据迁移
- Word2016--显示/隐藏书签、批量删除书签
- 实现关联条件的casewhen效果
- 对称加密算法和非对称加密算法的区别
- 自动化成本高?那么如何获得最高的投资回报呢?
- 电路设计软件详谈,基于电路设计软件protel实现脉冲电路仿真
- 完全背包(背包问题)
- 14、RH850 F1 RAM存储器介绍
- Java集合或Map中元素排序及过滤
- 深度学习目标检测论文1(YOLOv1论文的翻译)
- Android 简易的自定义确认弹框AlertDialog
- (Bzoj1977)次小生成树
- 详解FFplay音视频同步
- 现代文阅读答案阿法狗大胜,人类该怎么办? 起源于中国的围棋一向是智者的运动
热门文章
- MTK 修改ro.hardware 获取cpu 和固件版本号方法
- 伺服舵机匀加速和匀减速运动Demo
- 滴答清单迅速入门【一知半解】
- ICMP协议和ARP协议
- ICMP协议的作用是什么?
- 龙芯3A3000上实现BLFS的轻量级桌面LXDE
- springboot jpa 实体类继承
- SpringBoot中配置文件dev、test、和prod各自代表什么意思?
- 戴尔机架式服务器哪个型号好,戴尔_PowerEdge R540_机架式服务器参数_服务器推荐购买 | Dell 中国大陆...
- Archlinux下对ape文件自动分轨并转mp3