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存取序列化与反序列化性能问题详解
相关文章
- Solr与Redis:拥抱极致性能(solr与redis)
- 轻松解决Redis缓存清除问题——Redis清缓存教程(redis清缓存)
- 如何配置 Redis 集群?25字概括配置 Redis 集群的方法(redis集群配置)
- 优化Redis写入性能的策略(redis写入性能)
- Redis官方集群,打造高可用高并发数据存储方案。(redis官方集群)
- 利用Redis改进项目中的性能(redis项目中的实例)
- 如何利用Redis管理待办服务(待办服务怎么用redis)
- 现代大脑构建广域网上的Redis系统(广域网redis)
- 让Redis让你重新定义精彩(带你重新认识redis)
- 订单有效期管理借助Redis实现简便控制(订单有效期redis)
- Redis的表加载实例解析(表放入redis)
- Redis缓存更新实现更快速性能(缓存 redis 更新)
- 深入解析线程之中的Redis连接(线程里连接redis)
- Redis集群提升性能的有效措施(为什么使用redis集群)
- VSCode调试Redis,越调越顺手(vscode中redis)
- UVloop与Redis的协同发挥极速的网络性能突破(uvloop redis)
- 解决华为云Redis连接超时问题(华为云redis连接超时)
- 使用Redis加速系统性能(加redis)
- 如何运用Redis提升网站性能(如何运用redis作缓存)
- 修改Redis中的数据一步一步走(修改redis里面的数据)
- 利用原生Redis提高同步效率(原生redis加同步锁)
- Redis能否有效缓解缓存压力(redis需要缓存吗)
- Redis掌握它离你近了一步(redis需要熟练掌握吗)
- 深入探索Redis集群的性能表现(redis集群性能查看)
- 提升系统性能,利用Redis过滤器缓存(redis过滤器缓存)
- 解决Redis跨网段连接困难(redis跨网段问题)
- 调高系统性能降低Redis访问延时(redis访问延时)
- 慢如牽牛在Redis网络上的痛苦(redis 网络很慢)
- 深陷缓慢Redis连接性能低下(redis连接缓慢)