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;


版权声明:本文为zhaluo_dehezi原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。