spring boot集成reids的 RedisTemplate 序列化器詳細對比(官方及非官方)

RedisTemplate 序列化器詳細對比(官方及非官方)


1. 官方序列化器
(1) JdkSerializationRedisSerializer
  • 特點
    • 基于 Java 原生序列化(Serializable)。
    • 支持復雜對象(需實現 Serializable 接口)。
    • 缺點:體積大、反序列化需類文件、跨語言支持差、性能較低。
  • 適用場景:簡單對象且對性能要求不高。
(2) StringRedisSerializer
  • 特點
    • 僅支持 String 類型,直接轉換 byte[]
    • 無額外開銷,性能最優。
  • 適用場景:鍵值均為字符串的場景。
(3) GenericJackson2JsonRedisSerializer
  • 特點
    • 基于 Jackson,自動添加 @class 字段保留類型信息。
    • 支持復雜對象,無需顯式指定類型。
  • 適用場景:需要自動處理類型信息的復雜對象。
(4) Jackson2JsonRedisSerializer
  • 特點
    • 基于 Jackson,需顯式指定對象類型(如 User.class)。
    • 性能高于 GenericJackson2Json
  • 適用場景:已知對象類型或單類型場景。
(5) OxmSerializer(如 Jaxb2/XStream)
  • 特點
    • 支持 XML 序列化(如 JAXB、XStream)。
    • 需配置 XML 驅動(如 Jaxb2CollectionSerializer)。
    • 適用場景:需 XML 格式存儲或與 XML 系統交互。
(6) RedisObjectSerializer(自定義二進制)
  • 特點
    • Redis 原生二進制序列化(如 RedisSerializer 接口實現)。
    • 通常用于特定場景(如與 Redis 協議直接交互)。
    • 需自定義實現,靈活性高但復雜。

2. 非官方序列化器
(1) FastjsonRedisSerializer
  • 特點
    • 基于阿里巴巴 Fastjson,性能優于 Jackson。
    • 支持復雜對象,需顯式指定類型。
    • 依賴 Fastjson 庫
  • 適用場景:追求高性能 JSON 序列化。
(2) GsonRedisSerializer(需自定義)
  • 特點
    • 基于 Google Gson 庫,輕量級 JSON 序列化。
    • 需手動實現 RedisSerializer 接口。
    • 靈活性高,適合熟悉 Gson 的項目。
  • 適用場景:已有 Gson 依賴或偏好輕量級 JSON。
(3) KryoSerializer(需第三方庫)
  • 特點
    • 基于 Kryo 庫,二進制序列化,性能極高。
    • 不保留類型信息,需手動處理類型。
    • 跨語言支持差,但體積小、速度快。
  • 適用場景:對性能要求極高且類型固定。
(4) ProtobufSerializer(需自定義)
  • 特點
    • 基于 Protocol Buffers(Protobuf),二進制序列化。
    • 高性能、體積小,跨語言兼容性好。
    • 需定義 .proto 文件,配置復雜度較高。
  • 適用場景:跨語言系統或對性能要求極高的場景。
(5) SnakeYAMLSerializer(需自定義)
  • 特點
    • 基于 SnakeYAML 庫,支持 YAML 格式序列化。
    • 適合需要人類可讀配置文件的場景。
    • 依賴 SnakeYAML 庫
  • 適用場景:需 YAML 格式存儲(如配置類)。

對比表格

序列化器類型支持對象類型保留類型信息性能依賴適用場景
JdkSerialization原生序列化復雜對象簡單對象,對性能要求不高
StringRedisSerializer字符串序列化String鍵值均為字符串
GenericJackson2JsonJSON(泛型)復雜對象Jackson需自動處理類型信息的復雜對象
Jackson2JsonJSON(單類型)固定對象類型Jackson已知對象類型或單類型場景
OxmSerializer(Jaxb2)XML 序列化支持 XML 對象需配置JAXB/XStream需 XML 格式存儲
RedisObjectSerializer自定義二進制任意自定義實現特定協議交互或高性能需求
FastjsonRedisSerializerJSON(Fastjson)復雜對象需顯式指定Fastjson高性能 JSON 需求
GsonRedisSerializerJSON(Gson)復雜對象需顯式指定Gson輕量級 JSON 需求
KryoSerializer二進制(Kryo)復雜對象極高Kryo性能優先且類型固定
ProtobufSerializer二進制(Protobuf)復雜對象是(需定義)極高Protobuf跨語言系統或高性能需求
SnakeYAMLSerializerYAML復雜對象是(YAML格式)SnakeYAML需人類可讀配置文件

