RedisTemplate 设置Redis 缓存Key前缀
实现接口RedisSerializer
package com.paotuidriver.congfig;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.SerializationException;
import java.nio.charset.Charset;
/**
* 为redis key 统一加上前缀
*/
public class RedisKeySerializer implements RedisSerializer<String> {
/**
* 编码格式
*/
private final Charset charset;
/**
* 前缀
*/
private final String PREFIX_KEY = "liuzhiguang:";
public RedisKeySerializer() {
this(Charset.forName("UTF8"));
}
public RedisKeySerializer(Charset charset) {
this.charset = charset;
}
/**
* Serialize the given object to binary data.
*
* @param s object to serialize. Can be {@literal null}.
* @return the equivalent binary data. Can be {@literal null}.
*/
@Override
public byte[] serialize(String cacheKey) throws SerializationException {
String key = PREFIX_KEY + cacheKey;
return key.getBytes(charset);
}
/**
* Deserialize an object from the given binary data.
*
* @param bytes object binary representation. Can be {@literal null}.
* @return the equivalent object instance. Can be {@literal null}.
*/
@Override
public String deserialize(byte[] bytes) throws SerializationException {
String cacheKey = new String(bytes, charset);
int indexOf = cacheKey.indexOf(PREFIX_KEY);
if (indexOf == -1) {
cacheKey = PREFIX_KEY + cacheKey;
}
return (cacheKey.getBytes() == null ? null : cacheKey);
}
}
RedisTemplate 设置Redis 自定义序列化
package com.paotuidriver.congfig;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
@Configuration
public class RedisConfig {
/**
* 重写Redis序列化方式,使用Json方式:
* 当我们的数据存储到Redis的时候,我们的键(key)和值(value)都是通过Spring提供的Serializer序列化到数据库的。
* RedisTemplate默认使用的是JdkSerializationRedisSerializer,StringRedisTemplate默认使用的是StringRedisSerializer。
* Spring Data JPA为我们提供了下面的Serializer:
* GenericToStringSerializer、Jackson2JsonRedisSerializer、JacksonJsonRedisSerializer、JdkSerializationRedisSerializer、OxmSerializer、StringRedisSerializer。
* 在此我们将自己配置RedisTemplate并定义Serializer。
*
* @param redisConnectionFactory
* @return
*/
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
// 设置连接工厂
redisTemplate.setConnectionFactory(redisConnectionFactory);
// 创建 JSON 序列化工具
GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
// 设置 key 的序列化
RedisKeySerializer redisKeySerializer=new RedisKeySerializer();
redisTemplate.setKeySerializer(redisKeySerializer);
redisTemplate.setHashKeySerializer(redisKeySerializer);
// 设置 value 的序列化
redisTemplate.setValueSerializer(jsonRedisSerializer);
redisTemplate.setHashValueSerializer(jsonRedisSerializer);
// 返回
return redisTemplate;
}
}
``