feat(game): 增加按时间查询游戏投注记录功能
- 新增 GameBettingDetailsDTO 类,用于游戏投注详情查询 - 在 GameBettingDetailsMapper 中添加按时间查询的 SQL 语句 - 修改 GameBettingDetailsServiceImpl 中的查询方法,支持按时间查询 - 更新相关控制器和接口,增加按时间查询游戏记录的功能main-cf
parent
d59232a9cc
commit
34f6ad895a
|
@ -1,71 +0,0 @@
|
||||||
package com.ff.base.core.redis;
|
|
||||||
|
|
||||||
import org.redisson.api.RLock;
|
|
||||||
import org.redisson.api.RedissonClient;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* redis锁
|
|
||||||
*
|
|
||||||
* @author shi
|
|
||||||
* @date 2025/03/18
|
|
||||||
*/
|
|
||||||
@Component
|
|
||||||
public class RedisCacheLock {
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private RedissonClient redissonClient;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取 Redis 分布式锁
|
|
||||||
*
|
|
||||||
* @param key 锁的唯一标识(Redis 键),用于标识要获取的锁
|
|
||||||
* @return 返回一个 `RLock` 对象,表示分布式锁
|
|
||||||
*
|
|
||||||
* `RLock` 是 Redisson 提供的分布式锁对象,可以用于多线程或分布式环境中,确保某一时刻只有一个线程(或服务实例)可以执行某个操作。
|
|
||||||
*/
|
|
||||||
public RLock getLock(String key) {
|
|
||||||
return redissonClient.getLock(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 尝试加锁(可重入锁)
|
|
||||||
*
|
|
||||||
* @param key 锁的唯一标识(Redis 键)
|
|
||||||
* @param waitTime 等待获取锁的最大时间(单位:秒)。如果在指定的时间内未能获取锁,则返回 `false`。
|
|
||||||
* @param leaseTime 锁的有效时间(单位:秒)。获取到锁之后,锁会在 `leaseTime` 时间后自动释放,避免死锁。
|
|
||||||
* @return `true` 表示成功获取锁,`false` 表示未能在指定时间内获取到锁
|
|
||||||
*
|
|
||||||
* 该方法是可重入锁,意味着同一个线程可以多次加锁而不会发生死锁。`tryLock` 方法不会阻塞,能够防止线程长时间等待。
|
|
||||||
* 如果锁已经被其他线程获取,当前线程将会等待 `waitTime` 期间,如果在此时间内无法获取锁,方法将返回 `false`。
|
|
||||||
*/
|
|
||||||
public boolean tryLock(String key, long waitTime, long leaseTime) {
|
|
||||||
RLock lock = redissonClient.getLock(key);
|
|
||||||
try {
|
|
||||||
return lock.tryLock(waitTime, leaseTime, TimeUnit.SECONDS);
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
Thread.currentThread().interrupt(); // 恢复线程中断状态
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 释放锁
|
|
||||||
*
|
|
||||||
* @param key 锁的唯一标识(Redis 键)
|
|
||||||
*
|
|
||||||
* 该方法用于释放已经获取的分布式锁。如果当前线程持有锁(即 `RLock` 对象的 `isHeldByCurrentThread()` 方法返回 `true`),
|
|
||||||
* 则会释放锁。如果不是当前线程持有锁,则该方法不做任何操作,避免抛出异常。
|
|
||||||
*/
|
|
||||||
public void unlock(String key) {
|
|
||||||
RLock lock = redissonClient.getLock(key);
|
|
||||||
if (lock.isHeldByCurrentThread()) {
|
|
||||||
lock.unlock(); // 释放锁
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
Loading…
Reference in New Issue