總結與建議

  1. 簡單鍵值對:首選 StringRedisSerializer(性能最優)。
  2. 復雜對象
    • 自動類型處理GenericJackson2Json
    • 固定類型Jackson2JsonFastjson
    • 高性能KryoProtobuf
    • 跨語言兼容Protobuf 或 JSON 序列化器。
  3. XML/YAML 需求
    • XML → OxmSerializer(需配置驅動)。
    • YAML → SnakeYAMLSerializer
  4. 自定義需求
    • 特定協議 → 實現 RedisSerializer
    • 極端性能 → ProtobufKryo

配置示例

JSON 序列化(Jackson)
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(factory);template.setKeySerializer(new StringRedisSerializer());template.setValueSerializer(new GenericJackson2JsonRedisSerializer());return template;
}
高性能二進制(Kryo)
// 需自定義實現
public class KryoRedisSerializer implements RedisSerializer<Object> {private final Kryo kryo = new Kryo();@Overridepublic byte[] serialize(Object object) {Output output = new Output(new ByteArrayOutputStream());kryo.writeClassAndObject(output, object);return output.toBytes();}@Overridepublic Object deserialize(byte[] bytes) {Input input = new Input(bytes);return kryo.readClassAndObject(input);}
}
Protobuf 配置
// 需定義.proto文件并生成Java類
template.setValueSerializer(new ProtobufSerializer());

根據項目需求選擇序列化器,平衡性能、兼容性和開發成本!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/74277.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/74277.shtml
英文地址,請注明出處:http://en.pswp.cn/web/74277.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ssh私鑰文件登錄問題:Load key invalid format

問題 在mac上面使用私鑰文件登錄時候&#xff0c;出現了如下錯誤&#xff1a; Load key “xxx.pem”: invalid format 但是&#xff0c;這個私鑰文件在win上面能夠正常使用ssh進行遠程登錄。在mac上面不能。而且&#xff0c;分別在win和mac上面分別查看了這兩個私鑰文件的md5…

AI戰略群與星際之門:軟銀AI投資版圖計劃深度解析

一、星際之門:萬億美元級 AI 基礎設施革命 1.1 項目背景與戰略定位 在 AI 技術迅猛發展的今天,算力已成為推動其前進的核心動力。軟銀聯合 OpenAI、甲骨文、英偉達、微軟、arm推出的 “星際之門”(Stargate)計劃,無疑是 AI 領域的一顆重磅炸彈。作為 AI 領域史上最大單筆…

教務系統ER圖

實體 1. 學生&#xff1a;具有姓名、學號、性別、系編號、電話、出生年月等屬性。學號通常是學生的唯一標識。 2. 課程&#xff1a;包含課程編號、課程名稱、課程學分、課程學時等屬性。課程編號一般用于唯一標識一門課程。 3. 教師&#xff1a;屬性有教師編號、教師名字、性別…

大數據(4.4)Hive多表JOIN終極指南:7大關聯類型與性能優化實戰解析

目錄 背景一、Hive JOIN類型與語法詳解1. 基礎JOIN類型2. 高級JOIN類型 二、JOIN實戰案例與調優案例1&#xff1a;兩表內連接&#xff08;訂單與用戶關聯&#xff09;案例2&#xff1a;多表鏈式JOIN&#xff08;用戶-訂單-商品&#xff09;案例3&#xff1a;處理數據傾斜&#…

【28BYJ-48】STM32同時驅動4個步進電機,支持調速與正反轉

資料下載&#xff1a;待更新。。。。 先驅動起來再說&#xff0c;干中學&#xff01;&#xff01;&#xff01; 1、實現功能 STM32同時驅動4個步進電機&#xff0c;支持單獨調速與正反轉控制 需要資源&#xff1a;16個任意IO口1ms定時器中斷 目錄 資料下載&#xff1a;待更…

[Lc6_記憶化搜索] 不同路徑 | 解決智力問題 | 有序三元組中的最大值

目錄 1.不同路徑 題解 2140. 解決智力問題 題解 2873. 有序三元組中的最大值 題解 1.不同路徑 鏈接&#xff1a;62. 不同路徑 一個機器人位于一個 m x n 網格的左上角 &#xff08;起始點在下圖中標記為 “Start” &#xff09;。 機器人每次只能向下或者向右移動一步…

軟件重構與項目進度的矛盾如何解決

軟件重構與項目進度之間的矛盾可以通過明確重構目標與范圍、采用漸進式重構策略、優化項目管理流程、提高團隊溝通效率、建立重構意識文化等方式解決。其中&#xff0c;采用漸進式重構策略尤為關鍵。漸進式重構是指在日常開發過程中&#xff0c;以小步驟持續進行重構&#xff0…

多臺服務器上docker部署 Redis 集群

規劃集群節點 確保你的服務器有固定 IP&#xff0c;比如&#xff1a; 172.16.17.100 172.16.17.101 172.16.17.102 每臺服務器運行 2 個 Redis 節點&#xff0c;總共 6 個節點&#xff0c;滿足 Redis Cluster 最小節點數要求。 2. 在每臺服務器上運行 Redis 在每臺服務器上執行…

