我正在 Perl 中开发一些使用线程(最多 10 个)的脚本;每个线程读取一个文件,处理每一行并将每行结果保存在 Redis 的列表或哈希表中。一切都工作正常,直到线程超过 15 个,一些线程死亡,另一些线程执行它们必须执行的操作。这是我收到的错误:
Thread 2 terminated abnormally: Error while reading from Redis server: Resource temporarily unavailable at /Library/Perl/5.10.0/Redis.pm line 518 thread 2
正如消息所说,Redis 服务器位于顶部。错误从这里开始(没有什么异常):
$self->{_redis}->rpush($key, $data);
我正在使用 Redis 2.4.14 和 Pedro Melo 的 Redis for Perl 包。
您认为这是处理该数据结构的好方法吗?我的意思是,将 Redis 与线程一起使用?还有别的好办法吗?或者我应该怎么做才能解决这个问题?提前致谢!
感谢 Didier Spezia 提供的解决方案。
就我而言,它有助于增加参数
socket_timeout
和
connect_timeout
。
sw::redis::ConnectionOptions opt;
opt.host = host;
opt.port = port;
opt.socket_timeout = REDIS_SOCKET_TIMEOUT;
opt.connect_timeout = REDIS_CONNECTION_TIMEOUT;
https://github.com/sewenew/redis-plus-plus/issues/604
Redis 客户端库的 Perl 版本还允许控制超时。