public class SoaLockSupport { private Logger logger = Logger.getLogger(SoaLockSupport.class); //你的redis实现类 private RedisAAA redis; // 超时时间 private long timeout = 3000; /** * 获得锁,如果没拿到,会在超时时间内一直等待 */ public boolean lock(final String key) { FutureTask<Boolean> future = new FutureTask<Boolean>(new Callable<Boolean>() { public Boolean call() { boolean nx = false; for (;;) { nx = setnx(key); if(nx){ break; } try { // 获取不到暂停2ms Thread.sleep(2); } catch (InterruptedException e) { // } } return nx; } }); try { return future.get(timeout, TimeUnit.MILLISECONDS); } catch (Exception e) { logger.error("try lock error,key = "+key, e); } return false; } /** * 尝试获得锁,如果没拿到,直接返回失败 */ public boolean trylock(String key) { if (setnx(key)) { return true; } // 做这一步是防止key一直不被Delete,导致锁一直得不到释放的问题 String oldTime = redis.getString(key); if (oldTime != null && !oldTime.equals("")) { long time = Long.valueOf(oldTime) + timeout; long now = System.currentTimeMillis(); if (time < now) { logger.info("time = "+time + ",and now="+now); redis.delete(key); return setnx(key); } } return false; } /** * 释放锁 */ public void unlock(String key) { redis.delete(key); } private boolean setnx(String key) { if (redis.setnx(key, System.currentTimeMillis() + "") == 1) { return true; } return false; }
相关推荐
基于Redis方式实现分布式锁
主要介绍了Java基于redis实现分布式锁代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
04-大厂生产级Redis高并发分布式锁实战_ev.rar04-大厂生产级Redis高并发分布式锁实战_ev.rar04-大厂生产级Redis高并发分布式锁实战_ev.rar04-大厂生产级Redis高并发分布式锁实战_ev.rar04-大厂生产级Redis高并发...
Redis高并发分布式锁实战_6
人工智能-项目实践-redis-基于 Redis 实现的分布式锁 redis-lock 基于 Redis 实现的分布式锁。要求: Redis >= v7: 理论上来说低于 Redis 7 的也可以,但是暂时我还没在这些 Redis 版本上测试 Go >= 18: 低版本的 ...
自己封装redisson方法,同时通过注解的方式加入redis分布式事务锁,可靠。
redis实现分布式锁,自旋式加锁,lua原子性解锁
redisTemplate封装成redisUtils和分布式锁实现,亲测可用
本篇文章主要介绍了详解使用Redis SETNX 命令实现分布式锁,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
SpringBoot基于redis的分布式锁,有word使用文档,根据文档配置即可使用
Redis+RedisTemplate分布式锁
C++的redis的API、 需要boost库、可直接加入工程目录编译
自己整理的如何利用redis实现分布式锁,redis实现分布式锁看这一篇绝对够。
演示了mysql和redis+Lua、redisson实现分布式锁的具体过程
分布式缓存-基于Redis集群解决单机Redis存在的问题。分布式缓存-基于Redis集群解决单机Redis存在的问题。分布式缓存-基于Redis集群解决单机Redis存在的问题。分布式缓存-基于Redis集群解决单机Redis存在的问题。...
http://localhost:8080/ass/getUser 测试是否登录 http://localhost:8080/any/user/passLogin 登录测试 http://localhost:8080/lock redis分布式锁测试
分布式代理锁,动态的锁后缀采用ThreadLocal或者参数名获取 锁粒度自定义选择,目前实现基于redis,后续扩展zk等 SpringBoot,默认使用redisson链接redis,可以更改注解参数使用Spring redis工具 key分为:无后缀、...
一、redis实现分布式锁的主要原理: 1.加锁 最简单的方法是使用setnx命令。key是锁的唯一标识,按业务来决定命名。比如想要给一种商品的秒杀活动加锁,可以给key命名为 “lock_sale_商品ID” 。而value设置成什么呢...
.net基于Redis cluster的分布式Session演示程序应用 在分布式服务器上部署了服务,可以达到session同步,session存储到redis cluster