是正常的吗?例如,StackExchange.Redis.PhysicalConnection是否在包含大小(字节)上运行高?或者这真的很高?
基本上,在将我们的代码转换为在Session上运行Azure Redis之后,我们的网络头脑经历了缓慢(我们现在正在根据需要进行序列化和反序列化并存储在Redis缓存中)但整体性能非常糟糕。
请求已完成但可能需要一段时间,是否由于Redis的单线程特性?我们使用Azure Redis团队最佳做法概述的配置,如https://stackoverflow.com/a/28821220
所述我们还有什么可以帮助提高性能,因为当前的性能不可接受,因为它们是我们目前基于会话的实现(asp.net webforms / sql server / azure IaaS)的可行替代品。
PS - 序列化和反序列化确实引起了轰动,我们理解IIS使用自己的特殊内存池来破坏我们的非序列化数据集等等,但它没有办法导致页面增加300-500%像现在这样的载荷现在适合我们。
赞赏的想法!
@Tim Wieman
您的缓存对象有多大? 它们的大小可以在范围内,有些数据集存储在redis中。
他们是什么类型的对象? 大多数对象都是具有可变数量属性的自定义对象,有些甚至包含集合。
您使用的是什么序列化程序? 我们将Newtonsoft用于任何不需要Rowstate的东西,以及需要rowstate的数据集所需的二进制序列化器。
所有序列化和后续反序列化都是在调用redis数据库StringGet或StringSet之前在代码中完成的。
答案 0 :(得分:1)
如果出现内存实际上非常高,我们错误地创建了数千个与Redis的连接,而不是Redis Cache的单个实例。
在CPU达到98%并且服务器没有响应之前,GC没有清理多个连接。
我们调整了代码,以确保Azure Redis连接的单个实例用于所有Redis调用,并且已经过彻底测试。
似乎已解决,因为Azure Redis不再占用内存或CPU资源。