0


Springboot-Redisson - 3.数据序列化

👀 数据序列化

在 Spring Boot 应用程序中,数据序列化是一个重要的方面,特别是在与 Redisson 集成时。数据序列化定义了如何将对象序列化为字节以存储在 Redis 中,以及如何将字节反序列化为对象以进行读取和操作。Redisson 提供了多种数据编码方式,每种编码方式都有其独特的特点和适用场景。

不同的Redisson编码方式的名称、作用和使用场景:
编码方式作用和特点使用场景JsonJacksonCodecJackson JSON编码,默认编码方式一般的JSON数据序列化和反序列化AvroJacksonCodec二进制的JSON编码,高性能需要高性能的二进制JSON数据编码SmileJacksonCodec另一种二进制的JSON编码,紧凑紧凑的二进制JSON数据编码CborJacksonCodecCBOR二进制JSON编码高效的CBOR格式数据编码MsgPackJacksonCodecMsgPack二进制JSON编码高效的MsgPack格式数据编码IonJacksonCodecAmazon Ion编码,类似JSON与Amazon Ion格式交互的情况KryoCodec二进制对象序列化编码,高性能需要高性能的Java对象序列化SerializationCodecJDK序列化编码,性能较差原生Java对象序列化FstCodecFST二进制对象序列化编码,高性能高性能Java对象序列化LZ4Codec压缩型序列化对象编码,高效高效压缩的数据存储和检索SnappyCodec压缩型序列化对象编码,高效高效压缩的数据存储和检索JsonJacksonMapCodec基于Jackson的映射类使用的编码映射类数据的序列化和反序列化StringCodec纯字符串编码,无转换存储和检索简单字符串数据LongCodec纯整长型数字编码,无转换存储和检索长整数数据ByteArrayCodec字节数组编码存储和检索原始字节数据CompositeCodec组合多种不同编码方式根据需求选择不同的编码方式

✌JsonJacksonCodec

✍ 作用和特点

  • Jackson JSON 编码,默认编码方式。
  • 用于一般的 JSON 数据序列化和反序列化。
  • 基于 Jackson 库,广泛使用,支持 JSON 格式数据。

✍ 使用场景

  • 适用于大多数情况下需要将对象以 JSON 格式存储在 Redis 中的场景。
  • 对象的字段可以被灵活地映射到 JSON 格式,适用于各种数据结构。

✍ 优缺点

  • 优点:通用性强,支持复杂的数据结构和嵌套对象。
  • 缺点:相对于二进制编码方式,JSON 编码会占用更多的存储空间和网络带宽。

✍ 示例

JsonJacksonCodec

是 Redisson 提供的一个编解码器,用于将存储在 Redis 中的对象转换为 JSON 格式。这个编解码器使用了 Jackson 库,因此能提供高性能的序列化和反序列化操作。下面我会展示如何在 Spring Boot 中使用

JsonJacksonCodec

  1. 创建 Spring Boot 项目

使用 Spring Initializr 或其他工具创建一个新的 Spring Boot 项目。

  1. 添加依赖

在项目的

pom.xml

文件中添加 Redis, Redisson 和 Jackson 的依赖:

<!-- Spring Boot Starter Data Redis 依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- Redisson 依赖 --><dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.15.0</version><!-- 请根据实际情况选择版本 --></dependency><!-- Jackson 依赖 --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></dependency>
  1. 配置 Redis 和 Redisson

application.properties

application.yml

文件中配置 Redis 和 Redisson:

# Redisson 配置
redisson.config=classpath:redisson.yaml

resources

目录下创建

redisson.yaml

文件,并配置 Redis 服务器地址以及使用

JsonJacksonCodec

singleServerConfig:address:"redis://127.0.0.1:6379"codec:!<org.redisson.codec.JsonJacksonCodec>{}
  1. 创建一个 Service 类来使用 Redisson
