redis geo 性能分析及对问题的思考

通过对redis进行压力测试和满载分析,发现georadiusGeneric函数占用大部分时间,主要在计算距离、内存管理和库函数调用。优化建议包括采用低精度算法、定制化函数、缓存地理哈希方格和利用多核。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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% 的时间都花费在了这个函数上,这个函数其实就是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值