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.hqwc.cn/news/221306.html

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

相关文章

基于python协同过滤推荐算法的音乐推荐与管理系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 基于Python的协同过滤推荐算法的音乐推荐与管理系统是一个集成了音乐推荐和管理的系统&#xff0c;它使用协同过滤算…

Linux(8):BASH

硬件、核心与 Shell 操作系统其实是一组软件&#xff0c;由于这组软件在控制整个硬件与管理系统的活动监测&#xff0c;如果这组软件能被用户随意的操作&#xff0c;若使用者应用不当&#xff0c;将会使得整个系统崩溃。因为操作系统管理的就是整个硬件功能。 应用程序在最外层…

虚拟化逻辑架构: LBR 网桥基础管理

目录 一、理论 1.Linux Bridge 二、实验 1.LBR 网桥管理 三、问题 1.Linux虚拟交换机如何增删 一、理论 1.Linux Bridge Linux Bridge&#xff08;网桥&#xff09;是用纯软件实现的虚拟交换机&#xff0c;有着和物理交换机相同的功能&#xff0c;例如二层交换&#…

1.9 字符数组

1.9 字符数组 一、字符数组概述二、练习 一、字符数组概述 所谓字符数组&#xff0c;就是char类型的数组&#xff0c;比如 char a[]&#xff0c;是C语言中最常用的数组类型&#xff0c;先看一个程序 #include <stdio.h> #define MAXLINE 1000 //最大行长度限制 int get…

【赠书第8期】工程效能十日谈

文章目录 前言 1 工程效能十日谈 1.1 制定清晰的目标和计划 1.2 引入先进的技术和工具 1.3 建立有效的沟通机制 1.4 灵活应对变化 1.5 确保资源充足 1.6 进行有效的风险管理 1.7 进行持续的监控和评估 1.8 优化团队合作 1.9 注重质量管理 1.10 进行项目总结和反思 …

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 概述 …

[pyqt5]pyqt5设置窗口背景图片后上面所有图片都会变成和背景图片一样

pyqt5的控件所有都是集成widget&#xff0c;窗体设置背景图片后控件背景也会跟着改变&#xff0c;此时有2个办法。第一个办法显然我们可以换成其他方式设置窗口背景图片&#xff0c;而不是使用styleSheet样式表&#xff0c;网上有很多其他方法。还有个办法就是仍然用styleSheet…

jenkins流水线(pipline)实例

1、pipline 语法介绍 声明式的pipeline语法格式 1. 所有的声明都必须包含在pipeline{}中 2. 块只能有节段&#xff0c;指令&#xff0c;步骤或者赋值语句组成 3. 阶段&#xff1a;agent&#xff0c;stages&#xff0c;post&#xff0c;steps 4. 指令&#xff1a;environment&a…

RedLock底层源码分析

RedLock底层源码分析 一、Redlock红锁算法 https://redis.io/docs/manual/patterns/distributed-locks/官网说明 1、为什么要学习这个&#xff1f;怎么产生的&#xff1f; ​ 一个很直接的问题&#xff0c;当我使用redis锁的那台机器挂了&#xff0c;出现了单点故障了&#…

transformers pipeline出现ConnectionResetError的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

案例030:基于微信小程序的英语学习交流平台

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

PTA-7-53 身份证排序

题目&#xff1a; 输入n&#xff0c;然后连续输入n个身份证号。 将每个身份证的年月日抽取出来&#xff0c;按年-月-日格式组装&#xff0c;然后对组装后的年-月-日升序输出。 根据题目要求&#xff0c;代码实现如下&#xff1a; import java.util.Scanner; import java.uti…