最近遇到一个业务,就是 需要获取数据库最新的一条数据,通过计算之后,新增入数据库数据库,由于可能会遇到并发问题就就决定用redisson搭配IdWorker进行倒叙查询,这样获取到的数据永远都是最新的
使用redisson的前提是要安装redis的
导入依赖
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.13.1</version>
</dependency><!-- 分布式锁 Redisson -->
编写配置文件
下面是通过nacos配置文件注入属性,我们可以先把他们写死
@Data
@ConfigurationProperties(prefix = "spring.redis")
@Configuration
public class RedissonConfig {
//IP地址
public String host;
//端口号
public String port;
//密码
public String password;
@Bean(destroyMethod = "shutdown")
RedissonClient redissonClient() throws IOException {
Config config = new Config();
config.useSingleServer()
.setAddress("redis://" + host + ":" + port)
.setPassword(password);
return Redisson.create(config);
}
}
注入实例
@Autowired
private RedissonClient redissonClient;
public void test(){
// 锁应该细粒度化,具体的缓存存的就是具体的对应对象
RLock rLock = redissonClient.getLock("operateBalanceInfo-lock");
rLock.lock();
try {
// 需要锁住的方法或者代码
//在这里就可以写获取数据库最新数据和插入数据库操作
//获取时一定要通过IdWorker生成的id进行倒叙,使用时间戳的话会出现问题
}finally {
rLock.unlock();
}
}
获取唯一id,可以保证在分布式时id不会重复,前提是不能时间不能回拨
IdWorker.getId();
使用上面方法需要导入依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
也就是集成mybits-plus,如何集成官网伺候