redis redistemplate序列化對象配置方式
更新時間:2023年12月20日 09:46:48 作者:aitxiaogang
這篇文章主要介紹了redis redistemplate序列化對象配置方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
redis redistemplate序列化對象配置
@Configuration public class RedisConfig { /** * 重寫Redis序列化方式,使用Json方式: * 當(dāng)我們的數(shù)據(jù)存儲到Redis的時候,我們的鍵(key)和值(value)都是通過Spring提供的Serializer序列化到數(shù)據(jù)庫的。RedisTemplate默認(rèn)使用的是JdkSerializationRedisSerializer,StringRedisTemplate默認(rèn)使用的是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); // JdkSerializationRedisSerializer jdkSerializationRedisSerializer = new JdkSerializationRedisSerializer(); GenericJackson2JsonRedisSerializer jackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer(); // 設(shè)置值(value)的序列化采用FastJsonRedisSerializer。 redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); // redisTemplate.setHashValueSerializer(fastJsonRedisSerializer); // 設(shè)置鍵(key)的序列化采用StringRedisSerializer。 redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setHashKeySerializer(new StringRedisSerializer()); redisTemplate.afterPropertiesSet(); return redisTemplate; } }
@Component public class HashRedisTemplate extends RedisTemplate { public HashRedisTemplate(RedisConnectionFactory redisConnectionFactory) { this.setConnectionFactory(redisConnectionFactory); this.setKeySerializer(new StringRedisSerializer()); this.setValueSerializer(new StringRedisSerializer()); this.setHashKeySerializer(new StringRedisSerializer()); this.setHashValueSerializer(new StringRedisSerializer()); this.afterPropertiesSet(); } }
下面的方式不推薦
通過java對象序列化的方式,速度上可能不及上面通過json的格式序列化,還有一點就是json序列的方式可以看出對象里面的屬性
但是也有優(yōu)點:存儲內(nèi)容沒有限制,不存在枚舉序列化和反序列化失敗的情況。存儲空間占用少。
缺點就是反序列化之前,看不出內(nèi)容是什么
public class ObjectSerializer<T> implements RedisSerializer<T> { @Nullable @Override public byte[] serialize(@Nullable T t) throws SerializationException { ByteArrayOutputStream byteArrayOutputStream = null; ObjectOutputStream objectOutputStream = null; try { byteArrayOutputStream = new ByteArrayOutputStream(); objectOutputStream = new ObjectOutputStream(byteArrayOutputStream); objectOutputStream.writeObject(t); byte[] bytes = byteArrayOutputStream.toByteArray(); return bytes; } catch (IOException e) { e.printStackTrace(); }finally { try { objectOutputStream.close(); byteArrayOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } } return new byte[0]; } @Nullable @Override public T deserialize(@Nullable byte[] bytes) throws SerializationException { InputStream inputstream = null; ObjectInputStream objectInputStream = null; try { inputstream = new ByteArrayInputStream(bytes); objectInputStream = new ObjectInputStream(inputstream); Object o = objectInputStream.readObject(); T t = (T) o; return t; } catch (Exception e) { e.printStackTrace(); }finally { try { objectInputStream.close(); inputstream.close(); } catch (IOException e) { e.printStackTrace(); } } return null; } }
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spark刪除redis千萬級別set集合數(shù)據(jù)實現(xiàn)分析
這篇文章主要為大家介紹了Spark刪除redis千萬級別set集合數(shù)據(jù)實現(xiàn)過程分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06Redis 數(shù)據(jù)庫忘記密碼找回或重置的解決方法
對于 Redis 數(shù)據(jù)庫,如果忘記了密碼,可以通過密碼重置來找回密碼,今天通過本文給大家分享Redis 數(shù)據(jù)庫忘記密碼找回或重置的解決方法,感興趣的朋友一起看看吧2024-01-01