1、在Jave中,需要考虑到对象的序列化问题,毕竟Redis的读写速度是非常快的,如果不能进行对象的存储,那么这样的意义就不大了
2、准备一个对象的序列化处理类,通过对象的形式进行存储
此程序类有如下实现要求 实现RedisSerializer
//此时定义的序列化操作表示可以序列化所有类的对象
public class RedisObjectSerializer implements RedisSerializer<Object> {
//为了方便对象与数组的转换,所以准备出俩个转换器
private Converter<Object, byte[]> serializingConverter = new SerializingConverter();
private Converter<byte[], Object> deserializingConverter = new DeserializingConverter();
private static final byte[] EMPTY_BYTE_ARRAY = new byte[0];
@Override
public byte[] serialize(Object obj) throws SerializationException {
if (obj == null) {//
return this.EMPTY_BYTE_ARRAY;
}
return this.serializingConverter.convert(obj);//将对象转换为字节数组
}
@Override
public Object deserialize(byte[] data) throws SerializationException {
if (data == null || data.length == 0) {
return null;
}
return deserializingConverter.convert(data);//将字节数组转换为对象
}
}
3、想要让RedisTemplate操作模板知道有这样一个序列化程序类存在,那么久不能采用RedisTemplate的默认形式,需要准备一个单独的程序类进行处理
@ITestOrConfiguration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> getRedisTemplate(RedisConnectionFactory factory){
RedisTemplate<String, Object> redisTemplate=new RedisTemplate<String, Object>();
redisTemplate.setConnectionFactory(factory);
redisTemplate.setKeySerializer(new StringRedisSerializer());//key的序列化类型
redisTemplate.setValueSerializer(new RedisObjectSerializer());//value的序列化类型
return redisTemplate;
}
}
4、定义Member.java类,需要实现Serializable
@SuppressWarnings("serial")
public class Member implements Serializable {
private String hid;
private Integer age;
private Double salary;
private Date birthday;
}
5、定义测试类
@SpringBootTest(classes = StartSpringBootMain.class)
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
public class TestRedis {
@Resource
private RedisTemplate<String, Object> redisTemplate;
@Test
public void testSet() {
Member vo=new Member();
vo.setHid("测试一");;
vo.setAge(20);
vo.setSalary(23123.231);
vo.setBirthday(new Date());
this.redisTemplate.opsForValue().set("hhj",vo);
}
@Test
public void testGet() {
Member vo=(Member) this.redisTemplate.opsForValue().get("hhj");
System.out.println(vo.getAge());
}
}
-------------------------------------------------------------------------------------------------by:青涩知夏 -》》 www.nosum.cn