Hiredis 在多线程中使用的坑,请教各位

开源之夏第三届火热来袭,高校学生参与赢万元奖金!>>>

我前面提到过一次关于hiredis多线程中报core错误的问题,后来看了很多关于它的介绍说必须要每个线程中创建一个hiredis句柄来使用就会解决问题,我照做了,后来也似乎解决了问题,但是在运行一段时间后我发现问题并没有解决,依然报core崩溃,有没有哪位入过此坑的,麻烦指点一下迷津,hiredis在多线程模式下究竟要怎么应用?

补充一下代码截图,报异常的是在 位置1的地方,sigsegv 应该是内存越界了,而引起这个问题的,应该是在2这个位置,不知道有没有出同样错误的。

回答

这么多人看都没一个回复的,是没人用过这东西?

hiredis客户端不是线程安全的, 一致再多线程下使用每个线程独立一个handle没问题, 每次操作检查连接是否OK

是的,我现在就改到每个线程独立handle的,但是仍然偶发性的报core问题,我用gdb跟踪后看报的位置基本都是在对sds里面realloc的时候

没用过,换了吧

换哪套,我的应用是纯linux c的

我现在也遇到这个问题,请问楼主当初怎么解决的

一种思想,两种方法, 一种是每个线程管理一个专属redis连接,另一种将redis连接池化管理,各线程使用时先从池中取出空闲连接。

我觉得除了上述两种方法外,还可以考虑在每个线程中使用rediscommand的地方加锁处理.@冰点123 ,我很好奇每个线程中独立一个handle仍然报core的问题原因是什么,按道理rediscommand执行完并返回reply后,申请的动态内存都应该会释放呀