赞
踩
实现接口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); } }
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; } } ``
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。