我的未命中数/秒已填充,但没有命中数。
数据包含的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/