Redis设置性能问题

时间:2018-09-08 18:48:45

标签: performance redis architecture query-performance

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

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

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

我正在尝试使用基本的set操作在对象上实现标签过滤。 对于前。 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之上公开api: 位置x上红色的对象 任何位置都呈红色的物体

使用我已经使用流水线实现的联合交集diff,其中的每一个实际上为我转换为多组操作。

规模: 任何集合中元素的最大数量都非常少,约为5000。而延迟是要考虑的重点。如果我还有其他方法可以实现这种性能。会有所帮助。

1 个答案:

答案 0 :(得分:0)

我不知道性能是否理想(声音很棒,在我的书中小于1ms很好,但这实际上取决于您的要求)。

我已经在笔记本电脑上执行了以下测试:

$ 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-19毫秒
  3. SUNION与其他产品之间的差异不是数量级的,这很好,但是可能需要对Redis代码进行一些优化(至少对于这种情况很重要)。