关系:
StringRedisTemplate 继承 redisTemplate
所以StringRedisTemplate 其实就是RedisTemplate 的装饰者[是一个典型的装饰者模式]
public class StringRedisTemplate extends RedisTemplate<String, String> {}
区别 : 序列化的方式不同
StringRedisTemplate 采用的是StringRedisSerializer 其原理其实就是 new String(byte[])
RedisTemplate 采用就是JDK 的序列化.直接就是二进制
public class StringRedisTemplate extends RedisTemplate<String, String> {
/**
* Constructs a new <code>StringRedisTemplate</code> instance. {@link #setConnectionFactory(RedisConnectionFactory)}
* and {@link #afterPropertiesSet()} still need to be called.
*/
public StringRedisTemplate() {
setKeySerializer(RedisSerializer.string());
setValueSerializer(RedisSerializer.string());
setHashKeySerializer(RedisSerializer.string());
setHashValueSerializer(RedisSerializer.string());
}
.... 省略
}
public class StringRedisSerializer implements RedisSerializer<String> {
... 省略部分方法
/*
* (non-Javadoc)
* @see org.springframework.data.redis.serializer.RedisSerializer#deserialize(byte[])
*/
@Override
public String deserialize(@Nullable byte[] bytes) {
return (bytes == null ? null : new String(bytes, charset));
}
/*
* (non-Javadoc)
* @see org.springframework.data.redis.serializer.RedisSerializer#serialize(java.lang.Object)
*/
@Override
public byte[] serialize(@Nullable String string) {
return (string == null ? null : string.getBytes(charset));
}
}
存储的redis库中的结果:
存储的是字符串
存储的都是不认识的编码
所以一般情况下推荐使用StringRedisTemplate;
版权声明:本文为zhaluo_dehezi原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。