我知道Azure缓存中存在最大内存限制,但是还有最大对象数吗?随着密钥数量的增加,缓存会变慢。
背景
我需要在每个用户的内存中保留一些数字(从db计算的成本很高但是在内存中便宜地增加内存)。随着并发用户的增长,我担心如果有限制,我可能会超出缓存。
我的解决方案:
假设我必须在每个用户的内存中保留Int64
“value1
”和“value2
”。
将项目缓存为userN_value1, userN_value2, [...]
并调用DataCache.Increment以更改每个计数器的值,如下所示:
DataCache.Increment("user1_value1", 2500, 0, "someregion");
随着用户数量的增长,这可能导致很多项目。这是我应该担心的吗?有没有更好的方法我没想过?
答案 0 :(得分:0)
据我所知,没有对象限制,你只受内存约束,如果你的缓存遇到内存压力,那么它将驱逐对象以释放它,数据删除过程是异步的并遵循最近最少使用的( LRU)政策
答案 1 :(得分:0)
实际上,限制是由为群集选择的VM的实例数和大小强加的。
Capacity Planning Guide spreadsheet非常有趣,我用它来比较我们共享缓存服务的当前用法,以便找到匹配的配置(然后比较成本)。
如果您将设置活动对象的最大数量和平均对象大小(序列化后)调整到您的方案,您可以注意到建议的配置如何上升。
似乎存在一个限制:如果您增加了要求,则可能会遇到“群集大小超过32不支持。请考虑拆分为多个群集”。我假设如果群集中需要超过32个节点,每个节点都作为ExtraLarge VM,则达到了限制。