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

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

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

序列化方式概述

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

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

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
        }
    ]
]

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

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

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

為什么會這樣?

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

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

public GenericJackson2JsonRedisSerializer(@Nullable String classPropertyTypeName) {

    this(new ObjectMapper());

    registerNullValueSerializer(mapper, classPropertyTypeName);

    // 下面的配置就是在序列化結果中加入實體類全限定名的配置 
    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對象,并進行上面的配置后,通過構造方法進行傳遞。那么最后Jackson2JsonRedisSerializer的序列化效果和GenericJackson2JsonRedisSerializer是一樣的。

常用配置

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

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

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

    RedisTemplate<String, Object> template = new RedisTemplate<>();
    // 關閉啟用默認配置
    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;
}

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

相關文章

  • 啟動redis出現(xiàn)閃退情況的解決辦法

    啟動redis出現(xiàn)閃退情況的解決辦法

    最近使用Redis遇到啟動閃退的問題,查閱資料后在一位大神的文章中找到了答案,這篇文章主要給大家介紹了關于啟動redis出現(xiàn)閃退情況的解決辦法,需要的朋友可以參考下
    2023-11-11
  • Redis實現(xiàn)編碼生成規(guī)則方式

    Redis實現(xiàn)編碼生成規(guī)則方式

    在自動生成編碼時應采用“MD+年月日+4位序列號”的規(guī)則,如“MD202310130001”,為避免使用隨機序列號導致的重復編碼,建議使用從0開始的自增序列號,此外,使用Redis的incrBy功能實現(xiàn)序列號自增,可以有效提高效率和降低實現(xiàn)難度
    2023-01-01
  • redis中opsForList().range()的使用方法詳解

    redis中opsForList().range()的使用方法詳解

    這篇文章主要給大家介紹了關于redis中opsForList().range()的使用方法,文中通過實例代碼以及圖文介紹的非常詳細,對大家學習或者使用redis具有一定的參考學習價值,需要的朋友可以參考下
    2023-03-03
  • Redis分布式鎖防止緩存擊穿的實現(xiàn)

    Redis分布式鎖防止緩存擊穿的實現(xiàn)

    本文主要介紹了Redis分布式鎖防止緩存擊穿的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Redis中TYPE命令的具體使用

    Redis中TYPE命令的具體使用

    本文主要介紹了Redis中TYPE命令的具體使用,它用于返回存儲在指定鍵中的值的數(shù)據(jù)類型,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-06-06
  • 深入解析Redis中常見的應用場景

    深入解析Redis中常見的應用場景

    這篇文章主要給大家介紹了關于Redis中常見的應用場景的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-09-09
  • 一步步教會你redis如何配置密碼

    一步步教會你redis如何配置密碼

    Redis的配置文件中可以設置密碼來保護訪問,下面這篇文章主要給大家介紹了關于redis如何配置密碼的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • redis內(nèi)存空間效率問題的深入探究

    redis內(nèi)存空間效率問題的深入探究

    redis緩存固然高效,可是它會占用我們系統(tǒng)中寶貴的內(nèi)存資源,那該如何解決呢?這篇文章主要給大家介紹了關于redis內(nèi)存空間效率問題的相關資料,需要的朋友可以參考下
    2021-05-05
  • Redis禁用命令、危險命令及規(guī)避方法

    Redis禁用命令、危險命令及規(guī)避方法

    這篇文章主要介紹了Redis禁用命令、危險命令及規(guī)避方法,本文介紹了個非常致命的兩個命令以及用配置文件禁用這些命令的方法,需要的朋友可以參考下
    2015-06-06
  • Redis分布式鎖如何實現(xiàn)續(xù)期

    Redis分布式鎖如何實現(xiàn)續(xù)期

    這篇文章主要介紹了Redis分布式鎖如何實現(xiàn)續(xù)期的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01

最新評論