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

存入redis的結(jié)果:

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

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

這種序列化的方式可讀性比較差。
更改序列化的方式:
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory){
// 創(chuàng)建RedisTemplate對象
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;
}
}此時我們就可以進(jìn)行接送序列化存入redis的就是這樣的:

這樣存入redis的時候因為前面會加上一串這個對象的信息,這樣也額外占用了空間。
如果我們需要解決占用的這部分空間,我們可以手動進(jìn)行JSON序列化,然后同一使用String序列化器。
@Autowired
private StringRedisTemplate stringRedisTemplate;
// JSON序列化工具
private static final ObjectMapper mapper = new ObjectMapper();
@Test
void testSaveUser() throws JsonProcessingException {
// 創(chuàng)建對象
User user = new User("虎哥", 21);
// 手動序列化
String json = mapper.writeValueAsString(user);
// 寫入數(shù)據(jù)
stringRedisTemplate.opsForValue().set("user:200", json);
// 獲取數(shù)據(jù)
String jsonUser = stringRedisTemplate.opsForValue().get("user:200");
// 手動反序列化
User user1 = mapper.readValue(jsonUser, User.class);
System.out.println("user1 = " + user1);
}此時,存入的json字符串就沒有了前面類的信息。
3、jetcache序列化設(shè)置
我們使用jetcache使用redis作為遠(yuǎn)程緩存時,默認(rèn)序列化工具也是使用的JDK序列化,jetcahce提供的配置文件中有這么一項:keyConvertor,這個配置可以指定為alibaba的fastjson的序列化工具,但是這個修改的時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}我們可以看到有個配置叫做 valueEncoder和valueDecoder。這個配置才是真正的value的序列化工具。
這個配置jetcache給我們提供了三個選擇,分別是:java(jdk序列化),kryo和kryo5。
并不能改成json序列化。
總結(jié)
單獨使用redis的時候可以改序列化工具為json序列化,但是更推薦使用手動序列化然后直接存String,這樣更省空間。
如果使用jetcache的時候只能改為jdk,kryo序列化工具,暫時不支持使用json序列化工具。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Redis+Caffeine實現(xiàn)分布式二級緩存組件實戰(zhàn)教程
這篇文章主要介紹了Redis+Caffeine實現(xiàn)分布式二級緩存組件實戰(zhàn)教程,介紹了分布式二級緩存的優(yōu)勢,使用組件的方法,通過示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
Redis常見數(shù)據(jù)類型List列表使用詳解
Redis的List是一種有序的字符串集合,支持兩端高效插入和刪除,適用于隊列和棧,這篇文章主要介紹了Redis常見數(shù)據(jù)類型List列表使用的相關(guān)資料,需要的朋友可以參考下2024-12-12
Windows設(shè)置Redis為開機(jī)自啟動的流程步驟
Redis作為當(dāng)前最常用的當(dāng)前緩存技術(shù),基本上Web應(yīng)用中都有使用,所以,每次我們在本地啟動項目前,都必須將Redis服務(wù)端啟動,但是,每次都要去啟動Redis就很麻煩,本文主要就是介紹Windows系統(tǒng)如何配置開機(jī)啟動Redis,需要的朋友可以參考下2024-05-05

