import org.apache.log4j.Logger; import com.sf.weplay.redis.RedisManager; public class Lock { //默认最长锁5分钟 private final static int EXPIRED_TIME = 300000; public static Logger logger = Logger.getLogger(Lock.class); /** * 锁 * @param lockName * @return true 成功/false 失败 */ public static boolean lock(String lockName) { return getLock(lockName, 0); } /** * 解除锁 * @param lockName * @return */ public static void unlock(String lockName) { RedisManager.redisManager.del(lockName); } private static boolean getLock(String lockName, Integer count) { long lockExpireTime = System.currentTimeMillis() + EXPIRED_TIME; String stringOfLockExpireTime = String.valueOf(lockExpireTime); boolean gotLock = false; if(count > 300) { return gotLock; } Long i = RedisManager.redisManager.setnx(lockName, stringOfLockExpireTime); if (i == 1) { gotLock = true; return gotLock; } String value = RedisManager.redisManager.get(lockName, String.class); if (value != null && isTimeExpired(value)){ value = RedisManager.redisManager.getSet(lockName, stringOfLockExpireTime); if (value != null && isTimeExpired(value)) { gotLock = true; return gotLock; } } try { Thread.sleep(200); } catch (InterruptedException e) { // 不处理异常睡眠异常 } return getLock(lockName, ++count); } private static boolean isTimeExpired(String value) { return Long.parseLong(value) < System.currentTimeMillis(); } }
相关推荐
主要介绍了Java基于redis实现分布式锁代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
现在很多项目单机版已经不满足了,分布式变得越受欢迎,同时也带来很多问题,分布式锁也变得没那么容易实现,分享一个redis分布式锁工具类,里面的加锁采用lua脚本(脚本比较简单,采用java代码实现,无须外部调用...
redisTemplate封装成redisUtils和分布式锁实现,亲测可用
redis分布式锁的工具类,采用的是Lua代码的方式,保证了Java执行方法的原子性。
Java集成步骤包括:引入Redis客户端依赖、编写分布式锁工具类利用Redis命令实现加锁/解锁等操作。 3. 集成Spring Boot: Spring Boot可以大大简化Java应用的开发过程。集成Spring Boot主要包括:创建Spring Boot项目...
redis工具类,可用于操作redis增删改查,实现了分布式锁
Redis分布式锁实现(com.shawntime.utils.lock) 读写锁控制强制读取缓存同步 线程池管理类 配置文件初始化启动读取 Cookie工具类 JavaBean工具类 IP工具类 Json对象转换工具类 MD5工具类 Number工具类 Spring工具类...
- Java语言的分布式系统架构。...- 公共功能:公共功能(基类、数据访问组件、读写分离、分布式session、HTTP客户端、日志服务、队列服务、支付服务组件、redis缓存、Web安全等等)、公共配置、工具类。 适合接口编程。
内容概要:主要把一些常用的redis操作使用redisTemplate包装为redis命令名的方式,包括redis的各种数据类型的操作方法,如,批量删除key;...资源功能:项目需要redis操作相关的代码,使用该工具类可以简化开发。
Redis分布式锁实现(com.shawntime.utils.lock) 读写锁控制强制读取缓存同步 线程池管理类 配置文件初始化启动读取 Cookie工具类 JavaBean工具类 IP工具类 Json对象转换工具类 MD5工具类 Number工具类 Spring工具类...
Hutool是一个Java基础工具类,对文件、流、加密解密、转码、正则、线程、XML等JDK方法进行封装,组成各种Util工具类,同时提供以下组件: 布隆过滤 缓存 克隆接口 类型转换 日期处理
局部拦截支持docker部署支持k8s部署支持json序列化时自定义小数位数接口版本控制保留精度的数学计算工具类http请求工具类redis和redis分布式锁工具类json响应工具类支持Jenkinsfile重建二维码生成工具类redis id生成...
java面试宝典 ...基础篇、JVM篇、多线程&并发篇、Spring篇、Mybatis、SpringBoot、mysql、SpringCloud、Dubbo、Nginx、MQ、算法、Linux、ZK、Redis、分布式、网络、应试技巧等等;Java程序员必备知识图谱。
内部包含前后端Result类代码,redis,zookeeper,算法,自定义异常,分布式锁等常用框架所涉及到的基本封装
Excel工具类 Word工具类 Java NIO实现socket工具类 分布式session jdk升级到1.7 嵌入式redis服务(只支持linux) 1.0.13 修改默认的beanName生成策略,controller参数扩展 1.0.14 分布式session使用zookeeper 1.0.15 ...
Excel工具类 Word工具类 Java NIO实现socket工具类 分布式session jdk升级到1.7 嵌入式redis服务(只支持linux) 1.0.13 修改默认的beanName生成策略,controller参数扩展 1.0.14 分布式session使用zookeeper 1.0.15 ...
秒杀模块的前端实现以及api接口技术选型后端技术技术说明官网SpringBoot容器+MVC框架Shiro认证和授权框架MyBatisORM框架MyBatisGenerator数据层代码生成Hibernator-Validator验证框架RabbitMq消息队列Redis分布式...
Excel工具类 Word工具类 Java NIO实现socket工具类 分布式session jdk升级到1.7 嵌入式redis服务(只支持linux) 1.0.13 修改默认的beanName生成策略,controller参数扩展 1.0.14 分布式session使用zookeeper 1.0.15 ...