importorg.redisson.api.RBucket;importorg.redisson.api.RedissonClient;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Service;@ServicepublicclassRedissonService{@AutowiredprivateRedissonClient redissonClient;/**
     * 存储一个对象到 Redis。
     *
     * @param key Redis 的键
     * @param object 要存储的对象
     */publicvoidstoreObject(String key,Object object){RBucket<Object> bucket = redissonClient.getBucket(key);
        bucket.set(object);}/**
     * 从 Redis 获取一个对象。
     *
     * @param key Redis 的键
     * @return 存储在 Redis 中的对象
     */publicObjectgetObject(String key){RBucket<Object> bucket = redissonClient.getBucket(key);return bucket.get();}}
  1. 使用 RedissonService

你可以在 Controller 或其他组件中调用

RedissonService

的方法,以存储和获取对象。

importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.*;@RestControllerpublicclassRedissonController{@AutowiredprivateRedissonService redissonService;// 假设有一个简单的 User 类用于测试publicstaticclassUser{publicString name;publicint age;// getter 和 setter 省略}@PostMapping("/store-user")publicvoidstoreUser(@RequestBodyUser user){
        redissonService.storeObject("storedUser", user);}@GetMapping("/get-user")publicUsergetUser(){return(User) redissonService.getObject("storedUser");}}

在上述示例中,当我们使用

storeUser

方法存储一个

User

对象时,由于我们在 Redisson 的配置中使用了

JsonJacksonCodec

,这个对象会被序列化为 JSON 格式并存储在 Redis 中。同样地,当我们使用

getUser

方法从 Redis 获取对象时,这个对象会从其 JSON 表示中反序列化回来。

✌AvroJacksonCodec

✍ 作用和特点

  • Avro 二进制的 JSON 编码,高性能。
  • 用于需要高性能的二进制 JSON 数据编码。
  • 基于 Avro 库,提供高效的数据序列化和反序列化。

✍ 使用场景

  • 适用于需要高性能数据序列化和反序列化的场景,例如大规模数据处理。

✍ 优缺点

  • 优点:高性能,二进制编码方式,减少存储空间和网络带宽的消耗。
  • 缺点:相对于 JSON 编码,Avro 编码可能不太人可读,难以调试。

✍ 示例

AvroJacksonCodec

在 Redisson 中是一个编解码器,它使用 Jackson 的 Avro 格式(一种用于序列化的二进制/文本格式)来序列化和反序列化数据。Avro 是一个在大数据和流处理应用中广泛使用的格式。

下面是如何在 Spring Boot 中使用

AvroJacksonCodec

的完整示例。

  1. 创建 Spring Boot 项目

使用 Spring Initializr 或其他工具创建一个新的 Spring Boot 项目。

  1. 添加依赖

在项目的

pom.xml

文件中添加 Redis, Redisson 和 Jackson 的依赖:

<!-- Spring Boot Starter Data Redis 依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- Redisson 依赖 --><dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.15.0</version><!-- 请根据实际情况选择版本 --></dependency><!-- Jackson Avro 依赖 --><dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-avro</artifactId></dependency>
  1. 配置 Redis 和 Redisson

application.properties

application.yml

文件中配置 Redis 和 Redisson:

# Redisson 配置
redisson.config=classpath:redisson.yaml

resources

目录下创建

redisson.yaml

文件,并配置 Redis 服务器地址以及使用

AvroJacksonCodec

singleServerConfig:address:"redis://127.0.0.1:6379"codec:!<org.redisson.codec.AvroJacksonCodec>{}
  1. 创建一个 Service 类来使用 Redisson
importorg.redisson.api.RBucket;importorg.redisson.api.RedissonClient;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Service;@ServicepublicclassRedissonService{@AutowiredprivateRedissonClient redissonClient;/**
     * 存储一个对象到 Redis。
     *
     * @param key Redis 的键
     * @param object 要存储的对象
     */publicvoidstoreObject(String key,Object object){RBucket<Object> bucket = redissonClient.getBucket(key);
        bucket.set(object);}/**
     * 从 Redis 获取一个对象。
     *
     * @param key Redis 的键
     * @return 存储在 Redis 中的对象
     */publicObjectgetObject(String key){RBucket<Object> bucket = redissonClient.getBucket(key);return bucket.get();}}
  1. 使用 RedissonService

