关于 Redis 的 naming space 管理 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Livid
74.2D
458.33D
V2EX    Redis

关于 Redis 的 naming space 管理

  •  1
     
  •   Livid
    PRO
    2013-08-26 23:51:14 +08:00 6622 次点击
    这是一个创建于 4428 天前的主题,其中的信息可能已经有所发展或是发生改变。
    假设 V2EX 用这样的 naming 来管理数据:

    v2ex:member:1 (Hash)

    v2ex:member:1:following (Sorted Set or List)

    v2ex:topic:2 (Hash)

    topic:node:2:list (Sorted Set)

    ...

    那么在数据对象的类型多了之后,所有的这些命名规则也会变得越来越复杂。

    是否有什么适合来管理这样的命名规范的工具?Excel?
    16 条回复    1970-01-01 08:00:00 +08:00
    ipconfiger
        1
    ipconfiger  
       2013-08-27 00:00:32 +08:00
    真是铁了心上纯redis?
    Livid
        2
    Livid  
    MOD
    OP
    PRO
       2013-08-27 00:03:18 +08:00
    @ipconfiger 上之前需要把所有问题想清楚。然后,需要找一段时间把想法完整写出来。然后实际测试一下。

    目前觉得,功能应该不会受到任何影响。
    ipconfiger
        3
    ipconfiger  
       2013-08-27 00:11:09 +08:00
    @Livid Redis在快照模式下还是会丢数据的,然后dump快照时会fork一个新进程导致内存占用翻倍,如果用aof模式就没有这么风驰电掣的赶脚了。另快照模式虽然新fork了进程来dump数据,但是当你的数据有几个G的时候.......还是会在瞬间卡住进程,实际使用的时候就是这样子的
    keakon
        4
    keakon  
       2013-08-27 00:19:28 +08:00
    如果内存比较宝贵的话,建议减小 key 的长度,且不要使用太多 key。
    例如 v2ex:member(hash),id 作为 field name,值可以用 JSON 或其他编码方式。
    Redis 有个坑就是取出来的数据类型都是字符串,所以想区分 1 和 '1'、'' 和 None 的时候会很。而 JSON 可以保留类型信息。
    这里有些经验: http://www.keakon.net/tag/Redis
    qdvictory
        5
    qdvictory  
       2013-08-27 01:50:34 +08:00 via iPad
    这个命名感觉还是有点问题。
    之前看资料,推荐key写法是 表明:id:字段 值为字段值,如果多单词可以用.连接,如 topic:1:date
    这个规则貌似和php的某个redis gui,(phprediaadmin?)相温和。

    @keakon 像python可以用pickle解决
    keakon
        6
    keakon  
       2013-08-27 02:04:15 +08:00
    @qdvictory pickle 很慢啊,而且丧失可读性
    VYSE
        7
    VYSE  
       2013-08-27 03:20:12 +08:00
    用ORM吧
    ritksm
        8
    ritksm  
       2013-08-27 03:47:01 +08:00
    @ipconfiger 内存翻倍确实是个很烦的事情...被这个卡住机器很多次了...

    还是推荐用Redis来做缓存的比较好...如果Cache命中率大的话其实和直接做数据存储性能上没啥太大区别...

    @keakon 如果要序列化的都是对象的话...比如Django的model...那么pickle用起来还是很方便的...
    ritksm
        9
    ritksm  
       2013-08-27 04:01:39 +08:00
    再回答一下问题好了...

    我觉得最好的管理方式就是不要管理...

    如果是在一个应用里面的name...我一般都是做一个base_name放在config里...像这样v2ex:member:{pk}然后直接format...

    如果要图形化看的话可以看看这个https://github.com/ErikDubbelboer/phpRedisAdmin

    想不到有啥需要管理Key的场景...
    ushuz
        10
    ushuz  
       2013-08-27 07:42:59 +08:00
    都用json
    ipconfiger
        11
    ipconfiger  
       2013-08-27 09:40:31 +08:00
    哈哈,可以试试我这个方案 https://github.com/ipconfiger/free4my
    clowwindy
        12
    clowwindy  
       2013-08-27 11:28:00 +08:00 via iPhone
    我一般分 db 而不是加前缀。
    est
        13
    est  
       2013-08-27 11:44:40 +08:00
    redis没法做scan,天生缺陷。还是算了吧。


    @ipconfiger 似乎泄露db地址账号密码了。哇咔咔
    ipconfiger
        14
    ipconfiger  
       2013-08-27 11:55:41 +08:00
    @est 没事,我本地虚拟机上的db
    deepanalyzer
        15
    deepanalyzer  
       2013-08-27 14:43:08 +08:00
    最近有篇论文是在讲类似的问题,并且考虑的场景更复杂一些。@Livid 可以参考看看:"Managing Schema Evolution in NoSQL Data Stores", at http://db.disi.unitn.eu/pages/VLDBProgram/pdf/DBPL/paper2.pdf
    wuxqing
        16
    wuxqing  
       2013-08-27 17:20:37 +08:00
    @Livid 为什么不用mongodb?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1212 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 17:25 PVG 01:25 LAX 10:25 JFK 13:25
    Do have faith in what you're doing.
    ubao 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