HarryZhu-7harryprince 答案是
需要在 mclapply的循环体内执行 数据库的连接 和 断开。
比如:
l <- parallel::mclapply(X = your_data, mc.cores = 80L,
function(x ){
conn <- nodbi::src_redis()
rds <- conn$con
on.exit(conn$con$QUIT())
print(rds$GET(x))
}
原理:
redis 在数据库层面 通过一个连接来保证通信的先来后到顺序,如果要保证多线程的通信是有序的,那么需要在每个数据分区内分别使用 连接池。这个原理和编程语言、数据库类型无关,属于通信原理。