场景:记录一个用户上次浏览图书的第几章第几节第几题,用 redis 还是 mysql 呢? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yuyang1992test
V2EX    数据库

场景:记录一个用户上次浏览图书的第几章第几节第几题,用 redis 还是 mysql 呢?

  •  
  •   yuyang1992test 2023-10-16 17:34:23 +08:00 2060 次点击
    这是一个创建于 794 天前的主题,其中的信息可能已经有所发展或是发生改变。

    个人感觉不是一个重要的数据,比较倾向于用 redis,如果用 mysql 的话估计得分表了吧? 表数量=userCount * bookcount redis 的 key userID:{uid}:bookId:{bookID} val: '1-2-5', 表示第 1 章第 2 节第 3 题。 存的都是他们的 id

    24 条回复    2023-10-17 12:14:42 +08:00
    xmai
        1
    xmai  
       2023-10-16 18:05:39 +08:00   1
    如果你需要读取性能和高并发,用 redis 。每个用户使用一个唯一的键名,如 user:{user_id}:book:{book_id}来记录其浏览位置,包括章、节和题号并将用户的浏览位置以字符串形式 ‘1-2-5’ 保存到 Redis 中。

    如果你需要更加复杂的查询操作或者有较大的数据量,用 mysql 一把梭。
    libook
        2
    libook  
       2023-10-16 18:09:34 +08:00
    高频读取用 Redis ,低频读取存数据库,不需要跨端就记录到客户端/浏览器本地,部分场景还可以记录到 URL 里。
    HFcbyqP0iVO5KM05
        3
    HFcbyqP0iVO5KM05  
       2023-10-16 18:26:08 +08:00 via iPhone
    KISS
    yuyang1992test
        4
    yuyang1992test  
    OP
       2023-10-16 19:00:00 +08:00
    @gulu kiss 是什么
    yuyang1992test
        5
    yuyang1992test  
    OP
       2023-10-16 19:00:41 +08:00
    @libook 这个数据丢失是不是可以接受的是关键
    KagurazakaNyaa
        6
    KagurazakaNyaa  
       2023-10-16 19:57:38 +08:00
    这种没有固定的格式的,随意性比较大的数据,可以考虑用 nosql 比如说 mongodb 、es 之类的东西存,这些是有持久化的
    itechify
        7
    itechify  
    PRO
       2023-10-16 20:01:04 +08:00 via Android
    redis 一把梭,一般这种用户行为也会接上埋点,丢失数据能找回来,不慌
    yuyang1992test
        8
    yuyang1992test  
    OP
       2023-10-16 20:08:28 +08:00
    @XiLingHost 现在依赖的就只有 mysql 和 redis,不太可能为了这个需求引入一个中间件
    yuyang1992test
        9
    yuyang1992test  
    OP
       2023-10-16 20:09:05 +08:00
    @oneisall8955 那还设置过期时间吗
    bigbigeggs
        10
    bigbigeggs  
       2023-10-16 20:13:51 +08:00
    这种存图书的,后端怎么设计的。比如第一页的内容如何返回前端的,毕竟前端可能是小屏幕也可能是大屏幕,甚至可以伸缩等等,怎么分割呢
    yuyang1992test
        11
    yuyang1992test  
    OP
       2023-10-16 20:15:03 +08:00
    @bigbigeggs 我这边只存章节和题目,类似于教材答案
    yuyang1992test
        12
    yuyang1992test  
    OP
       2023-10-16 20:19:11 +08:00
    @bigbigeggs 小说的话一页一页的村吧,至于显示问题就是前端做适配了
    aLazarus
        13
    aLazarus  
       2023-10-17 09:59:37 +08:00
    我记得 b 站的 url 可以分享进度,多平台之间也可以同步进度,可能是 url+redis 的方式实现的?
    dongtingyue
        14
    dongtingyue  
       2023-10-17 09:59:56 +08:00
    前端存储加 mysql 。redis 没必要吧。
    LouGaZen
        15
    LouGaZen  
       2023-10-17 10:33:22 +08:00
    @yuyang1992test #4 Keep It Simple and Stupid ,取各单词的首字母
    picone
        16
    picone  
       2023-10-17 10:46:30 +08:00
    用户本地存储。。
    yuyang1992test
        17
    yuyang1992test  
    OP
       2023-10-17 11:03:18 +08:00
    @picone 存到 app 吗?那 app 卸载重装是不是就没了?
    yuyang1992test
        18
    yuyang1992test  
    OP
       2023-10-17 11:06:51 +08:00
    @libook 那存到 app 的话,岂不是一卸载就没了吗
    yuyang1992test
        19
    yuyang1992test  
    OP
       2023-10-17 11:07:13 +08:00
    @xmai 没有复杂查询,也没有高并发
    yuyang1992test
        20
    yuyang1992test  
    OP
       2023-10-17 11:08:01 +08:00
    @picone 那卸载了不就没了嘛
    yuyang1992test
        21
    yuyang1992test  
    OP
       2023-10-17 11:09:47 +08:00
    @dongtingyue 那相当于书的详情一个接口,查询最后浏览的是一个接口,当前端存储没有的时候去请求?
    xmai
        22
    xmai  
       2023-10-17 11:22:37 +08:00
    @yuyang1992test #19 数据一直存在于 redis 中,可能会占用大量内存,redis 设置过期时间又会丢失用户浏览记录,如果确实需要长期存储还是 mysql 吧
    yuyang1992test
        23
    yuyang1992test  
    OP
       2023-10-17 11:44:04 +08:00
    @xmai 也是,内存要比硬盘贵
    libook
        24
    libook  
       2023-10-17 12:14:42 +08:00
    @yuyang1992test #18 我回复说了,看具体使用场景。

    我们做的 APP 中有些书签功能就是记录在本地的,因为用户并没有跨端同步的诉求,而且多人共用的个别功能用户还要求不要多端同步。

    如果你的产品设计上需要可靠保存这个信息,就记录到服务器上,如果不需要可靠保存,就没必要浪费服务器的空间和算力。

    需要可靠保存的话,存在 Redis 里还需要给 Redis 做持久化,或者复制一份给数据库,否则 Redis 重启数据就丢失了。

    你的需求有很多实现方案,具体用哪一种取决于你的详细需求。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     966 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 35ms UTC 22:41 PVG 06:41 LAX 14:41 JFK 17:41
    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