初学者求教 Redis 问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zippera
V2EX    Redis

初学者求教 Redis 问题

  •  
  •   zippera
    zippera 2014-04-23 10:49:50 +08:00 7740 次点击
    这是一个创建于 4203 天前的主题,其中的信息可能已经有所发展或是发生改变。
    习惯了 SQL,刚刚学习 Redis,思维还是难以转换过来。

    比如,想要存储用户信息,在 SQL 中,一般使用 table 中的 records 来存储,每个 records 有不同的field。

    现在我有这样的需求,存储用户信息,每个用户有: id, name ,email,password。对于 SQL 很好实现,对于 Redis,该怎么存储呢?

    最好能给出代码,谢谢!
    19 条回复    2014-04-23 16:36:55 +08:00
    xiaogui
        1
    xiaogui  
       2014-04-23 10:58:36 +08:00
    怎么说呢,一般不怎么使用redis做数据存储。一般mongodb做数据存储,redis做缓存等。
    verfino
        2
    verfino  
       2014-04-23 11:22:46 +08:00
    Redis不是有Hash格式么,用户id作为Hash的key,其他信息用json格式的string作为Hash的value
    zippera
        3
    zippera  
    OP
       2014-04-23 11:28:15 +08:00
    @xiaogui 新浪云不就是用的 redis 嘛,然后持久化到 mysql。。
    zippera
        4
    zippera  
    OP
       2014-04-23 11:29:04 +08:00
    @verfino value 每次都要序列化,之后再恢复吗?
    mercurylanded
        5
    mercurylanded  
       2014-04-23 11:40:07 +08:00
    table名:id:字段名

    然后弄一个set里面是table的所有id

    一个tableid用来自增

    这是我现在的使用情况需要redis跟mysql之间互相转所以要这样写
    0bit
        6
    0bit  
       2014-04-23 11:44:07 +08:00
    一般真的不会用redis来存储这些信息,即使存储了,也不利于查询,完全不是redis的优势
    zippera
        7
    zippera  
    OP
       2014-04-23 12:00:27 +08:00
    @mercurylanded 这个也太松耦合了。。另外,单独用 redis 做数据库好用嘛?
    zippera
        8
    zippera  
    OP
       2014-04-23 12:00:54 +08:00
    @0bit 能不能举例说一下 redis 适合存储什么样的信息?
    Ever
        9
    Ever  
       2014-04-23 12:04:47 +08:00
    序列化后set或者把key打散了hset
    diligence24
        10
    diligence24  
       2014-04-23 12:54:17 +08:00
    hash 可以
    mercurylanded
        11
    mercurylanded  
       2014-04-23 13:17:22 +08:00
    @zippera 现在用的redis当cache,持久化还是在mysql里
    xia0ta0
        12
    xia0ta0  
       2014-04-23 13:43:36 +08:00
    redis适合存储简单的key/value或者key/dictionary数据。比如:key是用户id,value是用户信息

    redis比memcache强大的地方在可以排序,可以查询某一个字段。比如只是查询前100名用户的姓名

    如果想实现复杂的条件查询,还是用mongodb或者mysql之类的。如果非要用redis设计,你会感觉是在做其他数据库已经具有的功能,一致性还有问题。
    verfino
        13
    verfino  
       2014-04-23 13:52:51 +08:00
    @zippera 是的,每次;这种操作除非是你user信息很大很长,否则不用考虑性能成本

    PS 我也赞同Redis用来做cache,不建议做持久化
    gkiwi
        14
    gkiwi  
       2014-04-23 13:55:50 +08:00
    如果只需要根据id查询用户信息,可以考虑用用hset,以id为field,以dumps后的[name,email,password,...]作为value,以后根据id查询就好了~可以单独分个db来储存这些信息,或者在id前面加个统一前缀做处理就好了~
    Perry
        15
    Perry  
       2014-04-23 13:58:21 +08:00 via iPhone
    qdvictory
        16
    qdvictory  
       2014-04-23 13:58:39 +08:00
    我觉得这个比较适合lz
    当时我也是看这个入门的

    http://blog.nosqlfan.com/html/3202.html?ref=rediszt
    lnehe
        17
    lnehe  
       2014-04-23 14:01:44 +08:00
    zippera
        18
    zippera  
    OP
       2014-04-23 15:01:04 +08:00
    @lnehe 多谢,这篇文章正好解释了我的困惑。
    @qdvictory thx,之前看过英文的,没想到还有人给翻译了
    @Perry 看到KV 设计了~ 请问,有没有类似 Hackernews 的 nodejs 版实现呢?

    @verfino 做 cache 可以用序列化,若持久化,序列化的方式不适合按照属性操作。。
    @xia0ta0 是的,打算用 mongodb 了,不过,一般用 mongodb 呢,还是用ODM 呢?
    @mercurylanded 有没有文章介绍怎么用 redis 做 cache,然后存入 mysql 呢?
    waitgroup
        19
    waitgroup  
       2014-04-23 16:36:55 +08:00
    @zippera

    序列化的问题你太执着了.

    属性只需要用redis的数据类型索引需要查询的
    user:1 {name:"xxx", "birthday":"1980-1-1"}
    password:1 blob
    firiends:1 sets
    birthday:1980:1:1 sets


    kyoto tycoon作者(也是tokyo tyrant作者)的这篇文章(http://fallabs.com/blog/promenade.cgi?id=24)讲到了怎么在kyoto tycoon下面实现原先tokyo tyrant内置的table类型, 可以部分套用到redis上来.
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2592 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 13:42 PVG 21:42 LAX 06:42 JFK 09:42
    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