怎么高效地把几十万 mysql 数据一次性存入 redis?

2020-08-01 10:26:33 +08:00
 tinzing

寻求最佳解决办法,

7319 次点击
所在节点    PHP
43 条回复
Ministor
2020-08-01 11:08:47 +08:00
lastid = first_num;
map = jdbc.query(select * from table where id >${lastId} limit 1000);
put2Redis(map)
dilu
2020-08-01 11:09:27 +08:00
几十万数据不算多吧 就不能批量导入嘛?一次一万,估计三四分钟就导完了
tinzing
2020-08-01 11:13:39 +08:00
@Ministor 你这个是 java 的吧
tinzing
2020-08-01 11:15:57 +08:00
@dilu 现在是一次导入几千条都要一分钟
Ministor
2020-08-01 11:19:41 +08:00
@tinzing 你又没说用啥啊
smallyu
2020-08-01 11:21:13 +08:00
redis 的吞吐量不是每秒 10 万吗?
tinzing
2020-08-01 11:22:42 +08:00
@Ministor 就是 php+mysql+redis
tinzing
2020-08-01 11:24:05 +08:00
@smallyu 我也奇怪,我是数据库一次查几千条然后循环存入的,还用了 redis 事务,但就是很慢,
huntcool001
2020-08-01 11:25:21 +08:00
开 100 个线程,每个线程读 2000 条数据. 这样来?

0-2000 , 2001-4000 , ...
sss495088732
2020-08-01 11:35:08 +08:00
0.0 我怎么记得 redis 是单线程的
gantleman
2020-08-01 11:39:28 +08:00
redis 虽然快但 mysql 慢呀
@smallyu
siys
2020-08-01 11:42:37 +08:00
数据是什么结构呢
tinzing
2020-08-01 11:45:26 +08:00
@siys 就是 key value
tinzing
2020-08-01 11:46:45 +08:00
@gantleman 查几千条不慢啊 0.0 几秒就出来了
HolmLoh
2020-08-01 11:49:59 +08:00
多线程?一边读一边写?
siys
2020-08-01 11:58:13 +08:00
@tinzing redis 有个 mset 批量存啊
siys
2020-08-01 11:59:27 +08:00
你循环用 set 插入,搞不好有网络的原因
DavidNineRoc
2020-08-01 12:02:54 +08:00
贴你的代码, 你是每一条 lpush 还是 set.
用 redis 管道
Leigg
2020-08-01 12:24:00 +08:00
可能是带宽上限了。
coderwen
2020-08-01 12:25:33 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/694784

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX