赞
踩
大家好 , 我是苏麟 , 今天带来 Redisson 使用 .
引入依赖
- <!--https://github.com/redisson/redisson#quick-start-->
- <dependency>
- <groupId>org.redisson</groupId>
- <artifactId>redisson</artifactId>
- <version>3.23.2</version>
- </dependency>
yml配置(例如)
- #redis 配置
- redis:
- port: 6379
- database: 1
- host: localhost
Redisson配置
- @Data
- @Configuration
- @ConfigurationProperties(prefix = "spring.redis")
- public class RedissonConfig {
-
- private String host;
-
- private String port;
-
- @Bean
- public RedissonClient redissonClient(){
- // 1.创建配置
- Config config = new Config();
-
- String redissonAddress = String.format("redis:/%s:%s",host,port);
-
- //useClusterServers()集群
- //setDatabase() 设置那个redis库
- config.useSingleServer().setAddress(redissonAddress).setDatabase(2);
-
-
- //2.创建实例
- RedissonClient redissonClient = Redisson.create(config);
- return redissonClient;
- }
- }
上面不行则用下面的
- package com.sl.config;
-
- import lombok.Data;
- import org.redisson.Redisson;
- import org.redisson.api.RedissonClient;
- import org.redisson.config.Config;
- import org.redisson.config.SingleServerConfig;
- import org.springframework.boot.context.properties.ConfigurationProperties;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
-
- @Data
- @Configuration
- @ConfigurationProperties(prefix = "spring.redis")
- public class RedissonConfig {
-
- private String host;
-
- private String port;
-
- private Integer database;
-
- @Bean
- public RedissonClient redissonClient() {
- // 1.创建配置
- Config config = new Config();
- SingleServerConfig singleServerConfig = config.useSingleServer()
- .setAddress("redis://" + host + ":" + port)
- .setDatabase(database);
-
- //2.创建实例
- return Redisson.create(config);
- }
- }
这里@ConfigurationProperties(prefix = "spring.redis")用法请看 : 读取/加载 properties/yml 配置文件_踏遍三十六岸的博客-CSDN博客
像操作本地集合一样操作Redisson
-
- @SpringBootTest
- class UserCenterApplicationTests {
-
- @Resource
- private RedissonClient redissonClient;
-
- @Test
- void test() {
- //list操作 数据存在 JVM 内存中
- List<String> list = new ArrayList<>();
- list.add("sl");
- System.out.println(list.get(0));
- list.remove(0);
-
- //数据存在 Redis 内存中
- //getList()取列表名字 因为 redis 中是 key-value 存在
- RList<String> rList = redissonClient.getList("redisson-list");
- rList.add("sl-redisson");
- System.out.println(rList.get(0));
- rList.remove(0);
-
- }
-
-
- @Test
- void hashTest(){
-
- //哈希操作
- RMap<String, String> rMap = redissonClient.getMap("LiJiaWei");
- //设置 map 中的 key - value
- rMap.put("sl","1");
- rMap.put("jw","2");
-
- System.out.println(redissonClient.getMap("LiJiaWei").get("sl"));
- System.out.println(redissonClient.getMap("LiJiaWei").get("jw"));
-
- redissonClient.getMap("LiJiaWei").remove("sl");
- redissonClient.getMap("LiJiaWei").remove("jw");
- }
-
- //......
- //其他操作都一样
- }
Redssion 分布式锁
定时任务可以看(或者其他的) : Spring Schedular 定时任务_踏遍三十六岸的博客-CSDN博客
- @Component
- public class PreScheduled {
-
-
- @Resource
- private RedissonClient redissonClient;
-
-
- /**
- * 每天执行
- */
- @Scheduled(cron = "0 59 23 * * *")
- public void doCah() {
- //获取锁 , 可重入 指定锁的名称
- RLock lock = redissonClient.getLock("sl:redisson:cache:lock");
-
-
- try {
- /**
- * 只有一个线程获取到锁
- * 等待时间 , 执行时间 , 毫秒
- */
- if (lock.tryLock(0, 30000L, TimeUnit.MILLISECONDS)) {
-
- //...
-
- }
- } catch (InterruptedException e) {
- e.printStackTrace();
- } finally {
- /**
- * 只能释放自己加的锁
- */
- if (lock.isHeldByCurrentThread()) {
- lock.unlock();
- }
- }
- }
- }
感兴趣的小伙伴可以自行了解下面知识!
Redisson的可重入锁原理
Redisson看门狗WatchDog机制
Redisson的multiLock原理
这期就到这里 , 拜拜 !
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。