Redis实践 -使用Redis分布式锁
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Redis实践 -使用Redis分布式锁,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1314字,纯文字阅读大概需要2分钟。
内容图文
![Redis实践 -使用Redis分布式锁](/upload/InfoBanner/zyjiaocheng/920/b9513ee341044411af5019b4c3a6defd.jpg)
使用Redis来实现分布式锁
public class LockTest {
private final Jedis jedis;
public LockTest() {
jedis=new Jedis("localhost",6379);
jedis.auth("iostream");
}
public void solve() throws InterruptedException {
//jedis.set()是原子操作
if(jedis.set("list","test","nx","ex",7)!=null){ //这个操作是缓存list并设置7秒后过期
System.out.println(Thread.currentThread().getName()+" holds lock");
Thread.sleep(3000); //模拟长时间工作
throw new RuntimeException(); //模拟运行过程出现异常
}else{
System.out.println("锁正在被占领");
}
}
public static void main(String[] args) throws InterruptedException {
LockTest lockTest=new LockTest();
new Thread( () -> {
try {
lockTest.solve();
} catch (InterruptedException e) {
e.printStackTrace();
}
} ).start();
new Thread( () -> {
try {
Thread.sleep(1000);
lockTest.solve();
} catch (InterruptedException e) {
e.printStackTrace();
}
} ).start();
Thread.sleep(6000);
System.out.println(lockTest.jedis.get("list")); //此时锁还没有过期
Thread.sleep(1000);
System.out.println(lockTest.jedis.get("list")); //null 过期 Thread0线程执行过程出现异常锁仍然能够被安全释放
}
}
/*
Thread-0 holds lock
锁正在被占领
Exception in thread "Thread-0" java.lang.RuntimeException
at com.viscu.Redis.LockTest.solve(LockTest.java:24)
at com.viscu.Redis.LockTest.lambda$main$0(LockTest.java:34)
at java.lang.Thread.run(Thread.java:748)
test
null
*/
内容总结
以上是互联网集市为您收集整理的Redis实践 -使用Redis分布式锁全部内容,希望文章能够帮你解决Redis实践 -使用Redis分布式锁所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。