我的每秒未命中次数已满,但没有命中。
数据包含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)
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_benchmark
是1: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=
值来调整命中/未命中率。