Redis实现分布式锁
发布日期:2021-05-15 06:51:48 浏览次数:14 分类:精选文章

本文共 5248 字,大约阅读时间需要 17 分钟。

Macaroni Repository - Redis���������������������������������������������

������������������������������������������������������������������������������������������������������ Drupal ������������������������������������Redis SETNX ��������������������� Redisson ������������������������������������������������������

1. ���������������������������������

������������������������������������������������������������������������������������������������������������������������������������������������������������ Tomcat1 ��� Tomcat2��������������� Nginx ������������������������ference to Redis ������������������ 100 ������������������������������������������ Tomcat1������������������������������ Tomcat2������ Tomcat1 ���������������������������������������������������������������������Tomcat2 ��������������������������� 100��������������� gcd.lock ������������������������������������������������

@RestController
public class IndexController {
@Autowired
private RedisTemplate
redisTemple;
@RequestMapping("/deductStock")
public String deductStock() {
synchronized (this) {
int stock = Integer.parseInt(redisTemple.opsForValue().get("stock"));
if (stock > 0) {
int realStock = stock - 1;
redisTemple.opsForValue().set("stock", realStock + "");
System.err.println("������������������������������" + realStock);
} else {
System.err.println("��������������������������� !");
}
}
return "";
}
}

2. Redis SETNX ������������������������������������������

Redis ��������� SETNX ���������������������������������������������������������������

@RestController
public class IndexController {
@Autowired
private RedisTemplate
redisTemple;
@RequestMapping("/deductStock")
public String deductStock() {
String lockKey = "product_001";
String clientId = UUID.randomUUID().toString();
try {
// ���������������������������
Boolean result = redisTemple.opsForValue().setIfAbsent(lockKey, "lzp");
// ���������������������������������������������������������
Boolean result = redisTemple.opsForValue().setIfAbsent(lockKey, clientId, 10, TimeUnit.SECONDS);
if (!result) {
return "���������������������������!";
}
int stock = Integer.parseInt(redisTemple.opsForValue().get("stock"));
if (stock > 0) {
int realStock = stock - 1;
redisTemple.opsForValue().set("stock", realStock + "");
System.err.println("������������������������������������" + realStock);
} else {
System.err.println("��������������������������������� !");
}
} finally {
// ������������������������������������������������
if (clientId.equals(redisTemple.opsForValue().get(lockKey))) {
redisTemple.delete(lockKey);
}
}
return "";
}
}

3. ������ Redisson ���������������

���������������������������Redisson ��������������������������������������������������������������������������������������������������� Redisson ���������������������������

org.redisson
redisson
3.2.3

������������������������������������������������������������������������������������ Redisson ������������������������������ ���������������������������������������������������������������������������������������������

@RestController
public class IndexController {
@Autowired
private RedisTemplate
redisTemple;
@RequestMapping("/deductStock")
public String deductStock() {
String lockKey = "product_001";
String clientId = UUID.randomUUID().toString();
try {
// Redisson ���������������������������������
final RedisLock lock = redisTemple.lock(lockKey);
try {
boolean locked = lock.tryLock();
if (!locked) {
return "���������������������������!";
}
int stock = Integer.parseInt(redisTemple.opsForValue().get("stock"));
if (stock > 0) {
int realStock = stock - 1;
redisTemple.opsForValue().set("stock", realStock + "");
System.err.println("������������������������������������" + realStock);
} else {
System.err.println("��������������������������������� !");
}
} finally {
lock.unlock();
}
} catch (Exception e) {
System.err.println("������������������������ Th��� ����� Krishan !");
} finally {
// ������������������������������������������������
// ������������������ finally ���������������������������������
}
return "";
}
}

������������ Redisson������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

上一篇:分布式锁
下一篇:Apache JMeter5.3 压力测试

发表评论

最新留言

感谢大佬
[***.8.128.20]2025年04月23日 17时08分04秒