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")标签选择器也是直 ...
随机推荐
- Meclipse alt+/ 没有提示
- 解锁scott账户方法
装完了数据库,忘了给scott账户解锁.这时可以在sql plus工具里,也可以在控制台通过命令行给scott账户解锁. 在第一种情况下,以system账户+自己安装时设置的密码,登录SQL Plus ...
- pandas基础用法——索引
# -*- coding: utf-8 -*- # Time : 2016/11/28 15:14 # Author : XiaoDeng # version : python3.5 # Softwa ...
- 【C#】详解C#异常
目录结构: contents structure [+] 异常处理机制 try块 catch块 finally块 自定义异常 CLS异常和非CLS异常 在这篇文章中,笔者会阐述C#中的异常.C#是一门 ...
- ubuntu 16 安装 openjdk 8
apt--jdk -y 进行验证即可
- logstash retrying failed action with response code: 429
https://blog.csdn.net/alan_liuyue/article/details/78926015 https://blog.csdn.net/ypc123ypc/article/d ...
- [k8s]一些技巧性的yaml和dockerfile-docker学习思路
我会把一些dockerfile和yaml的技巧性东西不定期搜集到这里 docker学习思路 三部曲: 1,vm会搭建服务 2,docker会跑服务 3,k8s集群会调度该服务 存储 vm1 vm2 共 ...
- 如何生成ExecutionGraph及物理执行图
http://chenyuzhao.me/2017/02/06/flink%E7%89%A9%E7%90%86%E8%AE%A1%E5%88%92%E7%94%9F%E6%88%90/ https:/ ...
- linux每日命令(33):diff命令
diff 命令是 linux上非常重要的工具,用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方.diff在命令行中打印每一个行的改动.最新版本的diff还支持二进制文件.diff程序的 ...
- 安装python后,启动时提示“0x00000000001”内存错误
直关资料: https://www.cnblogs.com/onewalee/p/7887747.html 问题情况:安装python后,在CMD命令中启动python就提示一个内存错误的对话框,重新 ...