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(); template.setKeySerializer(stringRedisSerializer); template.setHashKeySerializer(stringRedisSerializer); template.setValueSerializer(jackson2JsonRedisSerializer); 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);
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; } }
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); }
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; } }
|