Redis序列化操作

目录

1.protostuff 的 Maven 依赖

2.定义实体类 

3.序列化工具类 ProtostuffSerializer 提供了序列化和反序列化方法 

4.测试  


利用 Jedis 提供的字节数组参数方法,如:

  • public String set(String key, String value)

  • public String set(byte[] key, byte[] value)

  • public byte[] get(byte[] key)

  • public String get(String key)

拥用这些 API 的支持,就可以将 Java 对象序列化为二进制,当应用需要获取 Java 对象时,使用 public byte[] get(byte[] key) 函数将字节数组取出,然后反序列化为 Java 对象即可。和很多 NoSQL 数据库 (例如Memchache、Ehcache)的客户端不同,Jedis 本身没有提供序列化的工具,也就是说开发者需要自己引入序列化的工具。序列化的工具有很多,例如   XML、Json、谷歌的 Protobuf 、Facebook 的 Thrift 等等,对于序列化工具的选择开发者可以根据自身的需求决定,下面以 protostuff (Protobuf 的 Java 客户端)为例子进行说明。

1.protostuff 的 Maven 依赖

    <properties><protostuff.version>1.0.11</protostuff.version></properties><dependencies>//redis客户端<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.8.2</version></dependency>//protostuff 客户端<dependency><groupId>com.dyuproject.protostuff</groupId><artifactId>protostuff-runtime</artifactId><version>${protostuff.version}</version></dependency><dependency><groupId>com.dyuproject.protostuff</groupId><artifactId>protostuff-core</artifactId><version>${protostuff.version}</version></dependency></dependencies>

2.定义实体类 

package org.example.Entity;import java.io.Serializable;
import java.util.Date;public class Club implements Serializable {private int id;     //idprivate String name;//名称private String info;//描述private Date createDate;//创建日期private int rank;public Club(int id, String name, String info, Date createDate, int rank) {this.id = id;this.name = name;this.info = info;this.createDate = createDate;this.rank = rank;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getInfo() {return info;}public void setInfo(String info) {this.info = info;}public Date getCreateDate() {return createDate;}public void setCreateDate(Date createDate) {this.createDate = createDate;}public int getRank() {return rank;}public void setRank(int rank) {this.rank = rank;}//测试使用@Overridepublic String toString() {return "Club{" +"id=" + id +", name='" + name + '\'' +", info='" + info + '\'' +", createDate=" + createDate +", rank=" + rank +'}';}
}

3.序列化工具类 ProtostuffSerializer 提供了序列化和反序列化方法 

package org.example.until;import com.dyuproject.protostuff.LinkedBuffer;
import com.dyuproject.protostuff.ProtostuffIOUtil;
import com.dyuproject.protostuff.Schema;
import com.dyuproject.protostuff.runtime.RuntimeSchema;
import org.example.Entity.Club;
//序列化工具类
public class ProtostuffSerializer {// 通过反射机制创建了 Club 类型的模式(schema)private Schema<Club> schema = RuntimeSchema.createFrom(Club.class);//序列化public byte[] serialize(Club club){//初始化序列化缓冲LinkedBuffer buffer = LinkedBuffer.allocate(LinkedBuffer.DEFAULT_BUFFER_SIZE);try {//序列化成字节数组return serializeInternal(club,schema,buffer);}catch (Exception e){throw new IllegalStateException(e.getMessage(),e);}finally {buffer.clear();}}//反序列化public Club deserialize(byte[] bytes){try {//拿到反序列化对象Club club = deserializeInternal(bytes,schema.newMessage(),schema);if (club != null){return club;}}catch (Exception e){throw new IllegalStateException(e.getMessage(),e);}return null;}//返回序列化数组private <T> byte[] serializeInternal(final T source,final Schema<T> schema,LinkedBuffer buffer) {return ProtostuffIOUtil.toByteArray(source,schema,buffer);}//将字节数组反序列化操作private <T> T deserializeInternal(byte[] bytes, T result, Schema<T> schema) {ProtostuffIOUtil.mergeFrom(bytes,result,schema);return result;}
}

4.测试  

