| | |
| | | { |
| | | return redisTemplate.keys(pattern); |
| | | } |
| | | |
| | | /** |
| | | * 尝试获取锁 |
| | | * |
| | | * @param lockKey 锁的键 |
| | | * @param requestId 请求标识,用于区分不同的锁持有者 |
| | | * @param expireTime 锁的过期时间,单位为毫秒 |
| | | * @return 如果成功获取锁,返回 true;否则返回 false |
| | | */ |
| | | public boolean acquireLock(String lockKey, String requestId, long expireTime) { |
| | | // 使用 setIfAbsent 方法尝试设置键值对,如果键不存在则设置成功并返回 true,否则返回 false |
| | | Boolean result = redisTemplate.opsForValue().setIfAbsent(lockKey, requestId, expireTime, TimeUnit.MILLISECONDS); |
| | | return result != null && result; |
| | | } |
| | | |
| | | /** |
| | | * 释放锁 |
| | | * |
| | | * @param lockKey 锁的键 |
| | | * @param requestId 请求标识,用于确保只有锁的持有者才能释放锁 |
| | | * @return 如果成功释放锁,返回 true;否则返回 false |
| | | */ |
| | | public boolean releaseLock(String lockKey, String requestId) { |
| | | // 获取当前锁的值 |
| | | String currentValue = (String) redisTemplate.opsForValue().get(lockKey); |
| | | // 检查当前锁的值是否等于请求标识,确保只有锁的持有者才能释放锁 |
| | | if (currentValue != null && currentValue.equals(requestId)) { |
| | | // 删除锁键 |
| | | return Boolean.TRUE.equals(redisTemplate.delete(lockKey)); |
| | | } |
| | | return false; |
| | | } |
| | | } |