redis redistemplate序列化對(duì)象配置方式
更新時(shí)間:2023年12月20日 09:46:48 作者:aitxiaogang
這篇文章主要介紹了redis redistemplate序列化對(duì)象配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
redis redistemplate序列化對(duì)象配置
@Configuration public class RedisConfig { /** * 重寫Redis序列化方式,使用Json方式: * 當(dāng)我們的數(shù)據(jù)存儲(chǔ)到Redis的時(shí)候,我們的鍵(key)和值(value)都是通過(guò)Spring提供的Serializer序列化到數(shù)據(jù)庫(kù)的。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(); } }
下面的方式不推薦
通過(guò)java對(duì)象序列化的方式,速度上可能不及上面通過(guò)json的格式序列化,還有一點(diǎn)就是json序列的方式可以看出對(duì)象里面的屬性
但是也有優(yōu)點(diǎn):存儲(chǔ)內(nèi)容沒(méi)有限制,不存在枚舉序列化和反序列化失敗的情況。存儲(chǔ)空間占用少。
缺點(diǎn)就是反序列化之前,看不出內(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é)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
您可能感興趣的文章:
- RedisTemplate默認(rèn)序列化方式顯示中文亂碼的解決
- RedisTemplate序列化設(shè)置的流程和具體步驟
- 配置redis的序列化,注入RedisTemplate方式
- Spring?boot?RedisTemplate?序列化服務(wù)化配置方式
- Springboot下RedisTemplate的兩種序列化方式實(shí)例詳解
- Springboot?引入?Redis?并配置序列化并封裝RedisTemplate?
- Redis之RedisTemplate配置方式(序列和反序列化)
- 解決RedisTemplate的key默認(rèn)序列化器的問(wèn)題
- Spring的RedisTemplate的json反序列泛型丟失問(wèn)題解決
相關(guān)文章
Redis中的動(dòng)態(tài)字符串學(xué)習(xí)教程
這篇文章主要介紹了Redis中的動(dòng)態(tài)字符串學(xué)習(xí)教程,以sds模塊的使用為主進(jìn)行講解,需要的朋友可以參考下2015-08-08如何在SpringBoot中使用Redis實(shí)現(xiàn)分布式鎖
這篇文章主要介紹了如何在SpringBoot中使用Redis實(shí)現(xiàn)分布式鎖,在實(shí)際開(kāi)發(fā)中有可能會(huì)遇到多個(gè)線程同時(shí)訪問(wèn)同一個(gè)共享變量,那么上鎖就很重要了,需要的朋友可以參考下2023-03-03redis實(shí)現(xiàn)session共享的方法
本文主要介紹了redis實(shí)現(xiàn)session共享的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04