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")标签选择器也是直 ...
随机推荐
- selenium+python自动化78-autoit参数化与批量上传
前言 前一篇autoit实现文件上传打包成.exe可执行文件后,每次只能传固定的那个图片,我们实际测试时候希望传不同的图片. 这样每次调用的时候,在命令行里面加一个文件路径的参数就行. 一.命令行参数 ...
- windows Server 2008 R2 TFS2010的备份
1.首先要安装一个工具Power Tools,点击安装,然后下一步就可以了. 2.安装完之后重新打开TFS管理控制台 点击Create Backup Plan 点击下一步,它会导航到第一个页面,在这个 ...
- 【Qt5】Windows下配置程序的产品、公司、版权、版本号等详细信息
在工程的pro文件中加入下面的配置 # 配置图标(仅Windows有效)# 本程序使用两个图标,这样其快捷方式可以有更多选择,也可以给关联文件提供图标选择RC_ICONS += icon1.ico \ ...
- StackExchange.Redis 管道 批量 高性能插入数据
现在用redis来做数据缓存的越来越多了,很多项目都有初始化redis数据的过程,由于初始化的数据比较大,那么该过程越快越好.这里我们以HashSet方法为例, 这里我们推荐用HashEntry[] ...
- Neo4j(一)
01-windows下载与安装neo4j https://blog.csdn.net/qq_21383435/article/details/78807024 neo4j的配置文件(图文详解) htt ...
- Swift学习笔记(十四)——字符,常量字符串与变量字符串
在学习Java过程中,字符串碰到过String和StringBuffer,当中前者是不可变的,不能对字符串进行改动:后者是可变的,能够不断改动. 来到Swift中,对字符串的定义变的更加简单. (1) ...
- Kafka的安装和设置
Kafka是一种分布式发布订阅消息系统. Kafka有三种模式: (1)单节点单Broker,在一台机器上运行一个Kafka实例: (2)单节点多Broker,在一台机器上运行多个Kafka实例: ( ...
- Zabbix agent 在windows上安装部署
Zabbix agent 在windows上安装部署 1.下载与解压 地址: http://www.zabbix.com/downloads/2.4.4/zabbix_agents_2.4.4.win ...
- openjudge noi 买房子
题目链接:http://noi.openjudge.cn/ch0105/16/ 总时间限制: 1000ms 内存限制: 65536kB 描述 某程序员开始工作,年薪N万,他希望在中关村公馆买一套60平 ...
- phpbbchina恢复上线
上个月已经把ICP备案重新办过了, 但是一直在忙着应付工作上的事. 从上周末开始经过数天的努力, 将 phpbbchina 恢复上线了. 时间一晃, 正好十年. 目前能找到的最新的数据是2008-10 ...