首页 > 作文

互联网常识:介绍redis分布式锁

更新时间:2023-02-24 22:58:48 阅读: 评论:0

导读跟大家讲解下有关介绍redis分布式锁,相信小伙伴们对这个话题应该也很关注吧,现在就为小伙伴们说说介绍redis分布式锁,小编也收集到了

跟大家讲解下有关介绍redis分布式锁,相信小伙伴们对这个话题应该也很关注吧,现在就为小伙伴们说说介绍redis分布式锁,小编也收集到了有关介绍redis分布式锁的相关资料,希望大家看到了会喜欢。

推荐(免费):redis

Redisson

redisson和下列一下自行封装两种方式的区别(场景):

redisson未获取到锁的会进入等待直到获取到锁。另外两种方式如果未获取到锁会放弃不会执行业务代码。

<dependency> <groupId>org.redisson</groupId> <artifactId>redisson-spring-boot-starter</artifactId> <version>3.13.6</version></dependency>
@Autowiredprivate Redisson redisson;@GetMapping("/redissonLock")public String redissonLock { log.info("进入了方法"); RLock lock = redisson.getLock("redissonLock"); try { lock.lock(30, TimeUnit.SECONDS); Thread.sleep(10000); System.out.println("我是你大哥"); } catch (InterruptedException e) { e.printStackTrace; } finally { // 如果不释放不会唤起其他线程则其他线程会超时过期自动唤醒不会执行业务代码 lock.unlock; } return "运行结束";}

RedisTemplate封装redis锁(1)

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency>
package com.util;import org.springframework.dao.DataAccessException;import org.springframework.data.redis.connection.RedisConnection;import org.springframework.data.redis.connection.RedisStringCommands;import org.springframework.data.redis.core.RedisCallback;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.core.script.RedisScript;impor我的世界作弊码t org.springframework.data.redis.core.types.Expiration;import org.springframework.stereotype.Component;import java.util.Arrays;@Componentpublic class RedisLock { private static RedisTemplate redisTemplate; private static String script = "if redis.call(\"get\",KEYS[1]) == ARGV[世事何曾是绝对1] then\n" + "\treturn redis.call(\"del\",KEYS[1])\n" + "el\n" + " \treturn 0\t\n" + "end "; public RedisLock(RedisTemplate redisTemplate) { RedisLock.redisTemplate = redisTemplate; } public static Boolean getLock(String key, String value, Long expireTime) { RedisStringCommands.SetOption tOption = RedisStringCommands.SetOption.ifAbnt; Expiration expiration = Expiration.conds(expireTime); RedisCallback<Boolean> booleanRedisCallback = new RedisCallback<Boolean> { @Override public Boolean doInRedis(RedisConnection connection) throws DataAccessException { return connection.t(redisTemplate.getKeySerializer.rialize(key), redisTemplate.getValueSerializer.rialize(value), expiration, tOption); } }; return (Boolean) redisTemplate.execute(booleanRedisCallback); } public static Boolean unLock(String key, String value) { RedisScript<Boolean> redisScript = RedisScript.of(script, Boolean.class); return (Boolean) redisTemplate.execute(redisScript, Arrays.asList(key), value); }}
@GetMapping("/redisLock")public String redisLock { log.info("进入了方法"); String key = "redisLock"; String uuid = UUID.randomUUID.toString; try { if (RedisLock.getLock(key, uuid, 30L)) { log.info("进入了锁"); Thread.sleep(10000); } } catch (InterruptedException e) { e.printStackTrace; } finally { RedisLock.unLock(key, uuid); } log.info("方法执行完成"); return "程序结束";}

RedisTemplate封装redis锁(2)

package com.util;import lombok.extern.slf4j.Slf4j;import org.springframework.dao.DataAccessException;import org.springframework.data.redis.connection.RedisConnection;import org.springframework.data.redis.connection.RedisStringCommands;import org.springframework.data.redis.core.RedisCallback;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.core.script.RedisScript;import org.springframework.data.redis.core.types.Expiration;import java.util.Arrays;import java.util.UUID;@Slf4jpublic class HighRedisLock implements AutoCloable{ private RedisTemplate redisTemplate; private String key; private String value; private Long expireTime; private static String script = "if redis.call(\"get\",KEYS[1]) == ARGV[1] then\n" + "\treturn redis.call(\"del\",KEYS[1])\n" + "el\n" + " \tr座右铭学习eturn 0\t\n" + "end "; public HighRedisLock(RedisTemplate redisTemplate, String key, Long expireTime) { this.redisTemplate = redisTemplate; this.key = key; this.v英语心得alue = UUID.randomUUID.toString; this.expireTime = expireTime; } public Boolean getLock { RedisStringComma爸爸写给失恋女儿的一封信nds.SetOption tOption = RedisStringCommands.SetOption.ifAbnt; Expiration expiration = Expiration.conds(expireTime); RedisCallback<Boolean> booleanRedisCallback = new RedisCallback<Boolean> { @Override public Boolean doInRedis(RedisConnection connection) throws DataAccessException { return connection.t(redisTemplate.getKeySerializer.rialize(key), redisTemplate.getValueSerializer.rialize(value), expiration, tOption); } }; return (Boolean) redisTemplate.execute(booleanRedisCallback); } public Boolean unLock { RedisScript<Boolean> redisScript = RedisScript.of(script, Boolean.class); return (Boolean) redisTemplate.execute(redisScript, Arrays.asList(key), value); } @Override public void clo throws Exception { unLock; }}
@Autowiredprivate RedisTemplate redisTemplate;@GetMapping("/highRedisLock")public String highRedisLock { log.info("进入了方法"); try (HighRedisLock redisLock = new HighRedisLock(redisTemplate, "highRedisLock", 30L)) { if (redisLock.getLock) { log.info("进入了锁"); Thread.sleep(10000); } } catch (InterruptedException e) { e.printStackTrace; } catch (Exception e) { e.printStackTrace; } log.info("方法执行完成"); return "程序结束";}

以上就是介绍redis分布式锁的详细内容!

来源:php中文网

本文发布于:2023-02-24 22:58:47,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/167725072833031.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:互联网常识:介绍redis分布式锁.doc

本文 PDF 下载地址:互联网常识:介绍redis分布式锁.pdf

下一篇:返回列表
标签:分布式   方法   小伙伴们   两种
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 站长QQ:55-9-10-26 专利检索|