首页
学习
活动
专区
圈层
工具
发布

redis-1:一次关于smember和smembers的使用优化

通过prometheus等监控发现是redis调用大增,看代码在循环里对smember有大量调用。...业务JVM线程上下文和软中断同时飙升原因: smember的时间复杂度是O(1),很快,jvm大量调用smember后,相关IO也会很快得到返回数据从而进入就绪状态,那么从就绪IO读取数据的线程会始终处于繁忙状态...然后将cpu使用率最高的线程id转换为16进制,在jstack pid的结果里去查看这个线程的堆栈: 可以很清晰的看到smember的调用,这次优化上线只有这一处改动,其实这个时候已经可以确认问题了。...再用thread -n 10查找cpu耗损前10的线程堆栈,这个我没有保存现场图,看到的和之前方法一是一样的堆栈,也是smember的堆栈。...(4).总结 1.循环里不要调用redis 但是像smember这类exist一定是封装在底层的,上层一层层调用很有可能放大,这个只能是在使用的时候注意,同时观察线上的zabbix监控,主要是cpu是否有异动

6.6K41
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到
    领券