请教 Redis 中的数据存储查找问题, 这样合理吗 ? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
phpnote
V2EX    Redis

请教 Redis 中的数据存储查找问题, 这样合理吗 ?

  •  
  •   phpnote Apr 3, 2021 2495 views
    This topic created in 1850 days ago, the information mentioned may be changed or developed.
    没怎么用过 Redis, 现在遇到个问题需要用 Redis 解决, 描述如下:

    # 从接口会零零散散接到大量的数据, 以下是简化的数据例子

    row_1 = {name: zhangsan, age: 17}
    row_2 = {name: lisi, age: 18}
    row_3 = {name: wangwu, age: 19}
    ...

    Python 脚本专门对符合条件的数据进行处理, 处理结果存表

    原方案:
    数据 row_1, row_2 ... 接口收到后直接存表, 有个定时发起的 Python 脚本从表里批量查询出 age <= xx 的数据进行处理, 处理结果存表, 由于脚本是并发的, 所以 Python 脚本先通过 update xxx pid = xxx .... 锁住数据后, 再进行后续的步骤

    更换方案的原因: 数据量太大, 数据库读写太频繁, 跟不上

    # --------------------------------------------------------------------------

    准备上 Redis, 直接在内存中处理, 处理后的结果再放入队列中异步写入数据库

    预计的数据结构如下, key = task:{自增 ID}

    HSET task:{自增 ID} name zhangsan
    HSET task:{自增 ID} age 17

    HSET task:{自增 ID} name lisi
    HSET task:{自增 ID} age 18

    HSET task:{自增 ID} name wangwu
    HSET task:{自增 ID} age 19
    ...

    # --------------------------------------------------------------------------

    问题: 数据只存 Redis 的话, 有没有好的办法筛选出 age <= xx 的数据集 ?

    我现在的设想是, 用一个 set()来作为索引

    key 为 age 索引, values 为 hash 的 key 们, 如下:

    key_1 = task:index:age:17
    SADD key_1 "task:{自增 ID}", "task:{自增 ID}", ...

    key_2 = task:index:age:18
    SADD key_2 "task:{自增 ID}", "task:{自增 ID}", ...

    然后再通过 set()的 key 来遍历出 age <= 18 的数据

    key 为 task:index:age:17 的 set() 中的 values
    key 为 task:index:age:18 的 set() 中的 values
    ...

    然后再通过查找出的 values (其实就是 hash 的 key 们), 去 hash 中找对应的数据
    然后再处理, 处理结果放入队列, 异步入表

    兄弟们, 这样合理吗? 如果不合理的话, 有什么更好的方案吗?
    4 replies    2021-04-05 20:08:45 +08:00
    jifengg
        1
    jifengg  
       Apr 3, 2021 via Android   1
    有大于小于的需求,用 redis,一个是遍历(不推荐),一个是用 sortset ( zset ),value 存整个数据的 json,score 就是 age
    phpnote
        2
    phpnote  
    OP
       Apr 3, 2021
    @jifengg 嗯嗯, 这样数据操作起来还简单了, 就是不知道如果每小时进来大约一千万条数据性能怎么样
    xuanbg
        3
    xuanbg  
       Apr 3, 2021   1
    数据进缓存无论你什么数据类型都不会有什么性能问题。按 key 读取数据也没什么问题。问题是按条件查询,这个不是 redis 的菜。
    jifengg
        4
    jifengg  
       Apr 5, 2021 via Android
    @phpnote 如果要用可以在实际环境中测试看看
    About     Help     Advertise     Blog     API     FAQ     Solana     3289 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 44ms UTC 13:32 PVG 21:32 LAX 06:32 JFK 09:32
    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