欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Redis序列化設(shè)置以及jetcache連接Redis序列化的設(shè)置過程

 更新時(shí)間:2023年12月20日 09:39:59   作者:東莞呵呵  
這篇文章主要介紹了Redis序列化設(shè)置以及jetcache連接Redis序列化的設(shè)置過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

1、問題

問題:

我在使用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);
    // 寫入數(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字符串就沒有了前面類的信息。

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有序集合實(shí)現(xiàn)滑動(dòng)窗口限流的步驟

    基于Redis有序集合實(shí)現(xiàn)滑動(dòng)窗口限流的步驟

    滑動(dòng)窗口算法是一種基于時(shí)間窗口的限流算法,通過動(dòng)態(tài)地滑動(dòng)窗口,可以動(dòng)態(tài)調(diào)整限流的速率,Redis有序集合可以用來實(shí)現(xiàn)滑動(dòng)窗口限流,本文介紹基于Redis有序集合實(shí)現(xiàn)滑動(dòng)窗口限流,感興趣的朋友一起看看吧
    2024-12-12
  • RedisTemplate常用方法大全(面試必備)

    RedisTemplate常用方法大全(面試必備)

    RedisTemplate是SpringData Redis提供的一個(gè)類,本文主要介紹了RedisTemplate常用方法大全,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-05-05
  • 詳解基于redis實(shí)現(xiàn)的四種常見的限流策略

    詳解基于redis實(shí)現(xiàn)的四種常見的限流策略

    限流算法在分布式領(lǐng)域是一個(gè)經(jīng)常被提起的話題,當(dāng)系統(tǒng)的處理能力有限時(shí), 如何阻止計(jì)劃外的請(qǐng)求繼續(xù)對(duì)系統(tǒng)施壓,這是一個(gè)需要重視的問題。除了控制流量,限流還有一個(gè)應(yīng)用目的是控制用戶行為,避免垃圾請(qǐng)求
    2021-06-06
  • 分布式爬蟲處理Redis里的數(shù)據(jù)操作步驟

    分布式爬蟲處理Redis里的數(shù)據(jù)操作步驟

    這篇文章主要介紹了分布式爬蟲處理Redis里的數(shù)據(jù)操作步驟,數(shù)據(jù)分別存入mongodb和mysql數(shù)據(jù)庫,具體內(nèi)容詳情及實(shí)例代碼大家參考下本文
    2018-03-03
  • Redis?哈希Hash底層數(shù)據(jù)結(jié)構(gòu)詳解

    Redis?哈希Hash底層數(shù)據(jù)結(jié)構(gòu)詳解

    這篇文章主要介紹了Redis?哈希Hash底層數(shù)據(jù)結(jié)構(gòu)詳解的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • 多維度深入分析Redis的5種基本數(shù)據(jù)結(jié)構(gòu)

    多維度深入分析Redis的5種基本數(shù)據(jù)結(jié)構(gòu)

    此篇文章主要對(duì)Redis的5種基本數(shù)據(jù)類型,即字符串(String)、列表(List)、散列(Hash)、集合(Set)、有序集合(Sorted?Set),從使用場(chǎng)景和底層結(jié)構(gòu)出發(fā),進(jìn)行多維度深入分析。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-11-11
  • Redis安裝教程圖解

    Redis安裝教程圖解

    Redis是一個(gè)開源的使用ANSI C語言編寫、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫,并提供多種語言的API。本文就教大家如何安裝Redis,需要的朋友可以參考下
    2015-10-10
  • Redis大key和多key拆分的解決方案

    Redis大key和多key拆分的解決方案

    大key會(huì)導(dǎo)致內(nèi)存使用過高,多key可能導(dǎo)致查詢效率低下,本文主要介紹了Redis大key和多key拆分的解決方案,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • 在CentOS 7環(huán)境下安裝Redis數(shù)據(jù)庫詳解

    在CentOS 7環(huán)境下安裝Redis數(shù)據(jù)庫詳解

    Redis是一個(gè)開源的、基于BSD許可證的,基于內(nèi)存的、鍵值存儲(chǔ)NoSQL數(shù)據(jù)本篇文章主要介紹了在CentOS 7環(huán)境下安裝Redis數(shù)據(jù)庫詳解,有興趣的可以了解一下。
    2016-11-11
  • 基于redis實(shí)現(xiàn)定時(shí)任務(wù)的方法詳解

    基于redis實(shí)現(xiàn)定時(shí)任務(wù)的方法詳解

    這篇文章主要給大家介紹了基于redis實(shí)現(xiàn)定時(shí)任務(wù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用redis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08

最新評(píng)論