Redis缓存服务

项目中的一些配置信息和验证码需要存放到Redis缓存中,为此项目引入Redis。

配置文件

配置文件已经在初始化项目时加入到了application.properties

配置类

config包下创建 RedisConfig

RedisConfig
@Configuration
public class RedisConfig {

@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
template.setConnectionFactory(factory);
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
// key采用String的序列化方式
template.setKeySerializer(stringRedisSerializer);
// hash的key也采用String的序列化方式
template.setHashKeySerializer(stringRedisSerializer);
// value序列化方式采用jackson
template.setValueSerializer(jackson2JsonRedisSerializer);
// hash的value序列化方式采用jackson
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}

工具方法

创建com.swx.easypan.redis包,在该包下创建 RedisUtils 类,其内容如下:

RedisUtils
@Component("redisUtils")
public class RedisUtils<V> {

@Resource
private RedisTemplate<String, V> redisTemplate;

private static final Logger logger = LoggerFactory.getLogger(RedisUtils.class);

/**
* 普通缓存放入
*
* @param key 键
* @param value 值
* @return true成功 false失败
*/
public boolean set(String key, V value) {
try {
redisTemplate.opsForValue().set(key, value);
return true;
} catch (Exception e) {
logger.error("设置redisKey:{}, value:{}失败", key, value);
return false;
}
}

/**
* 有效期缓存放入
*
* @param key 键
* @param value 值
* @param time 有效期
* @return true成功 false失败
*/
public boolean setex(String key, V value, long time) {
try {
if (time > 0) {
redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
} else {
set(key, value);
}
return true;
} catch (Exception e) {
logger.error("设置redisKey:{}, value:{}失败", key, value);
return false;
}
}

public V get(String key) {
return key == null ? null : redisTemplate.opsForValue().get(key);
}

/**
* 删除缓存
*
* @param key 键,可以传一个或多个
*/
public void delete(String... key) {
if (key != null && key.length > 0) {
if (key.length == 1) {
redisTemplate.delete(key[0]);
} else {
redisTemplate.delete((Collection<String>) CollectionUtils.arrayToList(key));
}
}
}
}

Redis组件

这里放一些常用的Redis操作

RedisComponent
@Component("redisComponent")
public class RedisComponent {

@Resource
private RedisUtils<Object> redisUtils;

}

系统设置缓存

项目系统有一些默认的设置需要保存到Redis中,提前做缓存

系统设置DTO

SysSettingsDTO
@JsonIgnoreProperties(ignoreUnknown = true)
public class SysSettingsDTO implements Serializable {

private String registerMailTitle = "邮箱验证码";

private String registerEmailContent = "您好,您的邮箱验证码是:%s, 15分钟有效";

private Integer userInitSpace = 5;

public String getRegisterMailTitle() {
return registerMailTitle;
}

public void setRegisterMailTitle(String registerMailTitle) {
this.registerMailTitle = registerMailTitle;
}

public String getRegisterEmailContent() {
return registerEmailContent;
}

public void setRegisterEmailContent(String registerEmailContent) {
this.registerEmailContent = registerEmailContent;
}

public Integer getUserInitSpace() {
return userInitSpace;
}

public void setUserInitSpace(Integer userInitSpace) {
this.userInitSpace = userInitSpace;
}
}

定义常量

静态常量,在com.swx.easypan.entity.constants包下的 Constants 类中定义常量

public class Constants {
public static final String REDIS_KEY_SYS_SETTING = "easypan:syssetting:";
}

系统设置缓存

从Redis缓存中获取设置信息,在RedisComponent 编写获取方法,如果没有新建一个。

@Component("redisComponent")
public class RedisComponent {

@Resource
private RedisUtils<Object> redisUtils;

public SysSettingsDTO getSysSettingDto() {
SysSettingsDTO sysSettingsDto = (SysSettingsDTO) redisUtils.get(Constants.REDIS_KEY_SYS_SETTING);
if (null == sysSettingsDto) {
sysSettingsDto = new SysSettingsDTO();
redisUtils.set(Constants.REDIS_KEY_SYS_SETTING, sysSettingsDto);
}
return sysSettingsDto;
}
}