關係:
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;