最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Redis中序列化的兩種實現(xiàn)

 更新時間:2024年07月03日 09:15:46   作者:碼畜c  
本文主要介紹了Redis中序列化的兩種實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

序列化方式概述

對比同份數(shù)據(jù)初次序列化時的情況(很多帖子都沒有考慮序列化的同份數(shù)據(jù)是否為二次加載的情況,就給出了結(jié)論)

  • StringRedisSerializer: 簡單的字符串序列化,可視化性好(內(nèi)部就是通過String類的new String(bytes) & string.getBytes()實現(xiàn)的序列化)
  • JdkSerializationRedisSerializer: Java提供的序列化方式,效率高,占用空間少,可視化性差
  • Jackson2JsonRedisSerializer: 序列化為json字符串,效率低于JdkSerializationRedisSerializer,占用空間多,可視化性好,默認(rèn)情況下對泛型支持差
  • GenericJackson2JsonRedisSerializer: 序列化為json字符串,效率同Jackson2JsonRedisSerializer,占用空間多,可視化性好,默認(rèn)情況下對泛型支持友好

Jackson2JsonRedisSerializer 對比 GenericJackson2JsonRedisSerializer

Jackson2JsonRedisSerializer

[
    {
        "id": "1",
        "parentId": "2",
        "content": "Node1",
        "children": null
    },
    {
        "id": null,
        "parentId": null,
        "content": null,
        "children": null
    }
]

GenericJackson2JsonRedisSerializer

[
    "java.util.ArrayList",
    [
        {
            "@class": "life.cqq.blog.common.entity.Toc",
            "id": "1",
            "parentId": "2",
            "content": "Node1",
            "children": null
        },
        {
            "@class": "life.cqq.blog.common.entity.Toc",
            "id": null,
            "parentId": null,
            "content": null,
            "children": null
        }
    ]
]

上面分別是兩種序列化方式的結(jié)果,

GenericJackson2JsonRedisSerializer根據(jù)額外插入的類全限定名通過反射可以正確得到實體類的實例。

而Jackson2JsonRedisSerializer由于沒有插入額外的信息,那么只能通過不同的數(shù)據(jù)結(jié)構(gòu)來組裝反序列化后的內(nèi)容。例如上面的Json串反序列化的結(jié)果類型為: ArrayList<LinkedHashMap>,使用LinkedHashMap來組裝實體類對象的字段與字段值。

為什么會這樣?

二者本質(zhì)都是使用的ObjectMapper,只不過GenericJackson2JsonRedisSerializer在內(nèi)部對ObjectMapper進(jìn)行了特定配置而已:

public GenericJackson2JsonRedisSerializer() {
    this((String) null);
}

public GenericJackson2JsonRedisSerializer(@Nullable String classPropertyTypeName) {

    this(new ObjectMapper());

    registerNullValueSerializer(mapper, classPropertyTypeName);

    // 下面的配置就是在序列化結(jié)果中加入實體類全限定名的配置 
    if (StringUtils.hasText(classPropertyTypeName)) {
        mapper.enableDefaultTypingAsProperty(DefaultTyping.NON_FINAL, classPropertyTypeName);
    } else {
        mapper.enableDefaultTyping(DefaultTyping.NON_FINAL, As.PROPERTY);
    }
}

public GenericJackson2JsonRedisSerializer(ObjectMapper mapper) {
    Assert.notNull(mapper, "ObjectMapper must not be null!");
    this.mapper = mapper;
}

使用Jackson2JsonRedisSerializer時,可以自己創(chuàng)建一個ObjectMapper對象,并進(jìn)行上面的配置后,通過構(gòu)造方法進(jìn)行傳遞。那么最后Jackson2JsonRedisSerializer的序列化效果和GenericJackson2JsonRedisSerializer是一樣的。

常用配置

根據(jù)以上內(nèi)容,給出一份RedisTemplate的常用配置:

@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {

    // key   采用StringRedisSerializer
    // value 采用GenericJackson2JsonRedisSerializer

    RedisTemplate<String, Object> template = new RedisTemplate<>();
    // 關(guān)閉啟用默認(rèn)配置
    template.setEnableDefaultSerializer(false);
    // 連接工廠
    template.setConnectionFactory(factory);
    // key 序列化方式
    template.setKeySerializer(RedisSerializer.string());
    // value 序列化方式
    template.setValueSerializer(RedisSerializer.json());
    // hash key 序列化方式
    template.setHashKeySerializer(RedisSerializer.string());
    // hash value 序列化方式
    template.setHashValueSerializer(RedisSerializer.json());
    // 配置完成
    template.afterPropertiesSet();
    return template;
}