你可以在 Controller 或其他组件中调用

RedissonService

的方法,以存储和获取对象。

importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.*;@RestControllerpublicclassRedissonController{@AutowiredprivateRedissonService redissonService;// 假设有一个简单的 User 类用于测试publicstaticclassUser{publicString name;publicint age;// getter 和 setter 省略}@PostMapping("/store-user")publicvoidstoreUser(@RequestBodyUser user){
        redissonService.storeObject("storedUser", user);}@GetMapping("/get-user")publicUsergetUser(){return(User) redissonService.getObject("storedUser");}}

在上述示例中,当我们使用

storeUser

方法存储一个

User

对象时,由于我们在 Redisson 的配置中使用了

AvroJacksonCodec

,这个对象会被序列化为 Avro 格式并存储在 Redis 中。同样地,当我们使用

getUser

方法从 Redis 获取对象时,这个对象会从其 Avro 表示中反序列化回来。

✌SmileJacksonCodec

✍ 作用和特点

  • 另一种二进制的 JSON 编码,紧凑。
  • 用于紧凑的二进制 JSON 数据编码。
  • 基于 Jackson 库,提供高效的数据序列化和反序列化,节省存储空间。

✍ 使用场景

  • 适用于希望节省存储空间的场景,特别是在大规模数据存储时。

✍ 优缺点

  • 优点:紧凑的二进制编码方式,减少存储空间和网络带宽的消耗。
  • 缺点:相对于 JSON 编码,Smile 编码可能不太人可读,难以调试。

✍ 示例

SmileJacksonCodec

在 Redisson 中是一个编解码器,它使用 Jackson 的 Smile 格式(一种二进制的 JSON 格式)来序列化和反序列化数据。Smile 格式在某些场景下比纯文本的 JSON 格式更加高效。下面是如何在 Spring Boot 中使用

SmileJacksonCodec

的完整示例。

  1. 创建 Spring Boot 项目

使用 Spring Initializr 或其他工具创建一个新的 Spring Boot 项目。

  1. 添加依赖

在项目的

pom.xml

文件中添加 Redis, Redisson 和 Jackson 的依赖:

<!-- Spring Boot Starter Data Redis 依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- Redisson 依赖 --><dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.15.0</version><!-- 请根据实际情况选择版本 --></dependency><!-- Jackson Smile 依赖 --><dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-smile</artifactId></dependency>
  1. 配置 Redis 和 Redisson

application.properties

application.yml

文件中配置 Redis 和 Redisson:

# Redisson 配置
redisson.config=classpath:redisson.yaml

resources

目录下创建

redisson.yaml

文件,并配置 Redis 服务器地址以及使用

SmileJacksonCodec

singleServerConfig:address:"redis://127.0.0.1:6379"codec:!<org.redisson.codec.SmileJacksonCodec>{}
  1. 创建一个 Service 类来使用 Redisson
importorg.redisson.api.RBucket;importorg.redisson.api.RedissonClient;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Service;@ServicepublicclassRedissonService{@AutowiredprivateRedissonClient redissonClient;/**
     * 存储一个对象到 Redis。
     *
     * @param key Redis 的键
     * @param object 要存储的对象
     */publicvoidstoreObject(String key,Object object){RBucket<Object> bucket = redissonClient.getBucket(key);
        bucket.set(object);}/**
     * 从 Redis 获取一个对象。
     *
     * @param key Redis 的键
     * @return 存储在 Redis 中的对象
     */publicObjectgetObject(String key){RBucket<Object> bucket = redissonClient.getBucket(key);return bucket.get();}}
  1. 使用 RedissonService

你可以在 Controller 或其他组件中调用

RedissonService

的方法,以存储和获取对象。

importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.*;@RestControllerpublicclassRedissonController{@AutowiredprivateRedissonService redissonService;// 假设有一个简单的 User 类用于测试publicstaticclassUser{publicString name;publicint age;// getter 和 setter 省略}@PostMapping("/store-user")publicvoidstoreUser(@RequestBodyUser user){
        redissonService.storeObject("storedUser", user);}@GetMapping("/get-user")publicUsergetUser(){return(User) redissonService.getObject("storedUser");}}

在上述示例中,当我们使用

storeUser

方法存储一个

User

对象时,由于我们在 Redisson 的配置中使用了

SmileJacksonCodec

,这个对象会被序列化为 Smile 格式并存储在 Redis 中。同样地,当我们使用

getUser

方法从 Redis 获取对象时,这个对象会从其 Smile 表示中反序列化回来。

✌CborJacksonCodec

✍ 作用和特点

  • CBOR 二进制 JSON 编码,高效。
  • 用于高效的 CBOR 格式数据编码。
  • 基于 Jackson 库,提供高性能的数据序列化和反序列化。

✍ 使用场景

  • 适用于需要高效的二进制数据编码的场景,特别是在资源有限的环境下。

✍ 优缺点

  • 优点:高效的 CBOR 编码方式,节省存储空间和网络带宽。
  • 缺点:相对于 JSON 编码,CBOR 编码可能不太人可读,难以调试。

✍ 示例

CborJacksonCodec

在 Redisson 中是一个编解码器,它使用 Jackson 的 CBOR 格式进行数据的序列化和反序列化。CBOR (Concise Binary Object Representation) 是一种为小型数据传输设计的二进制格式,其设计目标是超越 JSON 在数据大小和处理速度上的优势。

以下是在 Spring Boot 中使用

CborJacksonCodec

的完整示例:

  1. 创建 Spring Boot 项目

首先,使用 Spring Initializr 或其他工具创建一个新的 Spring Boot 项目。

  1. 添加依赖

pom.xml

中加入 Redis、Redisson 和 Jackson 的依赖:

<!-- Spring Boot Starter Data Redis 依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- Redisson 依赖 --><dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.15.0</version><!-- 根据实际情况选择版本 --></dependency><!-- Jackson CBOR 依赖 --><dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-cbor</artifactId></dependency>
  1. 配置 Redis 和 Redisson

application.properties

application.yml

文件中,对 Redis 和 Redisson 进行配置:

# Redisson 配置
redisson.config=classpath:redisson.yaml

resources

文件夹下,创建

redisson.yaml

文件并进行以下配置:

singleServerConfig:address:"redis://127.0.0.1:6379"codec:!<org.redisson.codec.CborJacksonCodec>{}
  1. 创建一个 Service 类来使用 Redisson
importorg.redisson.api.RBucket;importorg.redisson.api.RedissonClient;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Service;@ServicepublicclassRedissonService{@AutowiredprivateRedissonClient redissonClient;/**
     * 将对象保存到 Redis。
     * 
     * @param key Redis 的键
     * @param object 要存储的对象
     */publicvoidstoreObject(String key,Object object){RBucket<Object> bucket = redissonClient.getBucket(key);
        bucket.set(object);}/**
     * 从 Redis 中取出对象。
     *
     * @param key Redis 的键
     * @return 存储在 Redis 中的对象
     */publicObjectgetObject(String key){RBucket<Object> bucket = redissonClient.getBucket(key);return bucket.get();}}
  1. 使用 RedissonService

在 Controller 或其他组件中调用

RedissonService

的方法,以存储和取出对象。

importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.*;@RestControllerpublicclassRedissonController{@AutowiredprivateRedissonService redissonService;// 假定有一个简单的 User 类用于测试publicstaticclassUser{publicString name;publicint age;// getter 和 setter 省略}@PostMapping("/store-user")publicvoidstoreUser(@RequestBodyUser user){
        redissonService.storeObject("storedUser", user);}@GetMapping("/get-user")publicUsergetUser(){return(User) redissonService.getObject("storedUser");}}

在此示例中,当我们使用

storeUser

方法存储一个

User

对象时,由于在 Redisson 配置中我们使用了

CborJacksonCodec

,这个对象会被序列化为 CBOR 格式并存入 Redis。当我们使用

