Redis 批量读取 Hash 数据 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
suxxx
V2EX    Redis

Redis 批量读取 Hash 数据

  •  
  •   suxxx 2022 年 4 月 24 日 3933 次点击
    这是一个创建于 1439 天前的主题,其中的信息可能已经有所发展或是发生改变。

    java 项目里面,数据以 hash 结构保存在 redis 里面,怎么通过 key 批量获取 hash 数据,同时保证原子性? pipeline 好像不保证原子性。

    7 条回复    2022-04-27 17:09:48 +08:00
    crysislinux
        1
    crysislinux  
       2022 年 4 月 24 日 via Android
    要保证原子性就写 lua 。
    CEBBCAT
        2
    CEBBCAT  
       2022 年 4 月 25 日
    先定义一下名词,HSET key field value ;

    你说的批量获取是以原子性为前提对吗?也就是需要执行若干个 HGETALL/HMGET 同时要求在读取期间整个 Redis 示例不能有写入对吗?

    这种情况可以用 MULTI https://redisbook.readthedocs.io/en/latest/feature/transaction.html
    LeeReamond
        3
    LeeReamond  
       2022 年 4 月 25 日
    multi 不保证事务性,不保证能回滚,也不保证命令执行成功,但可以保证执行期间不会被其他任务打断,读取是 ok 的。
    lizuoqiang
        4
    lizuoqiang  
       2022 年 4 月 25 日
    set test 1
    >OK
    watch test
    >OK
    incr test
    >2
    multi
    >OK
    get test
    >QUEUED
    exec
    >NIL
    Red998
        5
    Red998  
       2022 年 4 月 25 日
    首先你说的批量获取数据、100 以下直接 Mget ,获取的数据大可以管道获取、节省网络传输。至于你说的原子性我觉得可以忽略。lua 脚本也可以、但是需要控制命令的大小。管道和 lua 脚本我觉得 管道实践比较好
    suxxx
        6
    suxxx  
    OP
       2022 年 4 月 27 日
    @redorblacck886 为什么可以忽略原子性?现在数据量大概有几百万 key 。
    suxxx
        7
    suxxx  
    OP
       2022 年 4 月 27 日
    最近查了一下,有推荐 dump 后再反序列化。本地试了用 lua 直接批量读取,发现更慢了。lua 脚本是
    "local res={}; for i,v in pairs(KEYS) do res[i]=redis.call('hgetall',v) end; return res"。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2687 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 11:19 PVG 19:19 LAX 04:19 JFK 07:19
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86