博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
借助共享缓存redis实现分布式锁
阅读量:5888 次
发布时间:2019-06-19

本文共 693 字,大约阅读时间需要 2 分钟。

    新开发的系统须要控制每一个时刻回收缓存的GC线程有且仅仅有一个在执行,假设有多个线程同一时候执行,会造成系统崩溃。假设仅仅有一个JVM进程那么非常好办。简单的借助synchronizedkeyword即可了。

但是我的系统要部署在多台server,每台server上部署多个实例上。而synchronized仅仅在单进程里实用。

    考虑借助共享数据源redis实现功能。

    redis提供一个方法,SETNX key value。将 key 的值设为 value ,当且仅当 key 不存在。若给定的 key 已经存在。则 SETNX 不做不论什么动作。

设置成功。返回 1 。

设置失败,返回 0 。也就是说,当这个key存在时。返回0。其它人已经拿到锁并进入临界区了。

    那么这个key就是一把锁,假设返回1,表示获取相互排斥锁成功,然后能够进入临界区。返回0,表示获取失败。无法进入临界区。

    演示样例代码:

try {			mutex = KeyHelper.Data.Risk.getGcThreadMutexKey();			if (dataCommonCacheService.setnx(mutex, "ok") == 1L) { // 尝试加锁				garbageCollector.garbageRecycle(); // 临界区			}		} catch (Exception e) {			LOG.error(e.getMessage(), e);		} finally {			dataCommonCacheService.del(mutex);	// 释放锁		}

 

转载地址:http://gqrix.baihongyu.com/

你可能感兴趣的文章
ZABBIX API自动检查主机
查看>>
Linux系统基准
查看>>
几个简单的html+css+js题目
查看>>
MicroPython可视化编程开发板—TurnipBit自制MP3教程实例
查看>>
张双老师PHP开发实例教程持续更新中
查看>>
Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
查看>>
【quick-cocos2d-x】 CCHttpRequest用法
查看>>
sql 2005、2008维护计划备份数据库
查看>>
Windows 8没有失败的五个理由
查看>>
puppet之exec管理
查看>>
zipkin相关材料
查看>>
head,tail读取文件数据行
查看>>
路由相关
查看>>
weblogic启动慢,停到log manager基本不动了
查看>>
bootstrap 框架学习笔记
查看>>
XP服务详解与建议
查看>>
如何利用CSS画个桃心
查看>>
我的友情链接
查看>>
第十八章、Linux网络配置
查看>>
Linux查看系统的负载
查看>>