getUser

方法从 Redis 中取出对象时,这个对象会从其 CBOR 表示中进行反序列化。

✌MsgPackJacksonCodec

✍ 作用和特点

  • MsgPack 二进制 JSON 编码,高效。
  • 用于高效的 MsgPack 格式数据编码。
  • 基于 Jackson 库,提供高性能的数据序列化和反序列化。

✍ 使用场景

  • 适用于需要高效的二进制数据编码的场景,与一些消息队列系统兼容。

✍ 优缺点

  • 优点:高效的 MsgPack 编码方式,节省存储空间和网络带宽。
  • 缺点:相对于 JSON 编码,MsgPack 编码可能不太人可读,难以调试。

✍ 示例

// 导入必要的包importorg.redisson.api.RedissonClient;importorg.redisson.codec.MsgPackJacksonCodec;// 获取 Redisson 客户端RedissonClient redisson =...;// 使用 MsgPackJacksonCodec 编码方式存储和获取对象
redisson.getBucket("myKey",newMsgPackJacksonCodec()).set(myObject);MyObject retrievedObject = redisson.getBucket("myKey",newMsgPackJacksonCodec()).get();

✌IonJacksonCodec

✍ 作用和特点

  • Amazon Ion 编码,类似 JSON。
  • 用于与 Amazon Ion 格式交互的情况。
  • 基于 Jackson 库,支持 Amazon Ion 数据编码。

✍ 使用场景

  • 适用于需要与 Amazon Ion 格式进行交互的场景,例如与 AWS 服务集成。

✍ 优缺点

  • 优点:支持 Amazon Ion 格式,可用于与 AWS 服务之间的数据交互。
  • 缺点:相对于其他编码方式,Ion 编码可能不太人可读。

✍ 示例

// 导入必要的包importorg.redisson.api.RedissonClient;importorg.redisson.codec.IonJacksonCodec;// 获取 Redisson 客户端RedissonClient redisson =...;// 使用 IonJacksonCodec 编码方式存储和获取对象
redisson.getBucket("myKey",newIonJacksonCodec()).set(myObject);MyObject retrievedObject = redisson.getBucket("myKey",newIonJacksonCodec()).get();

✌KryoCodec

✍ 作用和特点

  • 二进制对象序列化编码,高性能。
  • 用于需要高性能的 Java 对象序列化。
  • 基于 Kryo 库,提供高效的二进制数据序列化和反序列化。

✍ 使用场景

  • 适用于需要高性能 Java 对象序列化和反序列化的场景,例如大规模数据处理。

✍ 优缺点

  • 优点:高性能,二进制编码方式,减少存储空间和网络带宽的消耗。
  • 缺点:Kryo 编码可能不太人可读,需要注意版本兼容性。

✍ 示例

// 导入必要的包importorg.redisson.api.RedissonClient;importorg.redisson.codec.KryoCodec;// 获取 Redisson 客户端RedissonClient redisson =...;// 使用 KryoCodec 编码方式存储和获取对象
redisson.getBucket("myKey",newKryoCodec()).set(myObject);MyObject retrievedObject = redisson.getBucket("myKey",newKryoCodec()).get();

✌SerializationCodec

✍ 作用和特点

  • JDK 序列化编码,性能较差。
  • 用于原生 Java 对象序列化。
  • 基于 Java 默认的序列化机制,兼容性好但性能较差。

✍ 使用场景

  • 适用于需要 Java 原生对象序列化和反序列化的场景,但不要求高性能。

✍ 优缺点

  • 优点:兼容性好,支持几乎所有的 Java 对象。
  • 缺点:性能较差,占用存储空间和网络带宽较多。

✍ 示例

// 导入必要的包importorg.redisson.api.RedissonClient;importorg.redisson.codec.SerializationCodec;// 获取 Redisson 客户端RedissonClient redisson =...;// 使用 SerializationCodec 编码方式存储和获取对象
redisson.getBucket("myKey",newSerializationCodec()).set(myObject);MyObject retrievedObject = redisson.getBucket("myKey",newSerializationCodec()).get();

