Redis序列化設(shè)置以及jetcache連接Redis序列化的設(shè)置過(guò)程
1、問(wèn)題
問(wèn)題:
我在使用jetchche進(jìn)行連接redis的時(shí)候,存入redis的value一直使用的是redis默認(rèn)的序列化方式,是使用的jdk序列化。
當(dāng)我使用jetcache向redis存入一個(gè)對(duì)象

存入redis的結(jié)果:

這是使用jdk序列化的結(jié)果。
但是我記得使用redis的時(shí)候可以更改序列化方式為json序列化,如果使用json序列化的結(jié)果就是這樣的:

我想把jetcache的序列化方式也改成這種可讀性好的。
2、Redis序列化的設(shè)置
當(dāng)我們使用springDataRedis依賴直接連接redis的時(shí)候我們默認(rèn)使用的也是jdk序列化,此時(shí)我們存入這個(gè)user對(duì)象的結(jié)果就和這個(gè)是一樣的。

這種序列化的方式可讀性比較差。
更改序列化的方式:
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory){
// 創(chuàng)建RedisTemplate對(duì)象
RedisTemplate<String, Object> template = new RedisTemplate<>();
// 設(shè)置連接工廠
template.setConnectionFactory(connectionFactory);
// 創(chuàng)建JSON序列化工具
GenericJackson2JsonRedisSerializer jsonRedisSerializer =
new GenericJackson2JsonRedisSerializer();
// 設(shè)置Key的序列化
template.setKeySerializer(RedisSerializer.string());
template.setHashKeySerializer(RedisSerializer.string());
// 設(shè)置Value的序列化
template.setValueSerializer(jsonRedisSerializer);
template.setHashValueSerializer(jsonRedisSerializer);
// 返回
return template;
}
}此時(shí)我們就可以進(jìn)行接送序列化存入redis的就是這樣的:

這樣存入redis的時(shí)候因?yàn)榍懊鏁?huì)加上一串這個(gè)對(duì)象的信息,這樣也額外占用了空間。
如果我們需要解決占用的這部分空間,我們可以手動(dòng)進(jìn)行JSON序列化,然后同一使用String序列化器。
@Autowired
private StringRedisTemplate stringRedisTemplate;
// JSON序列化工具
private static final ObjectMapper mapper = new ObjectMapper();
@Test
void testSaveUser() throws JsonProcessingException {
// 創(chuàng)建對(duì)象
User user = new User("虎哥", 21);
// 手動(dòng)序列化
String json = mapper.writeValueAsString(user);
// 寫(xiě)入數(shù)據(jù)
stringRedisTemplate.opsForValue().set("user:200", json);
// 獲取數(shù)據(jù)
String jsonUser = stringRedisTemplate.opsForValue().get("user:200");
// 手動(dòng)反序列化
User user1 = mapper.readValue(jsonUser, User.class);
System.out.println("user1 = " + user1);
}此時(shí),存入的json字符串就沒(méi)有了前面類(lèi)的信息。
3、jetcache序列化設(shè)置
我們使用jetcache使用redis作為遠(yuǎn)程緩存時(shí),默認(rèn)序列化工具也是使用的JDK序列化,jetcahce提供的配置文件中有這么一項(xiàng):keyConvertor,這個(gè)配置可以指定為alibaba的fastjson的序列化工具,但是這個(gè)修改的時(shí)key的序列化,而不是value。
我們還是達(dá)不到提高可讀性的效果。
這是官方提供的jetcache的配置:
jetcache:
statIntervalMinutes: 15
areaInCacheName: false
local:
default:
type: linkedhashmap #other choose:caffeine
keyConvertor: fastjson2 #other choose:fastjson/jackson
limit: 100
remote:
default:
type: redis
keyConvertor: fastjson2 #other choose:fastjson/jackson
broadcastChannel: projectA
valueEncoder: java #other choose:kryo/kryo5
valueDecoder: java #other choose:kryo/kryo5
poolConfig:
minIdle: 5
maxIdle: 20
maxTotal: 50
host: ${redis.host}
port: ${redis.port}我們可以看到有個(gè)配置叫做 valueEncoder和valueDecoder。這個(gè)配置才是真正的value的序列化工具。
這個(gè)配置jetcache給我們提供了三個(gè)選擇,分別是:java(jdk序列化),kryo和kryo5。
并不能改成json序列化。
總結(jié)
單獨(dú)使用redis的時(shí)候可以改序列化工具為json序列化,但是更推薦使用手動(dòng)序列化然后直接存String,這樣更省空間。
如果使用jetcache的時(shí)候只能改為jdk,kryo序列化工具,暫時(shí)不支持使用json序列化工具。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Redis+Caffeine實(shí)現(xiàn)分布式二級(jí)緩存組件實(shí)戰(zhàn)教程
這篇文章主要介紹了Redis+Caffeine實(shí)現(xiàn)分布式二級(jí)緩存組件實(shí)戰(zhàn)教程,介紹了分布式二級(jí)緩存的優(yōu)勢(shì),使用組件的方法,通過(guò)示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
Redis常見(jiàn)數(shù)據(jù)類(lèi)型List列表使用詳解
Redis的List是一種有序的字符串集合,支持兩端高效插入和刪除,適用于隊(duì)列和棧,這篇文章主要介紹了Redis常見(jiàn)數(shù)據(jù)類(lèi)型List列表使用的相關(guān)資料,需要的朋友可以參考下2024-12-12
Windows設(shè)置Redis為開(kāi)機(jī)自啟動(dòng)的流程步驟
Redis作為當(dāng)前最常用的當(dāng)前緩存技術(shù),基本上Web應(yīng)用中都有使用,所以,每次我們?cè)诒镜貑?dòng)項(xiàng)目前,都必須將Redis服務(wù)端啟動(dòng),但是,每次都要去啟動(dòng)Redis就很麻煩,本文主要就是介紹Windows系統(tǒng)如何配置開(kāi)機(jī)啟動(dòng)Redis,需要的朋友可以參考下2024-05-05
利用Redis實(shí)現(xiàn)點(diǎn)贊功能的示例代碼
點(diǎn)贊對(duì)我們來(lái)說(shuō)并不陌生,我們經(jīng)常會(huì)在手機(jī)軟件或者網(wǎng)頁(yè)中看到它。今天就讓我們來(lái)了解一下如何用Redis實(shí)現(xiàn)這一功能吧,感興趣的可以嘗試一下2022-06-06

