redis - 使用 memtier_benchmark;错过了每一个关键

标签 redis

我的未命中数/秒已填充,但没有命中数。

数据包含的key范围为1到300K,存储的数据为字符串类型

memtier_benchmark -s xx.xxx.xxx.xxx -p xxxxx -P redis -t 1 -n 1 --ratio 0:1 -c 1 -x 2 --key-pattern S:S --authenticate=xxxxxxx --key-prefix= 

最佳答案

memtier_benchmark 在这方面的记录很差。如果您在首次运行时开箱即用,它不会模拟任何缓存命中,这对于旨在测试缓存性能的工具而言是非常无用的。

这里的 2 个关键参数是:

--key-pattern=[SET:GET]
--ratio=[SET:GET]

--key-pattern 定义为设置的键指定的名称和请求的键的名称。例如,如果您使用S:S,则意味着软件会将第一个 key 设置为memtier-0,然后立即请求memtier-1,然后设置memtier-1,然后请求memtier-2(看图...)。这就是您得到 100% 未命中结果的原因。

如果您设置R:R,这意味着软件将在Set 和Get 中随机设置keyname 中的数字。这通常会导致大于 90% 的未命中率,具体取决于您设置的客户端和线程数。如果您运行的缓存未命中率 > 90%,那么您是否应该运行缓存是值得怀疑的,所以再说一遍,这是非常无用的。

要模拟真实世界的缓存应该做什么,您希望未命中率 < 50%。为此,您需要扩大 Gets over Sets 的数量。 memtier_benchmark 的默认值是 1:10,但同样,在第一次运行时(或者如果你一直在冷缓存中运行它)使用 --key-pattern=S:S 默认情况下,您仍然会获得非常高的未命中率。如果您不断对不断填充的同一个缓存重复测试,您应该会看到您的未命中率正在下降,但同样,如果您在短暂的环境中进行测试,这可能不是您可以依赖的东西。

为了在第一次运行时获得较低的未命中率,我使用:

--key-pattern=S:R --ratio=1:20

这应该会导致失误率 < 50%。这和我能够模拟的一样好。我的实际缓存的未命中率 < 5%。我仍在尝试找出一种方法来使用 memtier_benchmark 对其进行测试。

此外,使用 --hide-histogram 摆脱烦人的测试结果转储。

编辑:

要获得完整的 100% 命中率/0% 未命中率,请执行以下操作:

从冷的、空的缓存开始

运行一个使用 -ratio= 参数的测试,这样只有 Sets 包含在测试中,在一个非常窄的键范围内:

--hide-histogram --key-pattern=S:S --key-minimum=1 --key-maximum=50 --ratio=1:0

现在,再次运行测试,这一次,翻转比率,以便只包含 Gets:

--hide-histogram --key-pattern=S:S --key-minimum=1 --key-maximum=50 --ratio=0:1

然后您可以通过重新运行这两个部分并扩展 --key-maximum= 值来调整命中率/未命中率

关于redis - 使用 memtier_benchmark;错过了每一个关键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35219535/

相关文章:

redis - 有没有办法列出所有 redis 的键及其数据类型?

heroku - 如何从 DelayedJob 迁移到 Sidekiq

redis - 如何从RedisGraph删除/删除重复节点

redis - Mosquitto ACL,Redis 后端不适用于有空间的主题

戈朗 : Selecting DB on a RedisPool in Redigo

redis - SignalR 无法连接到 SSL 上的 Azure Redis

Redis 自愈集群或云、Kubernetes 或 Swarm 中的替代方案?

redis - 将 ServiceStack.Redis 与 RedisCloud 结合使用

symfony - Snc Redis bundle 在 config.yml 中设置密码

node.js - 如何保护 Redis 和 Socket.IO 实时服务器,以便只有经过身份验证的用户才能收听?