1. 问题场景

我们在使用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的内容

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

欢迎转载,转载请标明文章出处。

最新文章

  1. 从ord()中对Unicode编码的理解
  2. Pycharm用Ctrl+鼠标滚轮调节代码字体大小
  3. 26. linux查看端口占用情况
  4. Mybatis之Oracle增删查改示例--转
  5. 编写类String的构造函数、析构函数和赋值函数
  6. cocos2d-x lua 实现单例(管理类)
  7. NPOI之使用EXCEL模板创建报表
  8. php数据类型有哪些?
  9. zabbix agent(Active)模式 /克隆修改模板
  10. Python flask中的配置
  11. Hadoop系列003-Hadoop运行环境搭建
  12. Go-单元测试
  13. 学习 Docker 操作系统版本选择
  14. 移动端键盘遮挡input问题
  15. MySQL中any、some、all关键字
  16. JSON parse error: Cannot deserialize instance of `int` out of START_OBJECT token; nested exception is com.fasterxml.jackson.databind.exc
  17. 系列文章--jQuery教程
  18. OneNet平台初探成功
  19. ***codeigniter操作xml(Simplexml第三方扩展)
  20. 智能指针--C++

热门文章

  1. fist-冲刺第二天随笔
  2. Docker 跨平台在 netCore 中的从入门到部署
  3. error: src refspec master does not match any(个人经验)
  4. moviepy音视频剪辑:多个视频合成一个视频
  5. Python中splitlines方法判断文本中一行结束除了回车换行符是否还有其他字符?
  6. PyQt(Python+Qt)学习随笔:QStandardItemModel指定行和列创建模型中的项以及索引
  7. 团队作业三——需求改进&amp;系统设计
  8. Java集合源码分析(四)——Vector
  9. IIS-logfiles详解以及日志日期问题
  10. 配置nginx支持THINKPHP的PATH_INFO