使用memtier_benchmark;每个钥匙都被错过了

sou*_*rav 1 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= 
Run Code Online (Sandbox Code Playgroud)

Gar*_*aid 6

memtier_benchmark在这方面的记录非常少。如果您在第一次运行时开箱即用,它不会模拟任何缓存命中,这对于旨在测试缓存性能的工具来说毫无用处。

这里的 2 个关键参数是:

--key-pattern=[SET:GET]
--ratio=[SET:GET]
Run Code Online (Sandbox Code Playgroud)

--key-pattern定义为已设置的键指定的名称以及请求的键的名称。例如,如果您使用S:S,则意味着软件会将第一个键设置为memtier-0然后立即请求memtier-1,然后设置memtier-1,然后请求memtier-2(如图...)。这就是为什么你会得到 100% 失败的结果。

如果设置R:R,则意味着软件会在 Set 和 Get 中随机设置键名中的数字。这通常会导致失败率 > 90%,具体取决于您设置的客户端和线程数。如果您运行的缓存的未命中率> 90%,那么您是否应该运行缓存是值得怀疑的,因此,这也是毫无用处的。

为了模拟现实世界中的缓存应该执行的操作,您希望未命中率 < 50%。为了实现这一点,您需要扩大 Gets 的数量超过 Sets 的数量。的默认值memtier_benchmark1:10,但同样,在第一次运行时(或者如果您持续针对冷缓存运行此操作)--key-pattern=S:S,默认情况下,您仍然会获得非常高的未命中率。如果您不断针对不断填充的同一缓存重复测试,您应该会看到未命中率开始下降,但同样,如果您在短暂的环境中进行测试,这可能不是您可以依赖的东西。

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

--key-pattern=S:R --ratio=1:20
Run Code Online (Sandbox Code Playgroud)

这应该会导致漏失率 < 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
Run Code Online (Sandbox Code Playgroud)

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

--hide-histogram --key-pattern=S:S --key-minimum=1 --key-maximum=50 --ratio=0:1
Run Code Online (Sandbox Code Playgroud)

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