标签:分布式 事务 red system return support ISE list nsa
  @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)
            throws UnknownHostException {
        RedisTemplate<Object, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory);
        template.setEnableTransactionSupport(true);//开启支持事务 multi exec
        return template;
    }
  /**
     * redis 乐观锁 + 事务 的实现
     */
    @Test
    public void lockDemo1() {
        try {
            redisTemplate.watch("name");
            redisTemplate.multi();
            //进行事务代码
            // .....
            // .....
            // .....
            //最后提交事务
            List<Object> exec = redisTemplate.exec();
            if (exec.isEmpty()) {
                System.out.println("操作失败");
            }
        } catch (RuntimeException e) {
            //出现异常撤销
            redisTemplate.discard();
        } finally {
            redisTemplate.unwatch();
        }
    }
setnx性质:如果不存在那么返回 0 ,不存在返回 1 。
 /**
     * redis 使用setnx命令实现分布式锁
     */
    @Test
    public void lockDemo() {
        Supplier<Boolean> getLock = () -> {
            Boolean b = redisTemplate.opsForValue().setIfAbsent("lock-name", "lock-val");
            return b != null && b;
        };
        try {
            //循环获取分布式锁
            while (!getLock.get()) ;
            //进行的业务代码
            synchronized (RedisTest.class) {
                //.....
            }
        } finally {
            //防止异常,释放锁
            redisTemplate.delete("lock-name");
        }
    }
标签:分布式 事务 red system return support ISE list nsa
原文地址:https://www.cnblogs.com/wongdw/p/12866415.html