当前位置:   article > 正文

SpringBoot整合Redisson

springboot整合redisson

个人博客纯净版

SpringBoot整合Redisson | 代码搬运工

Redisson简介

Redisson是架设在Redis基础上的一个Java驻内存数据网格(In-Memory Data Grid)。充分的利用了Redis键值数据库提供的一系列优势,基于Java实用工具包中常用接口,为使用者提供了一系列具有分布式特性的常用工具类。使得原本作为协调单机多线程并发程序的工具包获得了协调分布式多机多线程并发系统的能力,大大降低了设计和研发大规模分布式系统的难度。同时结合各富特色的分布式服务,更进一步简化了分布式环境中程序相互之间的协作。

SpringBoot集成Redisson

1、引入依赖

在SpringBoot项目的pom.xml文件中添加如下依赖:

  1. <dependency>
  2. <groupId>org.redisson</groupId>
  3. <artifactId>redisson</artifactId>
  4. <version>3.8.2</version>
  5. </dependency>

2、代码实现

首先创建RedissonProperties.java类,如下:

  1. @Data
  2. @Component
  3. @ConfigurationProperties(prefix = "redisson")
  4. public class RedissonProperties {
  5. private String address;
  6. private String password;
  7. private int timeout = 3000;
  8. private int database = 0;
  9. private int connectionPoolSize = 64;
  10. private int connectionMinimumIdleSize=10;
  11. }

然后创建Redisson配置类,如下:

  1. @Configuration
  2. @ConditionalOnClass(Config.class)
  3. @EnableConfigurationProperties(RedissonProperties.class)
  4. public class RedissonConfig {
  5. @Autowired
  6. private RedissonProperties redissonProperties;
  7. /**
  8. * 单机模式自动装配
  9. * @return
  10. */
  11. @Bean
  12. RedissonClient redissonClient() {
  13. Config config = new Config();
  14. config.setCodec(new StringCodec());
  15. SingleServerConfig serverConfig = config.useSingleServer()
  16. .setAddress(redissonProperties.getAddress())
  17. .setTimeout(redissonProperties.getTimeout())
  18. .setConnectionPoolSize(redissonProperties.getConnectionPoolSize())
  19. .setConnectionMinimumIdleSize(redissonProperties.getConnectionMinimumIdleSize());
  20. if(StringUtils.isNotEmpty(redissonProperties.getPassword())) {
  21. serverConfig.setPassword(redissonProperties.getPassword());
  22. }
  23. return Redisson.create(config);
  24. }
  25. }

Redisson分布式锁工具类如下:

  1. /**
  2. * Redisson分布式锁工具类
  3. */
  4. @Component
  5. public class RedissonUtil {
  6. @Autowired
  7. private RedissonClient redissonClient;
  8. /**
  9. * 加锁
  10. * @param lockKey
  11. * @return
  12. */
  13. public RLock lock(String lockKey) {
  14. RLock lock = redissonClient.getLock(lockKey);
  15. lock.lock();
  16. return lock;
  17. }
  18. /**
  19. * 带超时的锁
  20. * @param lockKey
  21. * @param timeout 超时时间 单位:秒
  22. */
  23. public RLock lock(String lockKey, int timeout) {
  24. RLock lock = redissonClient.getLock(lockKey);
  25. lock.lock(timeout, TimeUnit.SECONDS);
  26. return lock;
  27. }
  28. /**
  29. * 带超时的锁
  30. * @param lockKey
  31. * @param unit 时间单位
  32. * @param timeout 超时时间
  33. */
  34. public RLock lock(String lockKey, TimeUnit unit ,int timeout) {
  35. RLock lock = redissonClient.getLock(lockKey);
  36. lock.lock(timeout, unit);
  37. return lock;
  38. }
  39. /**
  40. * 尝试获取锁
  41. * @param lockKey
  42. * @param waitTime 最多等待时间
  43. * @param leaseTime 上锁后自动释放锁时间
  44. * @return
  45. */
  46. public boolean tryLock(String lockKey, int waitTime, int leaseTime) {
  47. RLock lock = redissonClient.getLock(lockKey);
  48. try {
  49. return lock.tryLock(waitTime, leaseTime, TimeUnit.SECONDS);
  50. } catch (InterruptedException e) {
  51. return false;
  52. }
  53. }
  54. /**
  55. * 尝试获取锁
  56. * @param lockKey
  57. * @param unit 时间单位
  58. * @param waitTime 最多等待时间
  59. * @param leaseTime 上锁后自动释放锁时间
  60. * @return
  61. */
  62. public boolean tryLock(String lockKey, TimeUnit unit, int waitTime, int leaseTime) {
  63. RLock lock = redissonClient.getLock(lockKey);
  64. try {
  65. return lock.tryLock(waitTime, leaseTime, unit);
  66. } catch (InterruptedException e) {
  67. return false;
  68. }
  69. }
  70. /**
  71. * 释放锁
  72. * @param lockKey
  73. */
  74. public void unlock(String lockKey) {
  75. RLock lock = redissonClient.getLock(lockKey);
  76. lock.unlock();
  77. }
  78. /**
  79. * 释放锁
  80. * @param lock
  81. */
  82. public void unlock(RLock lock) {
  83. lock.unlock();
  84. }
  85. }

3、配置

在application.yml配置文件中添加如下依赖:

  1. redisson:
  2. address: redis://127.0.0.1:6379
  3. timeout: 3000
  4. database: 0
  5. connectionPoolSize: 4
  6. connectionMinimumIdleSize: 4
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号