当前位置:  开发笔记 > 编程语言 > 正文

如何使用Redis缓存缓存大对象

如何解决《如何使用Redis缓存缓存大对象》经验,为你挑选了1个好方法。

我们当前的缓存实现会在报表对象中缓存大量数据(在某些情况下为50 MB).

我们已经从内存缓存迁移到文件缓存,并使用ProtoBuf进行序列化和反序列化.这很好用,但我们现在正在试验Redis缓存.下面是Redis比使用文件系统需要多长时间的示例.(注意:在设置字节数组时,使用protobuf代替JsonConvert可将设置时间提高到15秒,并在下面的示例中将时间设置为4秒).

// Extremely SLOW – caching using Redis (JsonConvert to serialize/de-serialize)
IDatabase cache = Connection.GetDatabase();

// 23 seconds!
cache.StringSet("myKey", JsonConvert.SerializeObject(bigObject));

// 5 seconds!
BigObject redisResult = JsonConvert.DeserializeObject(cache.StringGet("myKey")); 




// FAST - caching using file system (protobuf to serialize/de-serialize)
IDataAccessCache fileCache = new DataAccessFileCache();

// .5 seconds
fileCache.SetCache("myKey",bigObject); 

// .5 seconds                                          
BigObject fileResult = fileCache.GetCache("myKey");                              

在此先感谢您的帮助.

PS.我没有找到类似问题的答案. 缓存大对象 - LocalCache性能

要么

缓存大对象,减少检索次数的影响



1> Vasyl Zvaryd..:

Redis实际上不是为存储大对象(许多MB)而设计的,因为它是一个单线程服务器.因此,一个请求将足够快,但一些请求将会很慢,因为它们都将由一个线程处理.在最后的版本中,进行了一些优化.

RAM和内存带宽的速度似乎对全局性能不太重要,特别是对于小型对象.对于大型对象(> 10 KB),它可能会变得明显.通常,购买昂贵的快速内存模块以优化Redis并不具有成本效益.https://redis.io/topics/benchmarks

因此,如果可能的话,您可以使用Jumbo帧或购买更快的内存.但实际上它无济于事.请考虑使用Memcached.它是多线程的,可以横向扩展以支持大量数据.Redis只能通过主从复制进行扩展.

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有