分布式锁 基于Redis
分布式锁的实现(基于Redis)
参考:http://www.jb51.net/article/75439.htm
http://www.linuxidc.com/Linux/2015-01/111827.htm
http://www.tuicool.com/articles/6juqmm7
方式一: 基于第三方类库 redssion
1.安装redis
安装redssion的锁服务队redis的版本有要求,要求必须高于2.6版本。关于redis的安装,请参考redis安装。
2.redssion库
redssion的库添加的pom文件中去。
<dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>2.1.0</version></dependency>
3.测试例子
Config config = new Config(); config.useSingleServer().setAddress("ipaddress:6379"); Redisson redisson = Redisson.create(config); for(int i=0;i<5;i++){ RLock lock = redisson.getLock("testLock"); lock.lock(10, TimeUnit.SECONDS);//10s超时 logger.info("the lock client id is client{}",i); Thread.sleep(1000); logger.info("client{} unlock",i); lock.unlock(); }
4.参考
方式二: 自定义代码实现
) { ) { &&lastLockTime > System.currentTimeMillis()){ ||lastLockTime < System.currentTimeMillis()) { jedisProxy.del(key)); } } catch (Exception e) { logger.error("从redis获取定时任务锁错误,key="+String.format(LOCK, id), e); return false; } } return true; }
/** * 释放锁 * @param id */ public void unLock(String id) {
//这里的Jedis实际上是个代理。代理类JedisCallback,JedisFactoryBean Jedis jedisProxy = JedisProxy.create(); String key = String.format(LOCK, id); jedisProxy.del(key); }}
JedisProxy类
/** * Jedis代理 */@Componentpublic class JedisProxy implements ApplicationContextAware {
private static volatile ApplicationContext ac;
/** * 创建Jedis 代理 * * @return */ public static Jedis create() { return ac.getBean(Jedis.class); }
@Override public void setApplicationContext(ApplicationContext applicationContext) { if (ac != null) { return; } synchronized (JedisProxy.class) { if (ac != null) { return; } ac = applicationContext; } }}
分布式锁 基于Redis的更多相关文章
- 分布式锁(redis/mysql)
单台机器所能承载的量是有限的,用户的量级上万,基本上服务都会做分布式集群部署.很多时候,会遇到对同一资源的方法.这时候就需要锁,如果是单机版的,可以利用java等语言自带的并发同步处理.如果是多台机器 ...
- SpringBoot集成Redis分布式锁以及Redis缓存
https://blog.csdn.net/qq_26525215/article/details/79182687 集成Redis 首先在pom.xml中加入需要的redis依赖和缓存依赖 < ...
- 解析分布式锁之Redis实现(二)
摘要:在前文中提及了实现分布式锁目前有三种流行方案,分别为基于数据库.Redis.Zookeeper的方案,本文主要阐述基于Redis的分布式锁,分布式架构设计如今在企业中被大量的应用,而在不同的分布 ...
- 从分布式锁来看redis和zookpeer!
从分布式锁来看redis和zookpeer! 目前网上大部分的基于zookpeer,和redis的分布式锁的文章都不够全面.要么就是特意避开集群的情况,要么就是考虑不全,读者看着还是一脸迷茫.坦白说, ...
- Java分布式:分布式锁之Redis实现
Java分布式:分布式锁之Redis实现 分布式锁系列教程重点分享锁实现原理 Redis锁原理 核心命令 Redis分布式锁的原理是基于其SETNX命令,我们来看SETNX的解释. 实现过程 使用SE ...
- [Java复习] 分布式锁 Zookeeper Redis
一般实现分布式锁都有哪些方式? 使用 Redis 如何设计分布式锁?使用 Zookeeper 来设计分布式锁可以吗? 这两种分布式锁的实现方式哪种效率比较高? 1. Zookeeper 都有哪些使用场 ...
- 分布式锁用Redis还是ZooKeeper?(转载)
文章系网络转载,侵删. 来源:https://zhuanlan.zhihu.com/p/73807097 为什么用分布式锁?在讨论这个问题之前,我们先来看一个业务场景. 图片来自 Pexels 为什么 ...
- 【分布式锁】Redis实现可重入的分布式锁
一.前言 之前写的一篇文章<细说分布式锁>介绍了分布式锁的三种实现方式,但是Redis实现分布式锁关于Lua脚本实现.自定义分布式锁注解以及需要注意的问题都没描述.本文就是详细说明如何利用 ...
- 分布式锁用Redis与Zookeeper的使用
为什么用分布式锁? 在讨论这个问题之前,我们先来看一个业务场景: 系统A是一个电商系统,目前是一台机器部署,系统中有一个用户下订单的接口,但是用户下订单之前一定要去检查一下库存,确保库存足够了才会 ...
随机推荐
- Spring MVC中注解 @ModelAttribute
1.@ModelAttribute放在方法之上,在当前Control内的所有方法映射多个URL的请求,都会执行该方法 @ModelAttribute public void itemsCommon(H ...
- I/O多路转接之select
系统提供select函数来实现多路复⽤用输入/输出模型.select系统调用是用来让我们的程序监视 多个文件句柄的状态变化的.程序会停在select这里等待,直到被监视的文件句柄有一个或 多个发生了状 ...
- SGU 132.Another Chocolate Maniac
时间限制:0.25s 空间限制:4M 题目: Bob非常喜欢巧克力,吃再多也觉得不够.当他的父母告诉他将要买很多矩形巧克力片为他庆祝生日时,他的喜悦是能被理解的.巧克力都是 2x1 或 1x2 的矩形 ...
- linux之uniq
Linux命令uniq的作用是过滤重复部分显示文件内容,这个命令读取输入文件,并比较相邻的行.在正常情况下,第二个及以后更多个重复行将被删去,行 比较是根据所用字符集的排序序列进行的.该命令加工后的结 ...
- Bootstrap_表单_表单控件
一.输入框input 单行输入框,常见的文本输入框,也就是input的type属性值为text. 在Bootstrap中使用input时也必须添加type类型,如果没有指定type类型,将无法得到正确 ...
- react-redux原理
react-redux原理分析 写在前面 之前写了一篇分析Redux中Store实现的文章(详见:Redux原理(一):Store实现分析),突然意识到,其实React与Redux并没有什么直接的联系 ...
- ASP.NET 安全认证
一. 新建一个测试项目 新建一个测试项目,包含三张页面(Default.aspx.Login.aspx.UserInfo.aspx). 二. 修改 Web.config 1.把<authen ...
- 转:PHP开发框架流行度排名:Laravel居首
原文来自于:http://www.sitepoint.com/best-php-frameworks-2014/ Update: If you’d like to take part in the n ...
- ha666_go运行环境配置
项目地址:http://git.oschina.net/ha666/ha666_go 服务器配置: CPU: 1核 内存: 1024 MB 操作系统: CentOS 7.0 64位 内网IP: 10. ...
- List of XML and HTML character entity references
A character entity reference refers to the content of a named entity. An entity declaration is creat ...