首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tinzing
V2EX  ›  PHP

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

  •  2
     
  •   tinzing · 4 天前 · 4234 次点击

    寻求最佳解决办法,

    43 条回复    2020-08-03 12:11:55 +08:00
    Ministor
        1
    Ministor   4 天前
    lastid = first_num;
    map = jdbc.query(select * from table where id >${lastId} limit 1000);
    put2Redis(map)
    dilu
        2
    dilu   4 天前 via Android
    几十万数据不算多吧 就不能批量导入嘛?一次一万,估计三四分钟就导完了
    tinzing
        3
    tinzing   4 天前
    @Ministor 你这个是 java 的吧
    tinzing
        4
    tinzing   4 天前
    @dilu 现在是一次导入几千条都要一分钟
    Ministor
        5
    Ministor   4 天前
    @tinzing 你又没说用啥啊
    smallyu
        6
    smallyu   4 天前
    redis 的吞吐量不是每秒 10 万吗?
    tinzing
        7
    tinzing   4 天前
    @Ministor 就是 php+mysql+redis
    tinzing
        8
    tinzing   4 天前
    @smallyu 我也奇怪,我是数据库一次查几千条然后循环存入的,还用了 redis 事务,但就是很慢,
    huntcool001
        9
    huntcool001   4 天前   ❤️ 1
    开 100 个线程,每个线程读 2000 条数据. 这样来?

    0-2000 , 2001-4000 , ...
    sss495088732
        10
    sss495088732   4 天前
    0.0 我怎么记得 redis 是单线程的
    gantleman
        11
    gantleman   4 天前
    redis 虽然快但 mysql 慢呀
    @smallyu
    siys
        12
    siys   4 天前
    数据是什么结构呢
    tinzing
        13
    tinzing   4 天前
    @siys 就是 key value
    tinzing
        14
    tinzing   4 天前
    @gantleman 查几千条不慢啊 0.0 几秒就出来了
    HolmLoh
        15
    HolmLoh   4 天前 via iPhone
    多线程?一边读一边写?
    siys
        16
    siys   4 天前
    @tinzing redis 有个 mset 批量存啊
    siys
        17
    siys   4 天前
    你循环用 set 插入,搞不好有网络的原因
    DavidNineRoc
        18
    DavidNineRoc   4 天前
    贴你的代码, 你是每一条 lpush 还是 set.
    用 redis 管道
    Leigg
        19
    Leigg   4 天前 via Android
    可能是带宽上限了。
    watzds
        21
    watzds   4 天前 via Android
    Redis pipeline 批量写很快
    worldOnlyYou
        22
    worldOnlyYou   4 天前
    可以用 pipeline 的方式,能省不少时间
    594duck
        23
    594duck   4 天前 via iPhone
    redis 到 mysql 的预热受 IO 限制没办法太快的。

    当年新浪微博预热集群 redis 15 分钟呢
    594duck
        24
    594duck   4 天前 via iPhone
    @huntcool001 几十万数据,你先考虑一下他有多大。

    你这个回答还是没考虑到 IO
    winglight2016
        25
    winglight2016   4 天前
    这点数据量,全部放 hashmap 里也没啥问题。可以自己封装一个缓存服务,hashmap 作一级缓存,redis 作二级,用队列慢慢往 redis 搬,搬完了要不要清理一级缓存看你们自己的需求。
    tinzing
        26
    tinzing   4 天前
    tinzing
        27
    tinzing   4 天前
    @watzds 了解
    tinzing
        28
    tinzing   4 天前
    @siys 我也怀疑是不是网络原因 太慢了 本地很快的
    tinzing
        29
    tinzing   4 天前
    @winglight2016 我试试
    luozic
        30
    luozic   4 天前 via iPhone
    benchmark 一下,实际的系统环境和单个组件的性能指标没啥非常大的联系,你的内部网络,cpu 配置 等等都有可能导致性能不符合预期。
    sunny1688
        31
    sunny1688   4 天前
    大小写不统一,看着真难受!!!
    gitgabige
        32
    gitgabige   4 天前
    分布式大数据方案考虑一下么:具体使用 flinkx
    https://github.com/DTStack/flinkx/blob/1.8_release/docs/offline/reader/mysqlreader.md 多通道读取 mysql
    https://github.com/DTStack/flinkx/blob/1.8_release/docs/offline/writer/rediswriter.md 写入 redis
    开源工具,安装好之后,写下配置文件就可行
    baoshuai33
        33
    baoshuai33   4 天前 via iPhone
    @sss495088732 新闻早说 6 了,6 都出了好几个稳定版了
    tinzing
        34
    tinzing   4 天前
    @huntcool001 这样系统 会不会撑不住--
    tinzing
        35
    tinzing   4 天前
    @gitgabige 试一下
    dreamage
        37
    dreamage   4 天前
    运维,不忙时帮我导一下
    ifsclimbing
        38
    ifsclimbing   4 天前
    说业务,需求
    wakzz
        39
    wakzz   4 天前
    看一下 redis 的 aof 设置,appendfsync 配置的哪个参数。如果 appendfsync 设置的 always,那么就是每次写操作都写一次 aof 日志,对于楼主这种高频写操作,IO 耗时会很大。
    wangyzj
        40
    wangyzj   4 天前
    全读出来
    然后循环塞进去
    594duck
        41
    594duck   3 天前 via iPhone
    直接这么说 60 万的数据 select * 一次多久时间心里不就有数了
    ghostviper
        42
    ghostviper   2 天前
    @gitgabige 兄弟你这个是高射炮打蚊子 :)
    gitgabige
        43
    gitgabige   2 天前
    @ghostviper 哈哈哈,确实是这样
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1081 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 21:58 · PVG 05:58 · LAX 14:58 · JFK 17:58
    ♥ Do have faith in what you're doing.