redis geo 性能分析及对问题的思考
文章目录
(题外话,自己搭建博客没人看,以后还是在 csdn 和自己搭建的博客都发吧,屈服+++++)
对 redis 进行压力测试
将数据存入 redis 后(共 85318 条有效数据),通过压测工具redis-benchmark
对 redis 进行压测。
redis-benchmark -h 127.0.0.1 -p 6379 -c 50 -n 1000 -q georadius outlet 112 -7 200 km withdist
并发数为 50,每个并发发送 1000 个请求,结果如下:
**注:**本文所用电脑为 MacBook Pro (16-inch, 2019),cpu 为:Intel® Core™ i7-9750H CPU @ 2.60GHz,内存为 16 g。
对 redis 进行满载压力分析
使用 Instruments 对 redis 进行满负荷时分析,压力测试命令如下:
redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 50000 -q georadius outlet 112 -7 200 km withdist
说几点建议:
- 多开几个压测的线程,多个线程并发执行,尽可能的去打满 redis,以遍更直观的看到 redis 的性能瓶颈。
- 有条件的可以使用两个本地机器去模拟(必须为局域网,
当然两根网线连着更好,非局域网可能会有网速对 redis 性能的影响),使用同一台电脑开启 redis 服务和进行压测时,压测开很多线程,一直发数据也是很消耗 cpu 资源的(这个东西属于 unstable,看内核调度,是不可控的)。所以为了控制变量,让 redis 能更好的发挥效率,推荐使用两个机器。
满负荷执行两分钟的结果如下(性能分析的 trace 文件,需要的自提):
注:强烈推荐使用 Linux 系统的 perf 对 redis 进行性能分析,虽然 mac 分析的很全面,但是生成不了火焰图导致结果很不直观,需要手动一条一条找数据。好在数据量不大,因此逐个分析吧(这是网上仅有的 mac 生成火焰图的方式链接,但是我没有测试成功)。
georadiusGeneric
可以看出 97.9% 的时间都花费在了这个函数上,这个函数其实就是