/**
* 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 体积,性能简单比较.的更多相关文章

  1. Redis缓存的设计、性能、应用与数据集群同步

    Redis缓存的设计.性能.应用与数据集群同步 http://youzhixueyuan.com/design-performance-and-application-of-redis-cache.h ...

  2. [评测]低配环境下,PostgresQL和Mysql读写性能简单对比(欢迎大家提出Mysql优化意见)

    [评测]低配环境下,PostgresQL和Mysql读写性能简单对比 原文链接:https://www.cnblogs.com/blog5277/p/10658426.html 原文作者:博客园--曲 ...

  3. 【原创】分布式之数据库和缓存双写一致性方案解析(三) 前端面试送命题(二)-callback,promise,generator,async-await JS的进阶技巧 前端面试送命题(一)-JS三座大山 Nodejs的运行原理-科普篇 优化设计提高sql类数据库的性能 简单理解token机制

    [原创]分布式之数据库和缓存双写一致性方案解析(三)   正文 博主本来觉得,<分布式之数据库和缓存双写一致性方案解析>,一文已经十分清晰.然而这一两天,有人在微信上私聊我,觉得应该要采用 ...

  4. Redis配置文件各项参数说明及性能调优

    Redis配置文件参数说明: 1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 daemonize no 2. 当Redis以守护进程方式运行时,Redis默 ...

  5. Redis源码解析:01简单动态字符串SDS

    Redis没有直接使用C字符串(以'\0'结尾的字符数组),而是构建了一种名为简单动态字符串( simple  dynamic  string, SDS)的抽象类型,并将SDS用作Redis的默认字符 ...

  6. python+uwsgi导致redis无法长链接引起性能下降问题记录

    今天在部署python代码到预生产环境时,web站老是出现redis链接未初始化,无法连接到服务的提示,比对了一下开发环境与测试环境代码,完全一致,然后就是查看各种日志,排查了半天也没有查明是什么原因 ...

  7. WCF 中 TCP 与 HTTP 性能简单比较

    在使用 WCF 时,为了更好地进行调试,我都选择了 HTTP 协议进行数据传输.最近项目对性能要求比较高,所以就换成了使用 TCP 协议.并对二者的性能进行了一个简单的测试.以下是测试结果: 环境: ...

  8. 关于redis的keys命令的性能问题

    KEYS pattern 查找所有符合给定模式 pattern 的 key . KEYS * 匹配数据库中所有 key . KEYS h?llo 匹配 hello , hallo 和 hxllo 等. ...

  9. 【jQuery基础学习】11 jQuery性能简单优化

    关于性能优化 合适的选择器 $("#id")会直接调用底层方法,所以这是最快的.如果这样不能直接找到,也可以用find方法继续查找 $("p")标签选择器也是直 ...

随机推荐

  1. selenium+python自动化78-autoit参数化与批量上传

    前言 前一篇autoit实现文件上传打包成.exe可执行文件后,每次只能传固定的那个图片,我们实际测试时候希望传不同的图片. 这样每次调用的时候,在命令行里面加一个文件路径的参数就行. 一.命令行参数 ...

  2. windows Server 2008 R2 TFS2010的备份

    1.首先要安装一个工具Power Tools,点击安装,然后下一步就可以了. 2.安装完之后重新打开TFS管理控制台 点击Create Backup Plan 点击下一步,它会导航到第一个页面,在这个 ...

  3. 【Qt5】Windows下配置程序的产品、公司、版权、版本号等详细信息

    在工程的pro文件中加入下面的配置 # 配置图标(仅Windows有效)# 本程序使用两个图标,这样其快捷方式可以有更多选择,也可以给关联文件提供图标选择RC_ICONS += icon1.ico \ ...

  4. StackExchange.Redis 管道 批量 高性能插入数据

    现在用redis来做数据缓存的越来越多了,很多项目都有初始化redis数据的过程,由于初始化的数据比较大,那么该过程越快越好.这里我们以HashSet方法为例, 这里我们推荐用HashEntry[] ...

  5. Neo4j(一)

    01-windows下载与安装neo4j https://blog.csdn.net/qq_21383435/article/details/78807024 neo4j的配置文件(图文详解) htt ...

  6. Swift学习笔记(十四)——字符,常量字符串与变量字符串

    在学习Java过程中,字符串碰到过String和StringBuffer,当中前者是不可变的,不能对字符串进行改动:后者是可变的,能够不断改动. 来到Swift中,对字符串的定义变的更加简单. (1) ...

  7. Kafka的安装和设置

    Kafka是一种分布式发布订阅消息系统. Kafka有三种模式: (1)单节点单Broker,在一台机器上运行一个Kafka实例: (2)单节点多Broker,在一台机器上运行多个Kafka实例: ( ...

  8. Zabbix agent 在windows上安装部署

    Zabbix agent 在windows上安装部署 1.下载与解压 地址: http://www.zabbix.com/downloads/2.4.4/zabbix_agents_2.4.4.win ...

  9. openjudge noi 买房子

    题目链接:http://noi.openjudge.cn/ch0105/16/ 总时间限制: 1000ms 内存限制: 65536kB 描述 某程序员开始工作,年薪N万,他希望在中关村公馆买一套60平 ...

  10. phpbbchina恢复上线

    上个月已经把ICP备案重新办过了, 但是一直在忙着应付工作上的事. 从上周末开始经过数天的努力, 将 phpbbchina 恢复上线了. 时间一晃, 正好十年. 目前能找到的最新的数据是2008-10 ...