✌FstCodec

✍ 作用和特点

  • FST 二进制对象序列化编码,高性能。
  • 用于高性能 Java 对象序列化,性能比 JDK 序列化更好。
  • 提供高性能和兼容性的 Java 对象序列化。

✍ 使用场景

  • 适用于需要高性能 Java 对象序列化和反序列化的场景,不希望牺牲性能和兼容性。

✍ 优缺点

  • 优点:高性能,与 JDK 序列化兼容,性能比 JDK 序列化更好。
  • 缺点:相对于二进制编码,不太人可读。

✍ 示例

// 导入必要的包importorg.redisson.api.RedissonClient;importorg.redisson.codec.FstCodec;// 获取 Redisson 客户端RedissonClient redisson =...;// 使用 FstCodec 编码方式存储和获取对象
redisson.getBucket("myKey",newFstCodec()).set(myObject);MyObject retrievedObject = redisson.getBucket("myKey",newFstCodec()).get();

✌LZ4Codec

✍ 作用和特点

  • 压缩型序列化对象编码,高效。
  • 用于高效压缩的数据存储和检索。
  • 使用 LZ4 压缩算法,节省存储空间。

✍ 使用场景

  • 适用于需要节省存储空间的场景,特别是对大型数据的存储。

✍ 优缺点

  • 优点:高效的压缩方式,节省存储空间。
  • 缺点:压缩和解压需要一定的计算资源,可能会影响性能。

✍ 示例

// 导入必要的包importorg.redisson.api.RedissonClient;importorg.redisson.codec.LZ4Codec;// 获取 Redisson 客户端RedissonClient redisson =...;// 使用 LZ4Codec 编码方式存储和获取对象
redisson.getBucket("myKey",newLZ4Codec()).set(myObject);MyObject retrievedObject = redisson.getBucket("myKey",newLZ4Codec()).get();

✌SnappyCodec

✍ 作用和特点

  • 压缩型序列化对象编码,高效。
  • 用于高效压缩的数据存储和检索。
  • 使用 Snappy 压缩算法,节省存储空间。

✍ 使用场景

  • 适用于需要节省存储空间的场景,特别是对大型数据的存储。

✍ 优缺点

  • 优点:高效的压缩方式,节省存储空间。
  • 缺点:压缩和解压需要一定的计算资源,可能会影响性能。

✍ 示例

// 导入必要的包importorg.redisson.api.RedissonClient;importorg.redisson.codec.SnappyCodec;// 获取 Redisson 客户端RedissonClient redisson =...;// 使用 SnappyCodec 编码方式存储和获取对象
redisson.getBucket("myKey",newSnappyCodec()).set(myObject);MyObject retrievedObject = redisson.getBucket("myKey",newSnappyCodec()).get();

✌JsonJacksonMapCodec

✍ 作用和特点

  • 基于 Jackson 的映射类使用的编码。
  • 用于映射类数据的序列化和反序列化。
  • 可用于避免序列化类的信息,以及解决使用 byte[] 时遇到的问题。

✍ 使用场景

  • 适用于需要对映射类数据进行序列化和反序列化的场景,特别是对复杂映射类的处理。

✍ 优缺点

  • 优点:支持映射类的序列化和反序列化,可用于处理复杂数据结构。
  • 缺点:相对于其他编码方式,可能需要更多的配置。

✍ 示例

// 导入必要的包importorg.redisson.api.RedissonClient;importorg.redisson.codec.JsonJacksonMapCodec;// 获取 Redisson 客户端RedissonClient redisson =...;// 使用 JsonJacksonMapCodec 编码方式存储和获取对象
redisson.getMap("myMap",newJsonJacksonMapCodec()).put("key", myObject);MyObject retrievedObject = redisson.getMap("myMap",newJsonJacksonMapCodec()).get("key");

✌StringCodec

✍ 作用和特点

  • 纯字符串编码,无转换。
  • 用于存储和检索简单字符串数据。
  • 不进行额外的编码转换,直接存储字符串。

