DATAREDIS-713 - Introduce constants for commonly used StringSerializers.

We now provide constant StringSerializers for US-ASCII, ISO 8859-1 and UTF-8 encoding.

Original Pull Request: #288
This commit is contained in:
Mark Paluch
2017-10-17 15:41:40 +02:00
committed by Christoph Strobl
parent 1e2a0f858f
commit 841d8ef447
32 changed files with 168 additions and 72 deletions

View File

@@ -95,7 +95,7 @@ public class RedisCacheConfiguration {
registerDefaultConverters(conversionService);
return new RedisCacheConfiguration(Duration.ZERO, true, true, null,
SerializationPair.fromSerializer(new StringRedisSerializer()),
SerializationPair.fromSerializer(StringRedisSerializer.UTF_8),
SerializationPair.fromSerializer(new JdkSerializationRedisSerializer()), conversionService);
}

View File

@@ -117,7 +117,7 @@ public class DefaultStringRedisConnection implements StringRedisConnection, Deco
* @param connection Redis connection
*/
public DefaultStringRedisConnection(RedisConnection connection) {
this(connection, new StringRedisSerializer());
this(connection, StringRedisSerializer.UTF_8);
}
/**

View File

@@ -96,7 +96,7 @@ public class RedisTemplate<K, V> extends RedisAccessor implements RedisOperation
@SuppressWarnings("rawtypes") private @Nullable RedisSerializer valueSerializer = null;
@SuppressWarnings("rawtypes") private @Nullable RedisSerializer hashKeySerializer = null;
@SuppressWarnings("rawtypes") private @Nullable RedisSerializer hashValueSerializer = null;
private RedisSerializer<String> stringSerializer = new StringRedisSerializer();
private RedisSerializer<String> stringSerializer = StringRedisSerializer.UTF_8;
private @Nullable ScriptExecutor<K> scriptExecutor;

View File

@@ -31,6 +31,7 @@ import org.springframework.data.redis.serializer.StringRedisSerializer;
* {@link StringRedisConnection}.
*
* @author Costin Leau
* @author Mark Paluch
*/
public class StringRedisTemplate extends RedisTemplate<String, String> {
@@ -39,11 +40,10 @@ public class StringRedisTemplate extends RedisTemplate<String, String> {
* and {@link #afterPropertiesSet()} still need to be called.
*/
public StringRedisTemplate() {
RedisSerializer<String> stringSerializer = new StringRedisSerializer();
setKeySerializer(stringSerializer);
setValueSerializer(stringSerializer);
setHashKeySerializer(stringSerializer);
setHashValueSerializer(stringSerializer);
setKeySerializer(StringRedisSerializer.UTF_8);
setValueSerializer(StringRedisSerializer.UTF_8);
setHashKeySerializer(StringRedisSerializer.UTF_8);
setHashValueSerializer(StringRedisSerializer.UTF_8);
}
/**

View File

@@ -127,7 +127,7 @@ public class RedisMessageListenerContainer implements InitializingBean, Disposab
private final SubscriptionTask subscriptionTask = new SubscriptionTask();
private volatile RedisSerializer<String> serializer = new StringRedisSerializer();
private volatile RedisSerializer<String> serializer = StringRedisSerializer.UTF_8;
private long recoveryInterval = DEFAULT_RECOVERY_INTERVAL;

View File

@@ -92,6 +92,7 @@ import org.springframework.util.StringUtils;
* @author Greg Turnquist
* @author Thomas Darimont
* @author Christoph Strobl
* @author Mark Paluch
* @see org.springframework.jms.listener.adapter.MessageListenerAdapter
*/
public class MessageListenerAdapter implements InitializingBean, MessageListener {
@@ -317,9 +318,8 @@ public class MessageListenerAdapter implements InitializingBean, MessageListener
* @see JdkSerializationRedisSerializer
*/
protected void initDefaultStrategies() {
RedisSerializer<String> serializer = new StringRedisSerializer();
setSerializer(serializer);
setStringSerializer(serializer);
setSerializer(StringRedisSerializer.UTF_8);
setStringSerializer(StringRedisSerializer.UTF_8);
}
/**

View File

@@ -98,7 +98,7 @@ class DefaultRedisSerializationContext<K, V> implements RedisSerializationContex
private @Nullable SerializationPair<V> valueTuple;
private @Nullable SerializationPair<?> hashKeyTuple;
private @Nullable SerializationPair<?> hashValueTuple;
private SerializationPair<String> stringTuple = SerializationPair.fromSerializer(new StringRedisSerializer());
private SerializationPair<String> stringTuple = SerializationPair.fromSerializer(StringRedisSerializer.UTF_8);
/* (non-Javadoc)
* @see org.springframework.data.redis.serializer.RedisSerializationContextBuilder#key(SerializationPair)

View File

@@ -93,7 +93,7 @@ public interface RedisSerializationContext<K, V> {
* @return
*/
static RedisSerializationContext<String, String> string() {
return fromSerializer(new StringRedisSerializer());
return fromSerializer(StringRedisSerializer.UTF_8);
}
/**

View File

@@ -22,20 +22,42 @@ import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
/**
* Simple String to byte[] (and back) serializer. Converts Strings into bytes and vice-versa using the specified charset
* (by default UTF-8).
* Simple {@literal} to {@literal byte[]} (and back) serializer. Converts Strings into bytes and vice-versa using the
* specified charset (by default UTF-8).
* <p>
* Useful when the interaction with the Redis happens mainly through Strings.
* <p>
* Does not perform any null conversion since empty strings are valid keys/values.
* Does not perform any {@literal null} conversion since empty strings are valid keys/values.
*
* @author Costin Leau
* @author Christoph Strobl
* @author Mark Paluch
*/
public class StringRedisSerializer implements RedisSerializer<String> {
private final Charset charset;
/**
* Serializer to use 7 bit ASCII, a.k.a. ISO646-US, a.k.a. the Basic Latin block of the Unicode character set.
*
* @since 2.1
*/
public static final StringRedisSerializer US_ASCII = new StringRedisSerializer(StandardCharsets.US_ASCII);
/**
* Serializer to use ISO Latin Alphabet No. 1, a.k.a. ISO-LATIN-1.
*
* @since 2.1
*/
public static final StringRedisSerializer ISO_8859_1 = new StringRedisSerializer(StandardCharsets.ISO_8859_1);
/**
* Serializer to use 8 bit UCS Transformation Format.
*
* @since 2.1
*/
public static final StringRedisSerializer UTF_8 = new StringRedisSerializer(StandardCharsets.UTF_8);
/**
* Creates a new {@link StringRedisSerializer} using {@link StandardCharsets#UTF_8 UTF-8}.
*/

View File

@@ -79,7 +79,7 @@ public class RedisAtomicDouble extends Number implements Serializable, BoundKeyO
Assert.notNull(factory, "a valid factory is required");
RedisTemplate<String, Double> redisTemplate = new RedisTemplate<>();
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setKeySerializer(StringRedisSerializer.UTF_8);
redisTemplate.setValueSerializer(new GenericToStringSerializer<>(Double.class));
redisTemplate.setExposeConnection(true);
redisTemplate.setConnectionFactory(factory);

View File

@@ -102,7 +102,7 @@ public class RedisAtomicInteger extends Number implements Serializable, BoundKey
private RedisAtomicInteger(String redisCounter, RedisConnectionFactory factory, @Nullable Integer initialValue) {
RedisTemplate<String, Integer> redisTemplate = new RedisTemplate<>();
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setKeySerializer(StringRedisSerializer.UTF_8);
redisTemplate.setValueSerializer(new GenericToStringSerializer<>(Integer.class));
redisTemplate.setExposeConnection(true);
redisTemplate.setConnectionFactory(factory);

View File

@@ -79,7 +79,7 @@ public class RedisAtomicLong extends Number implements Serializable, BoundKeyOpe
Assert.notNull(factory, "a valid factory is required");
RedisTemplate<String, Long> redisTemplate = new RedisTemplate<>();
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setKeySerializer(StringRedisSerializer.UTF_8);
redisTemplate.setValueSerializer(new GenericToStringSerializer<>(Long.class));
redisTemplate.setExposeConnection(true);
redisTemplate.setConnectionFactory(factory);