当前位置:   article > 正文

Redis 整合中 Redisson 的使用_redisson连接redis集群

redisson连接redis集群

大家好 , 我是苏麟 , 今天带来 Redisson 使用 .

官方文档 :  GitHub - redisson/redisson: Redisson - Easy Redis Java client with features of In-Memory Data Grid. Sync/Async/RxJava/Reactive API. Over 50 Redis based Java objects and services: Set, Multimap, SortedSet, Map, List, Queue, Deque, Semaphore, Lock, AtomicLong, Map Reduce, Bloom filter, Spring Cache, Tomcat, Scheduler, JCache API, Hibernate, RPC, local cache ...

 

引入依赖

  1. <!--https://github.com/redisson/redisson#quick-start-->
  2. <dependency>
  3. <groupId>org.redisson</groupId>
  4. <artifactId>redisson</artifactId>
  5. <version>3.23.2</version>
  6. </dependency>

 yml配置(例如)

  1. #redis 配置
  2. redis:
  3. port: 6379
  4. database: 1
  5. host: localhost

Redisson配置

  1. @Data
  2. @Configuration
  3. @ConfigurationProperties(prefix = "spring.redis")
  4. public class RedissonConfig {
  5. private String host;
  6. private String port;
  7. @Bean
  8. public RedissonClient redissonClient(){
  9. // 1.创建配置
  10. Config config = new Config();
  11. String redissonAddress = String.format("redis:/%s:%s",host,port);
  12. //useClusterServers()集群
  13. //setDatabase() 设置那个redis库
  14. config.useSingleServer().setAddress(redissonAddress).setDatabase(2);
  15. //2.创建实例
  16. RedissonClient redissonClient = Redisson.create(config);
  17. return redissonClient;
  18. }
  19. }

上面不行则用下面的

  1. package com.sl.config;
  2. import lombok.Data;
  3. import org.redisson.Redisson;
  4. import org.redisson.api.RedissonClient;
  5. import org.redisson.config.Config;
  6. import org.redisson.config.SingleServerConfig;
  7. import org.springframework.boot.context.properties.ConfigurationProperties;
  8. import org.springframework.context.annotation.Bean;
  9. import org.springframework.context.annotation.Configuration;
  10. @Data
  11. @Configuration
  12. @ConfigurationProperties(prefix = "spring.redis")
  13. public class RedissonConfig {
  14. private String host;
  15. private String port;
  16. private Integer database;
  17. @Bean
  18. public RedissonClient redissonClient() {
  19. // 1.创建配置
  20. Config config = new Config();
  21. SingleServerConfig singleServerConfig = config.useSingleServer()
  22. .setAddress("redis://" + host + ":" + port)
  23. .setDatabase(database);
  24. //2.创建实例
  25. return Redisson.create(config);
  26. }
  27. }

 


 这里@ConfigurationProperties(prefix = "spring.redis")用法请看 : 读取/加载 properties/yml 配置文件_踏遍三十六岸的博客-CSDN博客


像操作本地集合一样操作Redisson

  1. @SpringBootTest
  2. class UserCenterApplicationTests {
  3. @Resource
  4. private RedissonClient redissonClient;
  5. @Test
  6. void test() {
  7. //list操作 数据存在 JVM 内存中
  8. List<String> list = new ArrayList<>();
  9. list.add("sl");
  10. System.out.println(list.get(0));
  11. list.remove(0);
  12. //数据存在 Redis 内存中
  13. //getList()取列表名字 因为 redis 中是 key-value 存在
  14. RList<String> rList = redissonClient.getList("redisson-list");
  15. rList.add("sl-redisson");
  16. System.out.println(rList.get(0));
  17. rList.remove(0);
  18. }
  19. @Test
  20. void hashTest(){
  21. //哈希操作
  22. RMap<String, String> rMap = redissonClient.getMap("LiJiaWei");
  23. //设置 map 中的 key - value
  24. rMap.put("sl","1");
  25. rMap.put("jw","2");
  26. System.out.println(redissonClient.getMap("LiJiaWei").get("sl"));
  27. System.out.println(redissonClient.getMap("LiJiaWei").get("jw"));
  28. redissonClient.getMap("LiJiaWei").remove("sl");
  29. redissonClient.getMap("LiJiaWei").remove("jw");
  30. }
  31. //......
  32. //其他操作都一样
  33. }

Redssion 分布式锁

定时任务可以看(或者其他的) :  Spring Schedular 定时任务_踏遍三十六岸的博客-CSDN博客

  1. @Component
  2. public class PreScheduled {
  3. @Resource
  4. private RedissonClient redissonClient;
  5. /**
  6. * 每天执行
  7. */
  8. @Scheduled(cron = "0 59 23 * * *")
  9. public void doCah() {
  10. //获取锁 , 可重入 指定锁的名称
  11. RLock lock = redissonClient.getLock("sl:redisson:cache:lock");
  12. try {
  13. /**
  14. * 只有一个线程获取到锁
  15. * 等待时间 , 执行时间 , 毫秒
  16. */
  17. if (lock.tryLock(0, 30000L, TimeUnit.MILLISECONDS)) {
  18. //...
  19. }
  20. } catch (InterruptedException e) {
  21. e.printStackTrace();
  22. } finally {
  23. /**
  24. * 只能释放自己加的锁
  25. */
  26. if (lock.isHeldByCurrentThread()) {
  27. lock.unlock();
  28. }
  29. }
  30. }
  31. }

感兴趣的小伙伴可以自行了解下面知识!

Redisson的可重入锁原理

Redisson看门狗WatchDog机制

Redisson的multiLock原理


这期就到这里 , 拜拜 !

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/828342
推荐阅读
相关标签
  

闽ICP备14008679号