
就分布式锁而言,一个常用的问题就是如果一个服务setnx成功了,但是在解锁的时候如果发生了宕机或者一些特殊因素,导致无法解锁,那么其他服务将陷入死锁的状态。所以,我们在用 setnx 的同时想着去用 expire 指令对锁进行一个过期操作, 从指令可以看出 setnx 和expire指令是分开的,如果在这中间的空隙过程中如果有特殊因素导致指令无法继续,也会导致死锁的产生。
解决方法:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
@Component
public class RedisLock {
Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
private StringRedisTemplate redisTemplate;
/**
* 加锁
* @param key
* @param value 当前时间 + 超时时间
* @return
*/
public boolean lock(String key, String value) {
if (redisTemplate.opsForValue().setIfAbsent(key, value)) {
// 这个其实就是setnx命令,只不过在j*a这边稍有变化,返回的是boolean
// 设置个过期时间,当然如果在这中间的空隙过程中如果有特殊因素导致指令无法继续,也会导致死锁的产生,如果死锁出现,则后续代码会处理
redisTemplate.expire(key, lockTime, TimeUnit.SECONDS);
return true;
}
// 避免死锁,且只让一个线程拿到锁
String currentValue = redisTemplate.opsForValue().get(key);
// 如果锁过期了
if (!StringUtils.isEmpty(currentValue) && Long.parseLong(currentValue) < System.currentTimeMillis()) {
//获取上一个锁的时间
String oldValues = redisTemplate.opsForValue().getAndSet(key, value);
/*
只会让一个线程拿到锁
如果旧的value和currentValue相等,只会有一个线程达成条件,因为第二个线程拿到的oldValue已经和currentValue不一样了
*/
if (!StringUtils.isEmpty(oldValues) && oldValues.equals(currentValue)) {
return true;
}
}
return false;
}
/**
* 解锁
* @param key
* @param value
*/
public void unlock(String key, String value) {
try {
String currentValue = redisTemplate.opsForValue().get(key);
if (!StringUtils.isEmpty(currentValue) && currentValue.equals(value)) {
redisTemplate.opsForValue().getOperations().delete(key);
}
} catch (Exception e) {
logger.error("redis分布式锁解锁异常,{}", e);
}
}
}调用:
Kotlin Android 中文开发帮助文档 PDF版
这本书并不是一本语言参考书,但它是一个Android开发者去学习Kotlin并且使用在自己项目中的一个工具。我会通过使用一些语言特性和有趣的工具和库来解决很多我们在日常生活当中都会遇到的典型问题。 这本书是非常具有实践性的,所以我建议你在电脑面前跟着我的例子和代码实践。无论何时你都可以在有一些想法的时候深入到实践中去。 这本书适合你吗? 写这本书是为了帮助那些有兴趣 使用Kotlin语言来进行开发的Android开发者。 如果你符合下面这些情况,那这本书是适合你的: 你有相关Android开发和Andro
11
查看详情
//加锁
long time = System.currentTimeMillis() + 1000 * lockTime //超时时间:10秒,最好设为常量
boolean isLock = redisLock.lock(...keyName, String.valueOf(time));
if(!isLock){
throw new RuntimeException("系统正忙");
}
// doSomething...
//解锁
redisLock.unlock(...keyName, String.valueOf(time));更多Redis相关知识,请访问Redis使用教程栏目!
以上就是redis会发生死锁问题吗的详细内容,更多请关注其它相关文章!
# 死锁
# 重庆seo助手怎么选用
# 的是
# 加锁
# 过程中
# 如何使用
# 在这
# 也会
# 帮助文档
# 解锁
# 这本书
# redis会发生死锁吗
# 上海网站推广团队招聘
# 洪梅东莞网站推广
# 图文形式营销推广怎么做
# 市管局网站建设工作总结
# 江干区seo优化方案
# 运城网站建设常用渠道
# 蔡甸区网站建设
# 金华大型网站推广
# 软文营销推广模板图片高清
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
微信客户端怎么查看二维码_微信客户端个人二维码查看方法
风车动漫官网首页入口登录 风车动漫在线观看正版地址
精通VS Code多光标编辑以实现闪电般快速的修改
Git命令与VS Code UI操作的对应关系解析
TikTok网页版实时观看入口 TikTok网页版短视频在线浏览
包子漫画在线观看入口 包子漫画网正版全集链接
抖音如何进行蓝V认证 抖音企业号申请所需资料与流程
Dash应用中自定义HTML页面标题与网站图标(F*icon)的实用指南
批改网官网首页登录 批改网学生用户登录入口
PDF如何批量加注释_PDF多文件批注高亮操作教程
如何在CSS中清除浮动解决背景颜色不包裹内容问题_clear after技巧
J*a列表元素格式化输出教程
米侠浏览器插件无法启用怎么办 米侠浏览器扩展兼容性修复
优化 WooCommerce 产品价格显示与自定义短代码集成
Teambition网盘如何共享文件
Flask 应用中图片动态更新与上传:实现客户端定时刷新与服务器端文件管理
《下一站江湖2》武器获取方法
realme 10 Pro息屏方案_realme 10 Pro省电策略
银信通自动开通原因揭秘
如何在CSS中实现盒模型多列间距_grid-gap与padding结合
京东快递物流信息不更新怎么办_物流停滞原因与处理方法
《绿竹漫游》关闭消息通知方法
CSS动画如何实现图标旋转并放大_transform rotate scale @keyframes实现
OpenWeatherMap API:通过城市名称获取天气预报数据指南
火柴人战争网页版在线玩
SQL聚合查询、联接与筛选:GROUP BY 子句的正确使用与常见陷阱
海棠阅读网页版_进入海棠网页版在线阅读中心
Python csv 模块处理非字符串数据:列表写入 CSV 文件的机制解析
Word如何将文字快速转成表格 Word文本转换成表格功能使用技巧【效率】
126邮箱网页在线登录2025_126邮箱网页版入口官方地址
晓晓优选app支付宝绑定方法
5G和6G的连接密度有什么区别 6G每平方公里能连接多少设备
Lar*el Dusk 测试中管理浏览器权限:以剪贴板访问为例
谷歌邮箱怎么换绑定邮箱Gmail安全备份邮箱修改方法
使用TinyButStrong生成HTML并结合Dompdf创建PDF教程
支付宝网页版在线入口 支付宝官网电脑登录入口
多多买菜门店端app订单查看方法
鲨鱼剧场app金币获取方法
顺丰快递单号查询寄件人 顺丰寄件人查询入口
《微信》视频号原创声明开启方法
漫蛙漫画直连入口 _ manwa官方备用入口实时检测
C++怎么实现一个红黑树_C++高级数据结构与平衡二叉搜索树
Yandex无需登录畅游 俄罗斯搜索引擎最新官网指南
POKI小游戏在线免费入口链接 POKI小游戏无下载秒玩玩
雨课堂官网在线登录 网页版雨课堂登录链接
使用jQuery精确检测除指定元素外任意位置的点击事件
Animex动漫社社登录官网 Animex动漫社资源社入口直达
《下一站江湖2》心法融合技巧
小米civi如何设置锁屏时间
tiktok国际版入口_tiktok官网网页版链接
2019-06-28
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。