zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

Redis存取序列化与反序列化性能问题详解

Redis性能 问题 详解 序列化 存取
2023-06-13 09:19:49 时间

我们在使用Redis的时候经常会将对象序列化存储到Redis中,在取出的时候进行反序列化,如果对象过大在进行序列化和反序列化的时候会有一定性能问题。今天查看了CSRedis源码发现在Set和Get的时候是支持Byte[]类型,那么问题来了如果我们将对象转换成Byte[]类型进行存储是否会比序列化和反序列化操作快了?

2. 问题验证
2.1. 编写一个简单实例进行验证

 List User list = new List User 

 for (int i = 0; i 1000; i++)

 User user = new User() { Id = i, Name = "张三", Age = 11 };

 list.Add(user);

 Stopwatch stopwatch = new Stopwatch();

 stopwatch.Start(); // 开始监视代码运行时间

 //使用序列化

 rds.HSet("test2", "test2", list);

 var list1 = rds.HGet List User ("test2", "test2");

 //使用byte方式

 //rds.HSet("test", "test1", ObjectToBytes(list));

 //var list2 = BytesToObject(rds.HGet byte[] ("test", "test1"));

 stopwatch.Stop(); // 停止监视

 TimeSpan timespan = stopwatch.Elapsed; // 获取当前实例测量得出的总时间

 double hours = timespan.TotalHours; // 总小时

 double minutes = timespan.TotalMinutes; // 总分钟

 double seconds = timespan.TotalSeconds; // 总秒数

 double milliseconds = timespan.TotalMilliseconds;

 Console.WriteLine(+hours + " " + minutes + " " + seconds + " " + milliseconds);

 Console.ReadKey();

对象转换成Byte,和Byte转成对象公用方法。


 /// summary 

 /// 将一个object对象序列化,返回一个byte[] 

 /// /summary 

 /// param name="obj" 能序列化的对象 /param 

 /// returns /returns 

 public static byte[] ObjectToBytes(object obj)

 byte[] buff;

 using (MemoryStream ms = new MemoryStream())

 IFormatter iFormatter = new BinaryFormatter();

 iFormatter.Serialize(ms, obj);

 buff = ms.GetBuffer();

 return buff;

 /// summary 

 /// 将一个序列化后的byte[]数组还原 

 /// /summary 

 /// param name="Bytes" /param 

 /// returns /returns 

 public static object BytesToObject(byte[] Bytes)

 using (MemoryStream ms = new MemoryStream(Bytes))

 IFormatter formatter = new BinaryFormatter(); return formatter.Deserialize(ms);

 }

注意点:两种方式要分开执行!!!

2.2 响应结果

序列化操作响应时间:

Byte操作响应时间:

我们可以明显看到Byte速度要快于序列化操作,并且Redis获取值没有问题

我们借助Redis客户端工具来看看Redis里面存储的内容:

首先是序列化的内容

然后是Byte的内容

这只是一个简单的测试,后续我还会结合项目实际情况进行测试。如果有写的不对地方欢迎各位指出问题。

到此这篇关于Redis存取序列化与反序列化性能问题的文章就介绍到这了,更多相关Redis存取序列化与反序列化性能内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!


我想要获取技术服务或软件
服务范围:MySQL、ORACLE、SQLSERVER、MongoDB、PostgreSQL 、程序问题
服务方式:远程服务、电话支持、现场服务,沟通指定方式服务
技术标签:数据恢复、安装配置、数据迁移、集群容灾、异常处理、其它问题

本站部分文章参考或来源于网络,如有侵权请联系站长。
数据库远程运维 Redis存取序列化与反序列化性能问题详解