到此這篇關(guān)于Redis中序列化的兩種實現(xiàn)的文章就介紹到這了,更多相關(guān)Redis 序列化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Python連接Redis連接池的具體使用

    Python連接Redis連接池的具體使用

    在Redis中,同步和異步場景分別使用redis.ConnectionPool和redis.asyncio.ConnectionPool,配置選項包括最大連接數(shù)、超時時間等,多客戶端和單例模式也是連接池的常見應(yīng)用,下面就來詳細(xì)的介紹一下
    2026-03-03
  • redis4.0入門小結(jié)

    redis4.0入門小結(jié)

    這篇文章主要介紹了redis4.0入門小結(jié),文中通過示例和概念介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • 保證Redis中存儲的Token安全性的示例詳解

    保證Redis中存儲的Token安全性的示例詳解

    確保Redis中存儲的Token安全性是一個多層面的任務(wù),涉及到網(wǎng)絡(luò)、應(yīng)用、數(shù)據(jù)和操作等多個方面的安全措施,本文給大家介紹了一些詳細(xì)的實踐建議和示例,并有詳細(xì)的代碼供大家參考,需要的朋友可以參考下
    2024-03-03
  • Redis?BigKey的問題解決

    Redis?BigKey的問題解決

    本文主要介紹了Redis?BigKey的問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • 詳解Redis高效恢復(fù)策略內(nèi)存快照與AOF

    詳解Redis高效恢復(fù)策略內(nèi)存快照與AOF

    這篇文章主要為大家介紹了Redis高效恢復(fù)策略內(nèi)存快照與AOF及對比詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Redis過期Key刪除策略和內(nèi)存淘汰策略的實現(xiàn)

    Redis過期Key刪除策略和內(nèi)存淘汰策略的實現(xiàn)

    當(dāng)內(nèi)存使用達(dá)到上限,就無法存儲更多數(shù)據(jù)了,為了解決這個問題,Redis內(nèi)部會有兩套內(nèi)存回收的策略,過期Key刪除策略和內(nèi)存淘汰策略,本文就來詳細(xì)的介紹一下這兩種方法,感興趣的可以了解一下
    2024-02-02
  • Windows中redis設(shè)置密碼的兩種方法

    Windows中redis設(shè)置密碼的兩種方法

    之前寫的一個項目,有項目代碼,有數(shù)據(jù)庫,但是本地沒redis,沒法跑此項目,故思考在本地安裝一個redis做登錄session存儲,所以開始動手實踐,下面這篇文章主要給大家介紹了關(guān)于Windows中redis設(shè)置密碼的兩種方法,需要的朋友可以參考下
    2023-04-04
  • Redis全文搜索教程之創(chuàng)建索引并關(guān)聯(lián)源數(shù)據(jù)的教程

    Redis全文搜索教程之創(chuàng)建索引并關(guān)聯(lián)源數(shù)據(jù)的教程

    RediSearch提供了一種簡單快速的方法對 hash 或者 json 類型數(shù)據(jù)的任何字段建立二級索引,然后就可以對被索引的 hash 或者 json 類型數(shù)據(jù)字段進(jìn)行搜索和聚合操作,這篇文章主要介紹了Redis全文搜索教程之創(chuàng)建索引并關(guān)聯(lián)源數(shù)據(jù),需要的朋友可以參考下
    2023-12-12
  • 如何使用注解方式實現(xiàn)?Redis?分布式鎖

    如何使用注解方式實現(xiàn)?Redis?分布式鎖

    這篇文章主要介紹了如何使用注解方式實現(xiàn)Redis分布式鎖,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,教大家如何優(yōu)雅的使用Redis分布式鎖,感興趣的小伙伴可以參考一下
    2022-07-07
  • Redis源碼解析:集群手動故障轉(zhuǎn)移、從節(jié)點遷移詳解

    Redis源碼解析:集群手動故障轉(zhuǎn)移、從節(jié)點遷移詳解

    這篇文章主要介紹了Redis源碼解析:集群手動故障轉(zhuǎn)移、從節(jié)點遷移的相關(guān)內(nèi)容,涉及通過集群定時器函數(shù)clusterCron實現(xiàn)從節(jié)點遷移等知識,具有一定參考價值,需要的朋友可以了解。
    2017-10-10

最新評論

武陟县| 城市| 灵山县| 娱乐| 桦甸市| 三河市| 牡丹江市| 平武县| 宁南县| 兰溪市| 文昌市| 左贡县| 双桥区| 靖远县| 临朐县| 辽宁省| 来安县| 淅川县| 景洪市| 桂林市| 武川县| 连州市| 奇台县| 青田县| 宝鸡市| 临汾市| 泌阳县| 肃北| 义乌市| 杭锦旗| 罗平县| 盘山县| 景泰县| 文化| 武威市| 平昌县| 双鸭山市| 张北县| 龙南县| 三穗县| 习水县|