| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> redis 分布式锁 -> 正文阅读 |
|
[大数据]redis 分布式锁 |
redis的分布式锁,在面试时候可以按以下步骤进行介绍 1、使用redis.setnx(key,value) 弊端:加锁后,后续业务代码发生异常,所以要加try{}catch{}finally{redis.delete(key)} 2、第一种方法,如果加锁后,服务宕机,则finally执行不到该key就无法释放,所以要加过期时间 使用redis.setnx(key,value,expire) 3、第二种方法存在的问题现象:如果某一线程在加锁后的业务逻辑执行时间超过上锁时间; 异常发生:就会导致第一个线程执行到最后finally里删除key的时候,将后面线程的key删掉,这样就会级联导致锁无效。也就是锁被其他线程释放了。 解决方法:finally删除key的时候,先判断下key存的value是不是当前线程的,如果是就删除,否则不删除。 4、第二种方法存在的问题现象:如果某一线程在加锁后的业务逻辑执行时间超过上锁时间; 异常发生:本来应该在加锁时间范围内只有一个线程执行的业务代码逻辑,却同时被多个线程执行了,可能会发生超卖等其他异常现象。 解决方法:给key续命,即在设置key过期时间的时候,开启一个timmer或延迟线程池,定时给key续命,直到执行完业务代码后在finally里把key删除 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 13:45:08- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |