redis开发帮助组件
组件编码
hzero-starter-redis
一、简介
1.1 概述
hzero-starter-redis
redis开发帮助组件,是从原hzero-starter-core
辅助开发组件抽离出来的组件,解决了辅助开发包对redis的强依赖。
1.2 组件坐标
<dependency>
<groupId>org.hzero.starter</groupId>
<artifactId>hzero-starter-redis</artifactId>
<version>${hzero.starter.version}</version>
</dependency>
1.3 特性
RedisHelper
封装了redis操作的常用方法- 提供了基于redis的消息队列工具。
二、使用指南
2.1 redis
- redis 包提供封装好的
RedisHelper
工具类,可以方便地操作各类redis数据结构。 - 同时,提供了线程安全的支持动态切换 redis database 的
DynamicRedisHelper
,DynamicRedisHelper
继承自RedisHelper
,在代码中只需注入RedisHelper
即可。 - 动态切 redis database 的功能默认开启,可配置
hzero.redis.dynamic-database=false
关闭该功能。 - 在需要切换 database 的地方,调用
redisHelper.setCurrentDatabase(int database)
即可,同时必须调用redisHelper.clearCurrentDatabase()
清除当前操作 database,否则当前线程将一直使用这个 database ,对于同一个线程内多次 redis 操作可能会有影响。
2.2 cache
cache下主要提供了一个功能,使用注解根据配置从缓存中获取值。
-
此功能默认不开启,可配置
hzero.cache-value.enable=true
来开启该功能。 -
使用方式,比如,将用户ID和用户名缓存到redis中,大部分情况下我们只有用户ID,此时我们可以根据用户ID来获取用户名。
主要使用到的注解有两个:@CacheValue
和@ProcessCacheValue
。对于某个DTO,有字段用到该功能时,需要实现Cacheable
接口,标识为可从缓存中取值的对象,这样便于对头行结构中的字段进行处理。 -
如下,DTO中有一个 createdBy 字段,我们需要根据该创建人ID获取到创建人姓名,通过
@CacheValue
来从redis中获取值:key
指定缓存的key,支持占位符的形式;primaryKey
指定根据哪个字段匹配;searchKey
指定从redis结构中要查找的字段;structure
指定redis的数据结构。缓存的数据结构不同,CacheValue的配置也不同,具体可参考源码注释详解。
public class DemoDTO implements Cacheable {
private Long createdBy; // 创建人ID
@CacheValue(key = HZeroCacheKey.USER, primaryKey = "createdBy", searchKey = "realName",
structure = CacheValue.DataStructure.MAP_OBJECT)
private String createdUserName; // 创建人姓名
// getter/setter
}
- 配置好后,还需在查询的 service 或 controller 的方法上加上
@ProcessCacheValue
注解,以此进行AOP拦截处理。
2.3 消息队列
配置:
hzero:
redis:
# 开启消息队列, 默认值false
redis-queue: true
# 消息队列默认使用的db, 默认值1
queue-db: 1
生产者产生消息:调用org.hzero.core.redis.RedisQueueHelper
的push``pushAll
方法,可以将消息推送到消息队列。其中key是消息队列的消息分组标识,需要全局唯一。
消息者消费消息:
- 逐条消费
实现接口org.hzero.core.redis.handler.IQueueHandler
,类添加注解org.hzero.core.redis.handler.QueueHandler
,value指定消息生产者对应的key
@QueueHandler("demo")
public class DemoListener implements IQueueHandler {
@Override
public void process(String message) {
System.out.println(message);
}
}
- 批量消费
实现接口org.hzero.core.redis.handler.IBatchQueueHandler
,类添加注解org.hzero.core.redis.handler.QueueHandler
,value指定消息生产者对应的key
@QueueHandler("demo")
public class DemoListener implements IBatchQueueHandler {
@Override
public void process(List<String> messages) {
for (String message : messages) {
System.out.println(message);
}
}
}
三、版本更新日志
- 1.1.0.RELEASE [2019-11-08]