Redis设置性能问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis设置性能问题相关的知识,希望对你有一定的参考价值。

我正在尝试对我的redis SUNION命令进行基准测试。虽然基准测试其中一个集合包含~1000个元素,而其他集合包含~10个元素。

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

这个性能是理想的还是我错过了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}

这使我能够在这个上面暴露apis:在位置x红色的对象x在任何位置红色的对象

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

比例:任何一组内的最大元素数量都非常少~5000。延迟是考虑的重点。如果我有任何其他方式来实现这种表现。会有所帮助。

答案

我不知道性能是否理想(听起来不错,在我的书中不到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

这些结果(以及一些挖掘代码)表明:

  1. SUNION比获取集合的成员要慢(SMEMBERS使用与SINTER相同的实现)。
  2. 使用1000个元素进行迭代和回复至少需要17-19ms
  3. SUNION和其他产品之间的差异不是数量级,这很好,但可能需要在Redis代码中进行一些优化(至少对于这种边缘情况)。

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

redis性能指标

如何通过代码设置片段标签?

ELK性能优化实战总结:java私塾初级模拟银源代码

StackExchange.Redis性能调优

Redis学习----性能测试

Redis学习----性能测试