Redis 设置性能问题

Posted

技术标签:

【中文标题】Redis 设置性能问题【英文标题】:Redis Sets Performance Issue 【发布时间】:2018-09-08 18:48:44 【问题描述】:

我正在尝试对我的 redis SUNION 命令进行基准测试。 基准测试其中一组包含约 1000 个元素,而另一组包含约 10 个元素。

每次调用的执行顺序约为 0.52 毫秒。

这是理想的性能还是我错过了 conf 文件中的一些调整设置。

我正在尝试使用基本集合操作对对象实施标记过滤。 例如。 obj1 -> id - 1 colour red location x

obj1 -> id - 1 colour red location x obj2 -> id - 2 colour yellow location y obj3 -> id - 3 clolour red location y

为了存储,我使用集合来存储每个维度的对象 ID。因此

colour:red -> 1,3 colour:yellow -> 2 location:x -> 1 location:y -> 2,3

这使我能够在此之上公开 API,例如: 位置 x 中的红色物体 任何位置的红色物体

实际上,这些中的每一个都使用我使用管道实现的联合交集差异对我来说转化为多个集合操作。

规模: 任何集合中的最大元素数量都非常少~ 5000。延迟是考虑的要点。如果我应该采取任何其他方式来实现这种性能。会有帮助的。

【问题讨论】:

如果不知道SUNION 的目的是什么,就不可能说这种性能是否“理想”。请详细说明您使用 sunion 的原因,也许我们可以建议是否有另一种/更好的方法。 @UroshT。在描述中添加它你可以检查一下。 【参考方案1】:

我不知道性能是否理想(听起来不错,在我的书中不到 1 毫秒就很棒,但这确实取决于您的要求)。

我在笔记本电脑上进行了以下测试:

$ for i in `seq 0 999`; do redis-cli sadd s1000 forbar$i; done
...
$ for i in `seq 0 9`; do redis-cli sadd s10 foobar$i; done
...
$ redis-benchmark SUNION s1000 s10
...
100.00% <= 56 milliseconds
1171.37 requests per second
$ redis-benchmark SUNION s1000
...
100.00% <= 57 milliseconds
1062.70 requests per second
$ redis-benchmark SMEMBERS s1000
100.00% <= 19 milliseconds
3300.33 requests per second
$ redis-benchmark SINTER s1000
100.00% <= 17 milliseconds
3311.26 requests per second

...

127.0.0.1:6379> INFO
# Server
redis_version:999.999.999
redis_git_sha1:4e5e0d37
redis_git_dirty:1
redis_build_id:abfc1e37fd7acbf7
redis_mode:standalone
os:Darwin 17.7.0 x86_64
arch_bits:64
multiplexing_api:kqueue
atomicvar_api:atomic-builtin
gcc_version:4.2.1
process_id:23596
run_id:73b0f2f6795eccb8286fc086c83d89da45314ce2
tcp_port:6379
uptime_in_seconds:55429
uptime_in_days:0
hz:10
configured_hz:10
lru_clock:9775394

...

Hardware Overview:

  Model Name:   MacBook Pro
  Model Identifier: MacBookPro11,4
  Processor Name:   Intel Core i7
  Processor Speed:  2.2 GHz
  Number of Processors: 1
  Total Number of Cores:    4
  L2 Cache (per Core):  256 KB
  L3 Cache: 6 MB
  Memory:   16 GB
  Boot ROM Version: MBP114.0184.B00
  SMC Version (system): 2.29f24

这些结果(以及一些深入研究代码)表明:

    SUNION 比仅获取集合的成员要慢(SMEMBERS 使用与 SINTER 相同的实现)。 迭代和回复 1000 个元素至少需要 17-19 毫秒 SUNION 和其他的区别不在数量级上,这很好,但可能需要对 Redis 代码进行一些优化(至少对于这种边缘情况)。

【讨论】:

您有什么建议作为替代方案。如果我可以尝试别的东西。我在描述中添加了我想要实现的目标。 您是如何获得这些统计数据的:尝试运行基准测试:这些是我的统计数据 99.98% 用详细信息更新了我的答案。

以上是关于Redis 设置性能问题的主要内容,如果未能解决你的问题,请参考以下文章

Redis 常见性能问题和解决方案?

redis性能指标

Redis 常见性能问题和解决方案

记一次线上事故,redis 的keys问题,cpu引起的性能问题

Redis学习----性能测试

Redis学习----性能测试