V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Livid
V2EX  ›  Redis

关于 Redis 的 naming space 管理

  •  1
     
  •   Livid · 2013-08-26 23:51:14 +08:00 · 6210 次点击
    这是一个创建于 4125 天前的主题,其中的信息可能已经有所发展或是发生改变。
    假设 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
       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   ·   实用小工具   ·   4132 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 05:34 · PVG 13:34 · LAX 21:34 · JFK 00:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.