Redis JdkSerializationRedisSerializer,stringRedisSerializer,ProtoBuf 体积,性能简单比较.
/**
* User: laizhenwei
* Date: 2018-04-10 Time: 14:17
* Description:
*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class MessageProtoTest { //ProtoBuf
@Resource
private RedisTemplate<String,MessageProto.Message> messageProtoRedisTemplate; //JDK
@Resource
private RedisTemplate<String,MessageProto.Message> redisTemplate; //String json
@Resource
private RedisTemplate<String,String> jsonRedisTemplate; //JDK
@Test
public void add(){
BoundSetOperations<String, MessageProto.Message> operations = redisTemplate.boundSetOps("message1");
long begin = System.nanoTime();
for(int i = 0;i<100 ;i++){
MessageProto.Message.Builder builder = MessageProto.Message.newBuilder();
builder.setId(i);
builder.setLength(10);
builder.setMsgBody("你好啊");
builder.setType(MessageProto.Message.Type.ACTIVE_VALUE);
MessageProto.Message message = builder.build();
operations.add(message);
} System.out.println((System.nanoTime() - begin)/1000000); } //ProtoBuf
@Test
public void add2(){
BoundSetOperations<String, MessageProto.Message> operations = messageProtoRedisTemplate.boundSetOps("message2");
long begin = System.nanoTime();
for(int i = 0;i<100 ;i++){
MessageProto.Message.Builder builder = MessageProto.Message.newBuilder();
builder.setId(i);
builder.setLength(10);
builder.setMsgBody("你好啊");
builder.setType(MessageProto.Message.Type.ACTIVE_VALUE);
MessageProto.Message message = builder.build();
operations.add(message);
} System.out.println((System.nanoTime() - begin)/1000000);
} //String json
@Test
public void add3(){ Gson gson = new Gson();
BoundSetOperations<String, String> operations = jsonRedisTemplate.boundSetOps("message3"); long begin = System.nanoTime(); for(int i = 0;i<100 ;i++){
MessageProto.Message.Builder builder = MessageProto.Message.newBuilder();
builder.setId(i);
builder.setLength(10);
builder.setMsgBody("你好啊");
builder.setType(MessageProto.Message.Type.ACTIVE_VALUE);
MessageProto.Message message = builder.build();
operations.add(gson.toJson(message));
} System.out.println((System.nanoTime() - begin)/1000000); }
}
耗时:
jdk: 192毫秒
protoBuf: 93 毫秒
Json: 107 毫秒
单行数据大小
JDK: 
protoBuf: 
JSON:
JDK使用ProtoBuf 生成的 java 文件类生产,看起来有很多垃圾数据

这次用 普通JAVA 类,写一个差不多结构的再试一次
@Getter
@Setter
public static class Message implements Serializable { private static final long serialVersionUID = -7270500345236168152L; //消息类型
private Byte type; //消息长度
private Integer length; private Long id; //消息体
private String msgBody; public Message(Byte type, Integer length, Long id, String msgBody) {
this.type = type;
this.length = length;
this.id = id;
this.msgBody = msgBody;
} @Getter
public enum Type {
ACTIVE((byte) 0x00, "激活"), MESSAGE((byte) 0x01, "消息"); //状态代码
private Byte code;
//状态名称
private String name; //构造方法
Type(Byte code, String name) {
this.code = code;
this.name = name;
} //根据code获取状态名称
public static String getNameByCode(Byte code) {
for (Type item : Type.values())
if (item.getCode().equals(code))
return item.getName();
return "";
}
} }
//JDK
@Test
public void add() {
BoundSetOperations<String, MessageProtoTest.Message> operations = redisTemplate.boundSetOps("message4");
long begin = System.nanoTime();
for (int i = 0; i < 100; i++)
operations.add(new MessageProtoTest.Message(Message.Type.ACTIVE.getCode(),10,(long)i,"你好啊")); System.out.println((System.nanoTime() - begin) / 1000000); }
结果: 耗时 137毫秒
单行数据大小: 
看起来更糟糕
Message.proto
syntax = "proto3";
option java_package = "com.lzw.protobuf";
option java_outer_classname = "MessageProto";
message Message { int32 type = 1; int32 length = 2; int32 id = 3; string msgBody = 4; enum Type {
ACTIVE = 0;
MESSAGE = 1;
} }
Redis JdkSerializationRedisSerializer,stringRedisSerializer,ProtoBuf 体积,性能简单比较.的更多相关文章
- Redis缓存的设计、性能、应用与数据集群同步
Redis缓存的设计.性能.应用与数据集群同步 http://youzhixueyuan.com/design-performance-and-application-of-redis-cache.h ...
- [评测]低配环境下,PostgresQL和Mysql读写性能简单对比(欢迎大家提出Mysql优化意见)
[评测]低配环境下,PostgresQL和Mysql读写性能简单对比 原文链接:https://www.cnblogs.com/blog5277/p/10658426.html 原文作者:博客园--曲 ...
- 【原创】分布式之数据库和缓存双写一致性方案解析(三) 前端面试送命题(二)-callback,promise,generator,async-await JS的进阶技巧 前端面试送命题(一)-JS三座大山 Nodejs的运行原理-科普篇 优化设计提高sql类数据库的性能 简单理解token机制
[原创]分布式之数据库和缓存双写一致性方案解析(三) 正文 博主本来觉得,<分布式之数据库和缓存双写一致性方案解析>,一文已经十分清晰.然而这一两天,有人在微信上私聊我,觉得应该要采用 ...
- Redis配置文件各项参数说明及性能调优
Redis配置文件参数说明: 1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 daemonize no 2. 当Redis以守护进程方式运行时,Redis默 ...
- Redis源码解析:01简单动态字符串SDS
Redis没有直接使用C字符串(以'\0'结尾的字符数组),而是构建了一种名为简单动态字符串( simple dynamic string, SDS)的抽象类型,并将SDS用作Redis的默认字符 ...
- python+uwsgi导致redis无法长链接引起性能下降问题记录
今天在部署python代码到预生产环境时,web站老是出现redis链接未初始化,无法连接到服务的提示,比对了一下开发环境与测试环境代码,完全一致,然后就是查看各种日志,排查了半天也没有查明是什么原因 ...
- WCF 中 TCP 与 HTTP 性能简单比较
在使用 WCF 时,为了更好地进行调试,我都选择了 HTTP 协议进行数据传输.最近项目对性能要求比较高,所以就换成了使用 TCP 协议.并对二者的性能进行了一个简单的测试.以下是测试结果: 环境: ...
- 关于redis的keys命令的性能问题
KEYS pattern 查找所有符合给定模式 pattern 的 key . KEYS * 匹配数据库中所有 key . KEYS h?llo 匹配 hello , hallo 和 hxllo 等. ...
- 【jQuery基础学习】11 jQuery性能简单优化
关于性能优化 合适的选择器 $("#id")会直接调用底层方法,所以这是最快的.如果这样不能直接找到,也可以用find方法继续查找 $("p")标签选择器也是直 ...
随机推荐
- android:碎片的使用方式
介绍了这么多抽象的东西,也是时候应该学习一下碎片的具体用法了.你已经知道,碎 片通常都是在平板开发中才会使用的,因此我们首先要做的就是新建一个平板电脑的模拟 器.由于 4.0 系统的平板模拟器好像存在 ...
- Opencv中Mat矩阵相乘——点乘、dot、mul运算详解
Opencv中Mat矩阵相乘——点乘.dot.mul运算详解 2016年09月02日 00:00:36 -牧野- 阅读数:59593 标签: Opencv矩阵相乘点乘dotmul 更多 个人分类: O ...
- SpringBoot日志logback-spring.xml分环境log4j logback slf4j区别 springboot日志设置
转载. https://blog.csdn.net/qianyiyiding/article/details/76565810 springboot按照profile进行打印日志log4j logba ...
- IntentService 服务 工作线程 stopself MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- 版本控制-GitHub
前面几篇文章,我们介绍了Git的基本用法及Git服务器的搭建,本篇文章来学习一下如何使用GitHub.GitHub是开源的代码库以及版本控制库,是目前使用网络上使用最为广泛的服务,GitHub可以托管 ...
- 微软BI 之SSRS 系列 - 实现 Excel 中图表结合的报表设计
来自群里面讨论的一个问题,EXCEL 中有类似于这样的图形,上面是 Chart, Chart X轴上的值正好就是下方 Table 的列头,这个在 SSRS 中应该如何实现? SSRS 2008.2 ...
- Duplicate Manager Pro for Mac(重复文件查找工具)破解版安装
1.软件简介 Duplicate Manager Pro 是 macOS 系统上一款重复文件查找工具,可以帮你在 Mac 电脑上查找出磁盘上面的重复文件,然后让你对这些重复文件进行判断并删除,使 ...
- Spring Boot 2.0 热部署指南
Spring Boot 2.0 支持热部署,实现方法很简单 Spring Boot 2.0 有几种热重载的选项. 推荐的方法是使用spring-boot-devtools 因为它提供了额外的开发时间功 ...
- [k8s]kube-dns架构图解
kubedns DNS Policy http://blog.fleeto.us/translation/configuring-private-dns-zones-and-upstream-name ...
- Handler消息传递机制浅析
http://www.runoob.com/w3cnote/android-tutorial-handler-message.html https://blog.csdn.net/lowprofile ...