StringRedisTemplate 與 RedisTemplate 的區別與關係

關係:

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;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章