一、自定义RedisTemplate
直接传递对象会报一个序列化的错误,所有的对象的保存需要序列化。
对象序列化完成后,成功执行:
但此时,redis服务端保存的是乱码:
原因是implement Serializable实现序列化用的是jdbc的序列化,解决方法是自定义redisTemplate,配置具体的序列化方式。这是一个固定模板,企业中直接使用。
package com.kuang.config;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.net.UnknownHostException;
@Configuration
public class RedisConfig {
@Bean
@SuppressWarnings("all")
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory)
throws UnknownHostException{
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);
//String的序列化
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;
}
}
自定义redisTemplate后再来测试
可以看到,新插入的user2在服务端并没有乱码。
在企业开发中一般不会使用原生的api,例如opsForValue,opsForList,opsForSet,opsForHash,opsForZset,opsForGeo,opsForHyperLogLog等,一般会写一个工具类utils封装。该utils代码网上有,此处不再粘贴。
二、Redis.conf详解
服务端启动的时候通过配置文件来启动。
1.单位:
2.包含其他配置文件
3.网络
4.通用配置
5.快照
用于持久化,即在规定时间内执行了多少次操作则持久化到.rdb .aof文件。
config set requirepass "123456" #设置密码
config get requirepass #获取redis的密码,若没权限则要先登录
auth 123456 #登录