我为redis创建了一个简单的基准代码,如下面的伪代码。
for 10~100 redis sessions:
for n time:
key = some_random_string(key_size) # about 100 byte
data = some_random_string(data_size) # about 100k~1m
session.command("SET %s %s", key, data)
session.command("GET %s", key)
session.command("DEL %s", key)
当基准程序启动时,redis-server进程的内存使用量会单调递增,直到达到物理内存绑定(8gb)并在会话结束时释放。由于密钥的并发数量仅限于会话计数,因此数据集的峰值大小不应该那么大。
这是故意的行为吗?还是我误用了它?
答案 0 :(得分:0)
假设最大值为1 MB,则每个连接最多3 MB:输入缓冲区(SET)为1,Redis中存储的值为1,输出缓冲区(GET)为1。输入和输出缓冲区连接到连接。您可以检查INFO命令返回的client_biggest_input_buf。
注意:Redis并非真正用于存储大型字符串对象。
也就是说,使用简短的C程序,Redis 2.5.11和270个连接,我无法重现您描述的行为。
您确定没有同时运行的MONITOR命令,导致Redis累积所有流量的SLOWLOG配置,或者网络链接无法处理流量的从属实例?