Redisson框架学习笔记,记录了通过Redisson框架操作Redis,Redisson涉及到的功能很多,可根据需要参考官方文档。
文章目录
Redisson框架简介
什么是Redisson框架?
Redisson是架设在Redis基础上的一个Java主内存数据网格(In-Memory Data Grid)。在Java实用工具包中常用接口的基础上,为使用者提供了一系列具有分布式特性的常用工具类。
Redisson在基于NIO的Netty框架上,充分利用了Redis键值数据库提供的一系列优势。
简化了分布式环境中程序相互之间的协作。
- Redisson官网:https://redisson.org/
- Redisson Github:https://github.com/redisson/
- Redisson Wiki(重点学习):https://github.com/redisson/redisson/wiki
Redisson框架实现具体步骤
Spring Schedule+Redisson分布式锁实现定时关单流程
用到Redisson中的锁操作。
- 添加依赖
<dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-avro</artifactId> <version>2.9.0</version> </dependency>
- 在common包下新建RedissonManager.java类(@Component),用于生成和管理Redisson对象。
private Config config = new Config(); private Redisson redisson = null; public Redisson getRedisson(){ return redisson; } private static String redisIp = PropertiesUtil.getProperty("redis.ip"); private static InteerredisPort=Integer.parseInt(PropertiesUtil.getProperty("redis.port")); private static String redis2Ip = PropertiesUtil.getProperty("redis2.ip"); private static Inteerredis2Port=Integer.parseInt(PropertiesUtil.getProperty("redis2.port")); //被@PostConstruct修饰的方法会在构造函数之后运行。 @PostConstruct private void init(){ try{ config.useSingleServer().setAddress(new StringBuilder().append(redisIp).append(":").append(redisPort).toString()); redisson = (Redisson)Redisson.create(config); log.info("初始化Redisson结束"); }catch (Exception e){ log.error("redisson init error",e); } }
- 进入CloseOrderTask.java类,通过调用Redisson来实现redis分布式锁。
@Autowired private RedissonManager redissonManager; @Scheduled(cron="0 */1 * * * ?") public void closeOrderTaskV4(){ RLock lock = redissonManager.getRedisson().getLock(Const.REDIS_LOCK_TASK_LOCK); boolean getLock = false; try{ //尝试获得锁时最多等待0秒,5秒释放,使用秒为单位 if(getLock = lock.tryLock(0,5,TimeUnit.SECONDS)){ log.info("Redisson获取到分布式锁:{}",Const.REDIS_LOCK.CLOSE_ORDER_TASK_LOCK); int hour = Integer.parseInt(PropertiesUtil.getProperty("close.order.task.time.hour","2")); iOrderService.closeOrder(hour); }else{ log.info("Redisson没有获取到分布式锁:{}",Const.REDIS_LOCK.CLOSE_ORDER_TASK_LOCK); } }catch (InterruptedException e){ log.info("Redisson分布式锁获取异常",e); }finally{ if(){ if(!getLock){ return; } lock.unlock(); log.info("Redisson分布式释放锁"); } } }
Redisson框架的相关知识
请访问官方WIKI,里面包含了各种说明和DEMO:
https://github.com/redisson/redisson/wiki/目录