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

什么事分布式事务:

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

分布式思路:

  1. 通过在redis设置一个唯一锁,如果存在key,则认为有其他客户端在使用,等待锁释放。
  2. 如果不存在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("无法获得锁");
                }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容