✍ 使用场景

  • 适用于存储和检索简单的字符串数据,例如配置信息。

✍ 优缺点

  • 优点:无需额外的编码转换,存储和检索效率高。
  • 缺点:仅适用于简单字符串数据,不支持复杂数据结构。

✍ 示例

// 导入必要的包importorg.redisson.api.RedissonClient;importorg.redisson.client.codec.StringCodec;// 获取 Redisson 客户端RedissonClient redisson =...;// 使用 StringCodec 编码方式存储和获取字符串
redisson.getBucket("myKey",newStringCodec()).set("myValue");String retrievedValue = redisson.getBucket("myKey",newStringCodec()).get();

✌LongCodec

✍ 作用和特点

  • 纯整长型数字编码,无转换。
  • 用于存储和检索长整数数据。
  • 不进行额外的编码转换,直接存储整数。

✍ 使用场景

  • 适用于存储和检索长整数数据,例如计数器。

✍ 优缺点

  • 优点:无需额外的编码转换,存储和检索效率高。
  • 缺点:仅适用于长整数数据,不支持其他数据类型。

✍ 示例

// 导入必要的包importorg.redisson.api.RedissonClient;importorg.redisson.client.codec.LongCodec;//

 获取 Redisson 客户端
RedissonClient redisson =...;// 使用 LongCodec 编码方式存储和获取长整数
redisson.getAtomicLong("myCounter",newLongCodec()).addAndGet(10);long retrievedValue = redisson.getAtomicLong("myCounter",newLongCodec()).get();

✌ByteArrayCodec

✍ 作用和特点

  • 字节数组编码。
  • 用于存储和检索原始字节数据。
  • 不进行额外的编码转换,直接存储字节数组。

✍ 使用场景

  • 适用于存储和检索原始字节数据,例如图像、文件等。

✍ 优缺点

  • 优点:直接存储字节数组,适用于任何原始数据类型。
  • 缺点:需要确保正确的字节数组序列化和反序列化。

✍ 示例

// 导入必要的包importorg.redisson.api.RedissonClient;importorg.redisson.client.codec.ByteArrayCodec;// 获取 Redisson 客户端RedissonClient redisson =...;// 使用 ByteArrayCodec 编码方式存储和获取字节数组byte[] data =...;
redisson.getBucket("myData",newByteArrayCodec()).set(data);byte[] retrievedData = redisson.getBucket("myData",newByteArrayCodec()).get();

✌CompositeCodec

✍ 作用和特点

  • 用来组合多种不同编码方式在一起。
  • 根据需求选择不同的编码方式,适用于不同类型的数据。

✍ 使用场景

  • 适用于需要在一个应用程序中处理多种不同类型数据的场景,灵活选择编码方式。

✍ 优缺点

  • 优点:灵活多样,根据需要选择不同的编码方式。
  • 缺点:需要额外的配置来指定编码方式。

✍ 示例

// 导入必要的包importorg.redisson.api.RedissonClient;importorg.redisson.codec.CompositeCodec;// 获取 Redisson 客户端RedissonClient redisson =...;// 创建 CompositeCodec,并指定不同的编码方式CompositeCodec codec =newCompositeCodec();
codec.registerCodec("json",newJsonJacksonCodec());
codec.registerCodec("kryo",newKryoCodec());
codec.registerCodec("string",newStringCodec());// 使用 CompositeCodec 编码方式存储和获取对象
redisson.getBucket("myKey", codec).set(myObject);MyObject retrievedObject = redisson.getBucket("myKey", codec).get();

这些是 Redisson 提供的不同编码方式以及它们的作用、使用场景和示例。根据具体的应用需求和性能要求,可以选择合适的编码方式来与 Spring Boot 集成并操作 Redis 数据。

标签: spring boot 后端 java

本文转载自: https://blog.csdn.net/yueerba126/article/details/132720035
版权归原作者 yueerba126 所有, 如有侵权,请联系我们删除。

“Springboot-Redisson - 3.数据序列化”的评论:

还没有评论