把数据从 mysql 转换存到 redis, 如何设计 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
bicoff9527
V2EX    程序员

把数据从 mysql 转换存到 redis, 如何设计

  •  
  •   bicoff9527 2016-06-20 09:23:53 +08:00 10114 次点击
    这是一个创建于 3480 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如有两张表 A, B, B 对 A 有外键约束, A 中有唯一索引

    感觉可以使用 A 的唯一索引字段做 redis 的 hash 的 name, 但是一个 A 中记录对应多条 B 的记录, B 应该如何设计和存储呢?

    把 B 直接用 list 存到 A 的 hash 的某个键值对里? 感觉不太好

    求指教
    第 1 条附言    2016-06-20 14:24:30 +08:00
    现在用 MySQL 并发可能不够了, 而且是写多读少, 应该如何设计方案
    17 条回复    2016-06-21 11:29:17 +08:00
    aaaron7
        1
    aaaron7  
       2016-06-20 09:29:11 +08:00
    关系型数据不适合存到 redis 吧,查的时候会蛋疼死
    Navee
        2
    Navee  
       2016-06-20 09:29:40 +08:00
    ab 单独存, a 中只记录 b 的引用( id )
    如果你的 b 记录在 a 中,就造成了 b 的冗余,并且单独查询 b 还是个大麻烦
    bicoff9527
        3
    bicoff9527  
    OP
       2016-06-20 09:49:14 +08:00
    @Navee 我要存新的 b 的纪录, 也就是没有 id 的, 该如何存呢...好烦恼
    Navee
        4
    Navee  
       2016-06-20 10:03:56 +08:00
    @bicoff9527 没有 id 你创建一个不就可以了?
    tonghuashuai
        5
    tonghuashuai  
       2016-06-20 11:26:50 +08:00
    首先,我还是建议 lz 不要用这种方式使用 redis , redis 不应该这么用吧,很蛋疼。

    当然,如果非要这么用的话, B 的 key 中包含 A 的 ID 应该是一种办法,结构如下:

    A 的结构: a_id: {col1: val2, col2: val2}
    B 的结构: a_id_b_id: {col1: val2, col2: val2}
    但是这样有一个问题就是:如果只有 B 的 ID 想查询 B 就蛋疼了,就得用遍历了……想想就蛋疼


    redis 的最佳实践是存一些热数据,尽量不存业务数据,虽说 redis 有持久化方式,如果选择实时持久化那性能还不如 mysql 呢,如果定期持久化那么必然会存在丢数据的问题。我一般用 redis 存一下经常更新的热数据或一些运算结果,我的使用原则是: redis 中的数据可以由业务数据冷启动的,也就是说:如果哪天 redis 挂掉了,只要有业务数据,随时都可以生成 redis 中的数据冷启动的。
    mathgl
        6
    mathgl  
       2016-06-20 11:31:05 +08:00
    @tonghuashuai 看云风的文章,他们用 redis 作为 main db ,不过他们是做游戏的。
    SlipStupig
        7
    SlipStupig  
       2016-06-20 11:35:56 +08:00
    这种方案特别不合适,但是方法还有的,方法如下:
    1.将 redis 理解成一个 slave ,每次将 mysql 的 binlog 同步过来,解析成 json ,传入到 redis
    2.mysql 装一个 Gearman redis 的扩展,用 gm 去管理同步
    3.用程序逻辑去控制同步
    lslqtz2
        8
    lslqtz2  
       2016-06-20 11:42:02 +08:00
    Redis 及 Memcache 偏向缓存。
    tonghuashuai
        9
    tonghuashuai  
       2016-06-20 11:42:20 +08:00
    @mathgl
    我也看过,貌似他用 redis 做数据中转用吧,独立于游戏系统,不知道咱俩看到的是不是同一篇……
    fy
        10
    fy  
       2016-06-20 11:49:06 +08:00
    没有必要, redis 不是用来解决这个问题的,都用就行。
    smartdie
        11
    smartdie  
       2016-06-20 11:52:10 +08:00
    用看似省事儿的办法解决麻烦,越做越麻烦。
    memorycancel
        12
    memorycancel  
       2016-06-20 15:37:22 +08:00
    那你用 mongoDB 撒
    mathgl
        13
    mathgl  
       2016-06-20 21:08:43 +08:00   1
    @tonghuashuai

    http://blog.codingnow.com/2011/11/dev_note_2.html

    看描述,是主要用它。不过网游的数据的关联性可能不是很高,这样用问题也不大。
    Muninn
        14
    Muninn  
       2016-06-20 23:15:31 +08:00
    建议楼主可以看看 mongodb 的教程
    在 mongo 里怎么存 在 redis 里也能存成类似的

    然而就像楼上说的,除非可以保证你存的 AB 表维持在一个稳定的水位
    要是只增不减的,不建议存 redis , redis 就是缓存场景,适合存能预估大小和条数的数据
    vikeria
        15
    vikeria  
       2016-06-21 08:49:50 +08:00 via iPhone
    用过一次 redis 替换关系数据库,再也不想用了…为啥不用 mongodb ?
    winglight2016
        16
    winglight2016  
       2016-06-21 10:50:10 +08:00
    试试 memsql 吧
    banksiae
        17
    banksiae  
       2016-06-21 11:29:17 +08:00   1
    我们用 redis 做主库,主要是 IM 记录、以及一些用户信息缓存,每天 16G 的数据。 codis 主备集群,外加 couch 集群。性能上还不错,但是查询比较痛苦,查询的场景基本上要结合 mysql 。
    研究过 LOL 的 im 通讯,用的 riak ,集成了 solr ,支持搜索,楼主如果有兴趣可以看看
    mongodb 没玩过
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1221 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 17:24 PVG 01:24 LAX 09:24 JFK 12:24
    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