我的未命中/秒已填充且没有命中。
数据包含的密钥范围为1到300 K,存储的数据是字符串类型
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=
答案 0 :(得分:0)
您的比率为0 set add 1 get
。将其更改为1:1
或类似的内容
答案 1 :(得分:0)
在尝试只读基准测试之前,您需要填充内存缓存。
要填充它,您可以运行只写工作负载以至少写入一次所有键。
答案 2 :(得分:0)
memtier_benchmark的文档非常少。如果您在首次运行时立即使用它,它将不会模拟任何缓存命中,对于设计用于测试缓存性能的工具而言,这是毫无用处的。
这里的2个关键参数是:
--key-pattern=[SET:GET]
--ratio=[SET:GET]
--key-pattern
定义分配给设置的键的名称和请求的键的名称。例如,如果您使用S:S
,则意味着软件将第一个密钥设置为memtier-0
,然后立即请求memtier-1
,然后设置memtier-1
,然后请求{{ 1}}(算吧...)。这就是为什么您会获得100%的错过结果的原因。
如果设置memtier-2
,则表示软件将在Set和Get中随机设置密钥名中的数字。根据设置的客户端和线程数,这通常会导致未命中率> 90%。如果您以90%的未命中率运行高速缓存,则是否应该完全运行高速缓存存在疑问,因此,这再次毫无用处。
要模拟现实世界中的缓存应执行的操作,您要使未命中率小于50%。为此,您需要扩展Gets over Sets的数量。 memtier_benchmark的默认值为R:R
,但再次使用1:10
作为默认值的第一次运行(或者如果您针对冷缓存持续运行),您仍然会获得很高的错过率。如果您继续对不断填充的同一缓存重复进行测试,则应该会看到未命中率下降,但是同样,如果您在临时环境中进行测试,则可能无法依靠。
为了在第一次运行时获得较低的未命中率,我使用:
--key-pattern=S:S
这将导致未命中率<50%。这和我能够模拟的一样好。我的实际缓存的未命中率小于5%。我仍在尝试找出一种使用memtier_benchmark进行测试的方法。
此外,使用--key-pattern=S:R --ratio=1:20
摆脱烦人的测试结果转储。
编辑:
要获得完全100%的命中率/ 0%的未命中率,请执行以下操作:
从冷的,空的缓存开始
运行使用--hide-histogram
参数的测试,以使测试中仅包含-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
值来调整命中率/未命中率