Java redis 分布式事务,2019-11-30:Redis实现分布式事务

什么事分布式事务:

多个服务同时修改记录时,保证数据的一致性.

分布式思路:

通过在redis设置一个唯一锁,如果存在key,则认为有其他客户端在使用,等待锁释放。

如果不存在key,说明没有客户端使用,可以执行任务,执行完毕,解锁,删除key.

存在的问题1 :

获得锁后,服务宕机,由于key是唯一的,所以无法被删除.

问题1解决方案

设置过期时间。

存在的问题2

任务执行过长,超过过期时间。

问题2解决方案

通过一个守护线程,给线程续命.

存在的问题3:

任务执行造成死循环,会造成无限续命.

问题3解决方案 :

设置最大续命时间。

使用redisTemplate代码如下

String uuid = UUID.randomUUID().toString();

boolean key = redisTemplate.opsForValue().setIfAbsent("key",uuid,5, TimeUnit.SECONDS);

if(key){

log.info("获得锁.");

int current =(int)redisTemplate.opsForValue().get("foodNum");

log.info("当前值:"+current);

redisTemplate.opsForValue().increment("foodNum");

redisTemplate.opsForList().rightPush("list","portal:"+current);

log.info("更新值:"+redisTemplate.opsForValue().get("foodNum"));

redisTemplate.delete("key");

}else {

log.info("无法获得锁");

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值