利用Redisson实现分布式锁,并防止重复提交
2017-06-01 14:41
721 查看
关于Redisson的基础概念,参照Redisson基础。要想实现此功能需要以下几步:
1.依赖包
这里用的是jdk8+的版本<dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.3.2</version></dependency>2.Spring整合
注意设置schema文件<redisson:client id="redissonClient2"><redisson:single-server address="192.168.238.129:6379"/></redisson:client>3.工具类
默认锁@Component public class DistributedRedisLock implements InitializingBean { private static final Logger _log = Logger.getLogger(DistributedRedisLock.class); @Autowired private RedissonClient redissonClient; public static Redisson redisson; /** * 获取默认锁 */ public static RLock acquireLock(String lockName) { RLock fairLock = redisson.getLock(lockName); fairLock.lock();// 手动去解锁 _log.info("锁 - " + lockName + "获取成功"); return fairLock; } /** * 释放默认锁 */ public static void realeaseLock(RLock fairLock) { fairLock.unlock(); } @Override public void afterPropertiesSet() throws Exception { redisson = (Redisson) redissonClient; _log.info(redisson.getConfig().toJSON()); } }如何防止重复呢?
/*** 存入分布式set对象中* @param name* @param value* @return*/public RSet<String> setSet(String name, String value){RSet<String> set = redisson.getSet(name);set.add(value);return set;}/*** 检查分布式对象是否存在* @param name* @return*/public Boolean existSet(String name){RSet<String> set = redisson.getSet(name);if (!set.isEmpty()) {return true;}return false;}调用代码:
String lockname="lockname";RLock fairLock=DistributedRedisLock.acquireLock(lockname);try {//不存在设置到redisif (!DistributedRedisLock.existSet(lockname)) {DistributedRedisLock.setSet(lockname, "1111");//业务逻辑begin} else {//redis中有则不处理业务逻辑}}finally {DistributedRedisLock.realeaseLock(fairLock);}
相关文章推荐
- 利用SpringMVC定义拦截器实现防止重复提交
- struts2利用token和tokenSession实现防止表单重复提交的具体代码
- Asp.net实现弹出窗口提示,又防止刷新被重复提交的方法
- 利用Token防止重复提交(Struts框架)
- struts利用Token(令牌)防止用户重复提交
- 使用Post/Redirect/Get实现Asp.net防止表单重复提交
- 利用Session防止表单重复提交
- 利用Token防止重复提交(Struts框架)
- struts利用Token(令牌)防止用户重复提交
- 【分享】利用decorator实现Django表单防重复提交
- 使用struts2拦截器实现防止表单数据重复提交
- Asp.net实现弹出窗口提示,又防止刷新被重复提交的方法
- 利用Session防止表单重复提交
- 利用Token防止重复提交(Struts框架)
- Asp.net实现弹出窗口提示,又防止刷新被重复提交的方法
- Asp.net实现弹出窗口提示,又防止刷新被重复提交的方法
- 利用模态DIV结合UpdateProgress防止页面重复提交
- 利用Session防止表单重复提交
- Servlet处理表单重复提交and利用referer防盗链and实现request包含页面
- 利用decorator实现Django表单防重复提交