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-03
redis實(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

