Redis
主页 > 数据库 > Redis >

Redisson 主从一致性问题介绍

2022-08-26 | 佚名 | 点击:

Redisson 主从一致性

Java 实现 mutilLock

RedissonConfig.java

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

package com.hmdp.config;

import org.redisson.Redisson;

import org.redisson.api.RedissonClient;

import org.redisson.config.Config;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

@Configuration

public class RedissonConfig {

    @Bean

    public RedissonClient redissonClient() {

        // 配置

        Config config = new Config();

        // 地址 & 密码

        config.useSingleServer().setAddress("redis://ip:端口").setPassword("pwd");

        // 创建 RedissonClient 对象

        return Redisson.create(config);

    }

    @Bean

    public RedissonClient redissonClient2() {

        // 配置

        Config config = new Config();

        // 地址 & 密码

        config.useSingleServer().setAddress("redis://ip:端口").setPassword("pwd");

        // 创建 RedissonClient 对象

        return Redisson.create(config);

    }

    @Bean

    public RedissonClient redissonClient3() {

        // 配置

        Config config = new Config();

        // 地址 & 密码

        config.useSingleServer().setAddress("redis://ip:端口").setPassword("pwd");

        // 创建 RedissonClient 对象

        return Redisson.create(config);

    }

}

TestRedisson.java

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

package com.hmdp;

import lombok.extern.slf4j.Slf4j;

import org.junit.jupiter.api.BeforeEach;

import org.junit.jupiter.api.Test;

import org.redisson.api.RLock;

import org.redisson.api.RedissonClient;

import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;

import java.util.concurrent.TimeUnit;

@Slf4j

@SpringBootTest

public class TestRedisson {

    @Resource

    private RedissonClient redissonClient;

    @Resource

    private RedissonClient redissonClient2;

    @Resource

    private RedissonClient redissonClient3;

    private RLock lock;

    @BeforeEach

    void setUp() {

        RLock lock1 = redissonClient.getLock("order");

        RLock lock2 = redissonClient2.getLock("order");

        RLock lock3 = redissonClient3.getLock("order");

        // 创建连锁 multiLock

        lock = redissonClient.getMultiLock(lock1, lock2, lock3);

    }

    @Test

    void method1() throws InterruptedException {

        // 尝试获取锁

        boolean isLock = lock.tryLock(1L, TimeUnit.SECONDS);

        if (!isLock) {

            log.error("获取锁失败 .... 1");

            return;

        }

        try {

            log.info("获取锁成功 .... 1");

            method2();

            log.info("开始执行业务 .... 1");

        } finally {

            log.warn("准备释放锁 .... 1");

            lock.unlock();

        }

    }

    void method2() {

        // 尝试获取锁

        boolean isLock = lock.tryLock();

        if (!isLock) {

            log.error("获取锁失败 .... 2");

            return;

        }

        try {

            log.info("获取锁成功 .... 2");

            log.info("开始执行业务 .... 2");

        } finally {

            log.warn("准备释放锁 .... 2");

            lock.unlock();

        }

    }

}

跟踪源码,我们发现只有所有的锁都获取成功了才会返回 true

原文链接:https://juejin.cn/post/7135613701951848461
相关文章
最新更新