时间:2021-05-02
1. 问题场景
我们在使用Redis的时候经常会将对象序列化存储到Redis中,在取出的时候进行反序列化,如果对象过大在进行序列化和反序列化的时候会有一定性能问题。今天查看了CSRedis源码发现在Set和Get的时候是支持Byte[]类型,那么问题来了如果我们将对象转换成Byte[]类型进行存储是否会比序列化和反序列化操作快了?
2. 问题验证
2.1. 编写一个简单实例进行验证
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 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转成对象公用方法。
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 /// <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存取序列化与反序列化性能内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://www.cnblogs.com/lujunasd/p/14212941.html
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
详解Python序列化Serialize和反序列化Deserialize序列化(serialization)序列化是将对象状态转换为可保持或传输的格式的过程。与
本文实例讲述了C#实现Xml序列化与反序列化的方法。分享给大家供大家参考。具体实现方法如下:复制代码代码如下://////Xml序列化与反序列化///publi
1.Java序列化与反序列化Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程。2.为什么需要序列化
Java—IO流对象的序列化和反序列化序列化的基本操作 1.对象序列化,就是将Object转换成byte序列,反之叫对象的反序列化。 2.序列化流(Obje
序列化与反序列化是.net程序设计中常见的应用,本文即以实例展示了.net实现序列化与反序列化的方法。具体如下:一般来说,.net中的序列化其实就是将一个对象的