【Pandas】pandas DataFrame dtypes

Pandas2.2 DataFrame Attributes and underlying data 方法描述DataFrame.index用于獲取 DataFrame 的行索引DataFrame.columns用于獲取 DataFrame 的列標簽DataFrame.dtypes用于獲取 DataFrame 中每一列的數據類型 pandas.DataFrame.dtypes pandas.DataFrame.dtypes 屬性用…

如何實現局域網內無痛訪問Jupyter Notebook?

Jupyter Notebook是數據科學和機器學習領域非常常用的交互式開發環境。默認情況下&#xff0c;Jupyter Notebook啟動后只能本地訪問&#xff0c;并且會自動生成一個token用于身份驗證。當需要從其他電腦遠程訪問時&#xff0c;往往需要對配置進行修改。 本文將詳細介紹如何通過…

[Windows] eDiary 4.3.6 日記軟件

[Windows] eDiary 鏈接&#xff1a;https://pan.xunlei.com/s/VOMq6xmKTbEJtNaW-BXZ7KKSA1?pwdcrvu# 【應用功能】 加密 無論本地還是云端&#xff0c;都可以選擇高強度加密。系統以用戶密碼為種子&#xff0c;對數據進行…

掌握 Flexbox 布局:為容器添加豎向滾動條的完美方案

掌握 Flexbox 布局&#xff1a;為容器添加豎向滾動條的完美方案 前言 在現代網頁設計中&#xff0c;Flexbox 布局因其靈活性和強大的對齊功能而備受歡迎。然而&#xff0c;在實際開發過程中&#xff0c;我們有時會遇到需要在一個具有最小高度的 Flex 容器中實現內容溢出時顯示…

Node.js v22.14.0 多平臺安裝指南:Windows、Linux 和 macOS 詳細教程

Node.js作為現代Web開發的基石&#xff0c;持續為開發者帶來性能提升和新特性支持。本文將詳細介紹在Windows、macOS和Linux系統上安裝最新Node.js的多種方法&#xff0c;助您快速搭建高效的JavaScript開發環境。 &#x1f4e6; 當前最新版本 截至2025年4月&#xff0c;Node.…

動態規劃學習——回文子串系列問題【C++】

一&#xff0c;回文子串 題目鏈接&#xff1a;LCR 020. 回文子串 - 力扣&#xff08;LeetCode&#xff09; 【問題描述】 求一個字符串中有多少個回文子串&#xff0c;其中一個字符也算是一個回文子串。 【解法】 動態規劃 求一個字符串中回文子串的個數&#xff0c;我么可…

My first day in QT programming

My first QT code this->setWindowTitle("HelloWorld"); //設置窗口名稱 this->resize(400, 300); //設置窗口大小 QPushButton* btn new QPushButton; //新建按鈕組件 btn->setParent(this); //為按鈕指定父對象 …

基于python開發的郵箱合并群發工具

智能郵件群發系統 一個基于Python和PyQt5開發的智能郵件群發工具&#xff0c;支持Word模板和Excel數據源的自動匹配&#xff0c;具有現代化UI界面和友好的用戶體驗。 Github項目地址&#xff1a;https://github.com/liugang926/Auto-mail-sent.git dist目錄有編譯好的exe程序&…

大模型-提示詞(Prompt)技巧

1、什么是提示詞&#xff1f; 提示詞&#xff08;Prompt&#xff09;是用戶發送給大語言模型的問題、指令或請求&#xff0c;用來明確地告訴模型用戶想要解決的問題或完成的任務&#xff0c;是大語言模型理解用戶需求并據此生成相關、準確回答或內容的基礎。對于大語言模型來說…

Android開發:support.v4包與AndroidX

Android中的support.v4包與AndroidX support.v4包概述 Android Support Library中的android.support.v4包是Google為保持Android應用向后兼容而提供的重要支持庫集合。它主要解決以下問題&#xff1a; API版本兼容&#xff1a;讓新版API能在舊版Android系統上使用功能增強&a…

TCP-IP模型

書接上回&#xff08;OSI通信模型&#xff09; TCP-IP協議結構 &#xff08;略講&#xff09; ARP&#xff1a;IP-->MAC RARP&#xff1a;MAC-->IP ICMP&#xff1a;控制報文信息協議&#xff0c;主要是涉及到主機就去連接路由器時控制傳輸報文&#xff08…

雪花算法生成的主鍵存在哪些問題,為什么不能使用自增ID或者UUID做MySQL的主鍵

MySQL 分布式架構中的主鍵選擇&#xff1a;自增ID、UUID與雪花算法 為什么MySQL分布式架構中不能使用自增主鍵&#xff1f; 在分布式架構中&#xff0c;自增主鍵存在以下問題&#xff1a; 主鍵沖突風險&#xff1a;多個數據庫實例同時生成自增主鍵會導致ID重復分片不均勻&am…