package org.example;import org.example.Entity.Club;
import org.example.until.ProtostuffSerializer;
import redis.clients.jedis.Jedis;import java.util.Date;// 按两次 Shift 打开“随处搜索”对话框并输入 `show whitespaces`,
// 然后按 Enter 键。现在,您可以在代码中看到空格字符。
public class Main {public static void main(String[] args) {//生成序列化工具类ProtostuffSerializer protostuffSerializer = new ProtostuffSerializer();Jedis jedis = JedusUtils.getJedis();String key = "club:1";//定义实体对象Club club = new Club(1,"AC","米兰",new Date(),1);System.out.println("序列化:"+club);//序列化byte[] clubBytes = protostuffSerializer.serialize(club);jedis.set(key.getBytes(),clubBytes);//反序列化byte[] resultBytes = jedis.get(key.getBytes());//反序列化 1,"AC","米兰",new Date(),1Club resultClub = protostuffSerializer.deserialize(resultBytes);System.out.println("反序列化: "+resultClub);}
}

运行结果如图:

 

最终成功实现。 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/172936.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 1457. 二叉树中的伪回文路径

原题链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 耗时&#xff1a;28min48s C代码 dfs、二叉树前序遍历、哈希表记录 #include<bits/stdc.h> using namespace std;struct TreeNode {int val;TreeNode *left;TreeNode *rig…

HarmonyOS(六)——@Builder装饰器

前言 前面章节介绍了如何创建一个自定义组件以及认识页面和自定义组件生命周期。明白了自定义组件内部UI结构固定&#xff0c;仅与使用方进行数据传递。同时明白了自定义组件对应生命周期的机制管理。ArkUI还提供了一种更轻量的UI元素复用机制Builder&#xff0c;Builder所装饰…

CentOS7部署FTP服务器

首先准备一台centos7虚拟机&#xff0c;作为服务器IP地址必须是固定的。 vim /etc/sysconfig/network-scripts/ifcfg-ens33配置内容如下&#xff1a; TYPE"Ethernet" PROXY_METHOD"none" BROWSER_ONLY"no" BOOTPROTO"static" DEFROU…

【Vue3+Vite】解决build后空白页的问题

目录 Hash 模式 HTML5 模式&#xff08;历史模式&#xff09; 配置Nginx 配置Spring Boot Hash 模式 build后空白页的问题可能是使用的是历史模式&#xff0c;因为Vue是一个单页的客户端应用&#xff0c;如果没有适当的服务器配置&#xff0c;访问会得到一个 404 错误…

【研究中2】sql server权限用户设置

--更新时间2023.11.26 21&#xff1a;30 负责人&#xff1a;jerrysuse DBAliCMSIF EXISTS (select * from sysobjects where namehkcms_admin)--判断是否存在此表DROP TABLE hkcms_adminCREATE TABLE hkcms_admin (id int identity(1, 1),--id int primary key identity…

静态路由配置过程

静态路由 静态路由简介 路由器在转发数据时&#xff0c;要先在路由表&#xff08;Routing Table&#xff09;中在找相应的路由&#xff0c;才能知道数据包应该从哪个端口转发出去。路由器建立路由表基本上有以下三种途径。 &#xff08;1&#xff09;直连路由&#xff1a;路由…

HDMI接口信号流向及原理图分析

1、HDMI的来源及发展 如今显示器上最常用的接口无非HDMI&#xff08;High Definition Multimedia Interface&#xff09;与DP&#xff08;DisplayPort&#xff09;两种&#xff0c;VGA与DVI已经很少使用&#xff0c;原因在于VGA传输的是模拟信号&#xff0c;在发送端需要将数字…

C++前缀和算法:统计美丽子字符串

题目 给你一个字符串 s 和一个正整数 k 。 用 vowels 和 consonants 分别表示字符串中元音字母和辅音字母的数量。 如果某个字符串满足以下条件&#xff0c;则称其为 美丽字符串 &#xff1a; vowels consonants&#xff0c;即元音字母和辅音字母的数量相等。 (vowels * cons…

Jenkins与Docker的自动化CI/CD流水线实践

Pipeline 有诸多优点&#xff0c;例如&#xff1a; 项目发布可视化&#xff0c;明确阶段&#xff0c;方便处理问题 一个Jenkins File文件管理整个项目生命周期 Jenkins File可以放到项目代码中版本管理 Jenkins管理界面 操作实例&#xff1a;Pipeline的简单使用 这里是比较…

设计模式-迭代器模式

定义 迭代器模式是一种行为型设计模式&#xff0c;它提供一种按顺序访问聚合对象中的元素的方法&#xff0c;而又无须暴露聚合对象的内部表示。迭代器模式通过将集合对象的迭代行为抽象到迭代器中&#xff0c;提供一致的接口&#xff0c;使得不同的容器可以提供一致的遍历行为…

elastic -job和springboot集成实现分布式调度5

一 案例介绍说明 1.1 案例介绍 基于 Spring boot 集成方式的而产出的工程代码&#xff0c;完成对作业分片的实现&#xff0c;文件数据备份采取更接近真实项目的数 据库存取方式。 1.分片设置 2.每个线程获取给自的类型 1.2 作业配置 zk的配置 二 操作说明 2.1 数据表的初始…

深入理解计算机中的程序

目录 程序的存储 程序的编译过程 各位宝宝好&#xff0c;我们这次从计算机底层来讲一下程序是如何存储&#xff0c;编译的 程序的存储 我们拿一个最简单的程序来举个例子&#xff1a; #include<stdio.h> int main() {printf("hello world");return 0; } …

类与对象(下)

&#x1f389;个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名乐于分享在学习道路上收获的大二在校生&#x1f43b;‍❄个人主页&#x1f389;&#xff1a;GOTXX&#x1f43c;个人WeChat&#xff1a;ILXOXVJE &#x1f43c;本文由GOTXX原创&#xff0c;首发CSDN&a…

设计模式精讲:掌握单例模式的实现与优化

掌握单例模式的实现与优化 一、引言&#xff1a;如何学习设计模式&#xff1f;二、前置知识&#xff1a;对象的创建的销毁2.1、拷贝构造2.2、拷贝赋值构造2.3、移动构造2.4、移动赋值构造 三、单例模式的定义四、单例模式的实现与优化4.1、版本一4.2、版本二4.3、版本三4.4、版…

TypeScript中的“as”语法是什么?

在TypeScript中&#xff0c;as是一种类型断言的语法。它用于告诉编译器某个值的类型&#xff0c;并强制将其视为指定的类型。这可以用于处理类型检查无法确定的情况&#xff0c;或者在开发者明确知道某个值的类型时。 as语法可以在以下情况下使用&#xff1a; 当开发者确定某…

ros2智能小车中STM32地盘需要用到PWM的模块

我做的地盘比较简单&#xff0c;使用了一下模块&#xff1a; 4个直流减速电机&#xff0c;&#xff08;每个模块用到了一个PWM&#xff09;---这会通过L298N的ENA,ENB来实现控制 光电对射测速模块&#xff08;不用PWM) 超声波测距模块&#xff08;不用PWM&#xff0c;只需要…

传统数仓和clickhouse对比

背景 传统数仓一般都是HiveSparkSql作为代表&#xff0c;不过也包括Kylin等&#xff0c;而clickhouse是实时OLAP的代表&#xff0c;我们简单看下他们的对比 传统数仓和clickhouse对比 HiveSparkSQL的传统数仓&#xff1a; 1.数据更新速度慢&#xff0c;由于传统数仓一般都是…

靡靡之音 天籁之声 ——Adobe Audition

上一期讲到了和Pr配合使用的字幕插件Arctime Pro的相关介绍。相信还记得的小伙伴应该记得我还提到过一个软件叫做Au。 当人们对字幕需求的逐渐满足&#xff0c;我们便开始追求更高层次的享受&#xff0c;当视觉享受在进步&#xff0c;听觉享受想必也不能被落下&#xff01; Au即…

NX二次开发UF_CURVE_ask_offset_parms 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_ask_offset_parms Defined in: uf_curve.h int UF_CURVE_ask_offset_parms(tag_t offset_curve_object, UF_CURVE_offset_data_p_t offset_data_pointer ) overview 概述 …

什么是好的FPGA编码风格?(3)--尽量不要使用锁存器Latch

前言 在FPGA设计中&#xff0c;几乎没人会主动使用锁存器Latch&#xff0c;但有时候不知不觉中你的设计莫名其妙地就生成了一堆Latch&#xff0c;而这些Latch可能会给你带来巨大的麻烦。 什么是锁存器Latch&#xff1f; Latch&#xff0c;锁存器&#xff0c;一种可以存储电路…