springboot中即成redis
第一步添加依赖(本项目使用gradle构建)
compile('org.springframework.boot:spring-boot-starter-data-redis')
第二步配置必要的参数(application.yml)
spring:
redis:
database:0 //数据库名字
host:123.56.76.154 //ip地址
pool: //链接池
max-active:8。 //最大链接数
max-idle:8 //连接池中的最大空闲连接
max-wait:-1 //连接池最大阻塞等待时间(使用负值表示没有限制)
min-idle:0 //连接池中的最小空闲连接
timeout:10000000 //失效时间
port:6379 //服务器端口
password: // Redis服务器连接密码(默认为空)
此时已经可以在springboot 中使用RedisTemplate
@Override
public void saveUser(User user) {
logger.info("redis 添加 :" + user);
redisTemplate.opsForValue().set(user.getId(), user);
}
@Override
public User selectUser(String id) {
logger.info("redis 查找 :" + id);
User user = (User) redisTemplate.opsForValue().get(id);
logger.info("redis 查找 :" + user);
return user;
}
@Override
public void deleteUser(String id) {
logger.info("redis 删除 :" + id);
redisTemplate.delete(id);
}
RedisTemplate类进行创建 key-value记录时,redis存储的是乱码形式,但是并不影响 读取值,只是数据库记录的可读性几乎为零了
如下:
key:\xAC\xED\x00\x05t\x00\x0Cdfadsfasf464
第三步需要给redis编写配置类,主要有三个方面
1.key生成策略
2.缓存管理器
3.反编译方法
本项目缓存配置文件如下
@Configuration
@EnableCaching//启用缓存
public class RedisConfig extends CachingConfigurerSupport {
@Bean
public KeyGenerator keyGenerator() {
return new KeyGenerator() {
@Override
public Object generate(Object target, Method method, Object... params){
StringBuilder sb = new StringBuilder();
sb.append(target.getClass().getName());
sb.append(method.getName());
for (Object obj : params) {
sb.append(obj.toString());
}
return sb.toString();
} };
}
/** * 缓存管理器.
* @param redisTemplate
* @return */
@Bean
public CacheManager cacheManager(RedisTemplate redisTemplate) {
CacheManager cacheManager = new RedisCacheManager(redisTemplate);
return cacheManager;
}
/** * redis模板操作类,类似于jdbcTemplate的一个类;
* 虽然CacheManager也能获取到Cache对象,但是操作起来没有那么灵活;
* 这里在扩展下:RedisTemplate这个类不见得很好操作,我们可以在进行扩展一个我们
* 自己的缓存类,比如:RedisStorage类;
* @param factory : 通过Spring进行注入,参数在application.properties进行配置;
* @return */
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory factory) {
StringRedisTemplate template = new StringRedisTemplate(factory); //RedisTemplate的子类
//反编译具体实现(jackson)
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);
//倒入编码的具体实现
template.setValueSerializer(jackson2JsonRedisSerializer);
//执行配置
template.afterPropertiesSet();
return template;
}
}