在集群下的并发问题:
业务流程:
具体实现:
ILock
点击查看代码- package com.hmdp.utils;
- public interface ILock {
- // 获取锁
- boolean tryLock(long timeoutSec);
- // 释放锁
- void unlock();
- }
复制代码 SimpleRedisLock
点击查看代码- package com.hmdp.utils;
- import org.springframework.data.redis.core.StringRedisTemplate;
- import java.util.concurrent.TimeUnit;
- public class SimpleRedisLock implements ILock {
- private String name;
- private StringRedisTemplate stringRedisTemplate;
- private static final String KEY_PREFIX = "lock:";
- public SimpleRedisLock(String name, StringRedisTemplate stringRedisTemplate) {
- this.name = name;
- this.stringRedisTemplate = stringRedisTemplate;
- }
- @Override
- public boolean tryLock(long timeoutSec) {
- // 获取线程的标识
- long threadId = Thread.currentThread().getId();
- // 获取锁
- Boolean success = stringRedisTemplate.opsForValue().setIfAbsent(KEY_PREFIX + name, threadId + "", timeoutSec, TimeUnit.SECONDS);
- return Boolean.TRUE.equals(success);
- }
- @Override
- public void unlock() {
- // 释放锁
- stringRedisTemplate.delete(KEY_PREFIX + name);
- }
- }
复制代码 VoucherOrderServiceImpl
点击查看代码来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |