redis分布式锁之redisson

谁借莪1个温暖的怀抱¢ 2022-05-31 12:22 388阅读 0赞

概述:

关于 redisson详情请移步:https://github.com/mrniko/redisson/wiki

下面通过简单的案例使用redisson的lock。
1、RedissonManager类,管理redisson的初始化等操作。

  1. public class RedissonManager {
  2. private static final String RAtomicName = "genId_";
  3. private static Config config = new Config();
  4. private static Redisson redisson = null;
  5. public static void init(){
  6. try {
  7. config.useClusterServers() //这是用的集群server
  8. .setScanInterval(2000) //设置集群状态扫描时间
  9. .setMasterConnectionPoolSize(10000) //设置连接数
  10. .setSlaveConnectionPoolSize(10000)
  11. .addNodeAddress("127.0.0.1:6379","127.0.0.1:6380");
  12. redisson = Redisson.create(config);
  13. //清空自增的ID数字
  14. RAtomicLong atomicLong = redisson.getAtomicLong(RAtomicName);
  15. atomicLong.set(1);
  16. }catch (Exception e){
  17. e.printStackTrace();
  18. }
  19. }
  20. public static Redisson getRedisson(){
  21. return redisson;
  22. }
  23. /** 获取redis中的原子ID */
  24. public static Long nextID(){
  25. RAtomicLong atomicLong = getRedisson().getAtomicLong(RAtomicName);
  26. atomicLong.incrementAndGet();
  27. return atomicLong.get();
  28. }
  29. }

 2、DistributedRedisLock类,提供锁和解锁方法

  1. public class DistributedRedisLock {
  2. private static Redisson redisson = RedissonManager.getRedisson();
  3. private static final String LOCK_TITLE = "redisLock_";
  4. public static void acquire(String lockName){
  5. String key = LOCK_TITLE + lockName;
  6. RLock mylock = redisson.getLock(key);
  7. mylock.lock(2, TimeUnit.MINUTES); //lock提供带timeout参数,timeout结束强制解锁,防止死锁
  8. System.err.println("======lock======"+Thread.currentThread().getName());
  9. }
  10. public static void release(String lockName){
  11. String key = LOCK_TITLE + lockName;
  12. RLock mylock = redisson.getLock(key);
  13. mylock.unlock();
  14. System.err.println("======unlock======"+Thread.currentThread().getName());
  15. }
  16. }

测试代码:

  1. private static void redisLock(){
  2. RedissonManager.init(); //初始化
  3. for (int i = 0; i < 100; i++) {
  4. Thread t = new Thread(new Runnable() {
  5. @Override
  6. public void run() {
  7. try {
  8. String key = "test123";
  9. DistributedRedisLock.acquire(key);
  10. Thread.sleep(1000); //获得锁之后可以进行相应的处理
  11. System.err.println("======获得锁后进行相应的操作======");
  12. DistributedRedisLock.release(key);
  13. System.err.println("=============================");
  14. } catch (Exception e) {
  15. e.printStackTrace();
  16. }
  17. }
  18. });
  19. t.start();
  20. }
  21. }

测试结果:

“`
======lock======Thread-91
======获得锁后进行相应的操作======

======unlock======Thread-91

======lock======Thread-63
======获得锁后进行相应的操作======

======unlock======Thread-63

======lock======Thread-31
======获得锁后进行相应的操作======

======unlock======Thread-31

======lock======Thread-97
======获得锁后进行相应的操作======

======unlock======Thread-97

======lock======Thread-8
======获得锁后进行相应的操作======

======unlock======Thread-8

“`

发表评论

表情:
评论列表 (有 0 条评论,388人围观)

还没有评论,来说两句吧...

相关阅读

    相关 分布式Redisson入门

    Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布

    相关 分布式Redisson实现

    分布式锁相信大家都已经听过了,常见的方案呢,也就那么几种,今天我们来讲讲使用Redisson框架来实现redis的分布式锁 那么第一个问题来了,为什么不直接使用redis,而

    相关 分布式Redisson

    在分布式环境下,分布式锁的重要性不用多说,其实现方式也各式各样,其中基于Redis来实现最为常用常见,而Redisson则是当前最好的实现者。以下是我基于Redisson中各种