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

关于Redis到底能不能做数据库以及一些NoSQL的问题

  •  
  •   tonghuashuai ·
    tonghs · 2013-10-23 13:15:06 +08:00 · 9081 次点击
    这是一个创建于 4078 天前的主题,其中的信息可能已经有所发展或是发生改变。
    小弟有几个问题不太明白,特烦请各位给解释一下:
    1.能不能单纯的用Redis做数据库,由于Redis是基于内存的,只是周期性的转到持久存储,这样是不是就不能保证数据了
    2.上面说到的问题,貌似MongoDB没有吧
    3.看@Livid的博客,V2EX用到了Redis,是用作数据存储还是只是用做缓存
    3.豆瓣、facebook等等一些架构用到了Redis、memcached等等,但是还是用到了MySQL等关系型数据库,是不是可以说传统的关系型数据库的地位在有些地方还是不能撼动的
    21 条回复    1970-01-01 08:00:00 +08:00
    mahone3297
        1
    mahone3297  
       2013-10-23 13:40:44 +08:00   ❤️ 1
    1. 是,不能保证数据,所以不能做数据库
    2. mongodb是数据库
    3. 我猜肯定是缓存
    4. redis,memcached是缓存,不是数据库。。。
    分清了redis不是数据库,上面的问题,就都有答案了。。。
    cloudzhou
        2
    cloudzhou  
       2013-10-23 14:02:24 +08:00
    @mahone3297 redis 可以不单单是缓存,你可以把 redis 理解为一个长久的 hashtable, sortset 等等,redis 是为了加速特定结构的数据,这些数据访问量非常大,放在数据库压力大。
    Ricepig
        3
    Ricepig  
       2013-10-23 14:06:52 +08:00
    redis只是害怕意外停机,可以通过多机的方式避免某机器意外停机
    mongodb
        4
    mongodb  
       2013-10-23 14:14:39 +08:00
    可以做纯数据库,意外停机造成数据丢失的问题可以通过架构解决。
    如果拿不准的话可以暂时作为缓存或者某些特定的库和表尝试用redis,抗压能力是杠杠的。
    也可以尝试使用一下我,对比下。
    mahone3297
        5
    mahone3297  
       2013-10-23 14:15:03 +08:00
    @cloudzhou 对,我知道。是为了加速,所以我把他理解成缓存。。。可能用词不准,但是意思就这个意思,理解就行。反正不是数据库。redis的官网说他是个“数据结构服务”
    tonghuashuai
        6
    tonghuashuai  
    OP
       2013-10-23 14:35:30 +08:00
    @mahone3297
    @cloudzhou
    @Ricepig
    @mongodb
    多谢各位,明白了
    misaka
        7
    misaka  
       2013-10-23 14:49:53 +08:00
    @mahone3297

    Bullshit.
    Do confirm your answer before answering questions.

    ---

    Redis on Ubuntu 10.04 (Lucid) #on sidebar
    http://library.linode.com/databases/redis/ubuntu-10.04-lucid
    "/database"

    http://en.wikipedia.org/wiki/Redis
    "Type: Document-oriented database"

    http://redis.io/topics/quickstart
    Search "database"

    http://www.redisbook.com/en/latest/
    See "数据库"

    ---

    Redis is database.
    shiny
        8
    shiny  
       2013-10-23 14:57:50 +08:00
    NoSQL 绝不是要取代传统 SQL,而是传统 SQL 有益的补充。
    Redis 的可靠性没有想象中的那么弱,开启 aof 及多机复制,一般应用场合足矣。
    mahone3297
        9
    mahone3297  
       2013-10-23 15:33:33 +08:00
    @misaka 看看官网
    Redis is an open source, BSD licensed, advanced key-value store. It is often referred to as a data structure server since keys can contain strings, hashes, lists, sets and sorted sets.
    反正不管怎样,我还是不会认为他是database
    Livid
        10
    Livid  
    MOD
       2013-10-23 17:17:19 +08:00
    V2EX 目前在用 Redis 存储一些用户的设置数据(比如 ignore 的主题)。

    这样的一个好处是,除了性能好之外,在添加这类新数据的时候,不会涉及任何的 scheme change,也就是说不需要运行 alter table 自然也就不存在锁表问题。
    tonghuashuai
        11
    tonghuashuai  
    OP
       2013-10-23 17:45:56 +08:00
    @Livid
    我可以这么理解不:可以使用Redis存一些不经常改动的数据,这样由内存到持久存储同步时,系统异常丢数据的概率就比较小了
    chloerei
        12
    chloerei  
       2013-10-23 18:14:31 +08:00
    @tonghuashuai 应该存经常改动,丢了也没关系或者可以从数据库重建的数据。
    allenwei
        13
    allenwei  
       2013-10-23 18:37:14 +08:00
    Redis最常用的就是cache和queue吧, 还有作为缓冲区的,充分发挥读写快的优势
    lerry
        14
    lerry  
       2013-10-23 18:39:22 +08:00
    redis怎么不是数据库了,开启 Replication 和 aof 已经很可靠了
    用到redis的,我觉得大部分不是作为缓存的
    likuku
        15
    likuku  
       2013-10-23 21:22:32 +08:00
    @tonghuashuai 你这种就是需要个数据库的缓存,memcached 很适合。
    moroumo
        16
    moroumo  
       2013-10-23 21:26:41 +08:00
    我觉得redis做数据库到没多大问题,对于一般的应用而言。
    但是如果数据需要从不同的字段或者维度做统计的话,还是db的好。
    RisingV
        17
    RisingV  
       2013-10-24 00:51:54 +08:00
    一句话,不合适。用aof失去了高可用性本意。redis所有的优势都是建立在对内存复杂数据结构高效的原子操作上,这样就看出aof是一个非常不协调的部分。用snapshot才是好的使用方式。
    Ricepig
        18
    Ricepig  
       2013-10-24 13:40:57 +08:00 via iPhone
    @lerry 最大问题来自于redis和db的一个差异:普通db是写入磁盘后才认为操作完成,redis是写入内存就意味操作完成,replica和aof可以认为是后续附加操作。这一点点貌似只是先后的差别,对于数据的可靠性考量还是不一样的。
    当然,replica和aof会把丢数据的概率降低很多。
    est
        19
    est  
       2013-10-24 15:24:40 +08:00
    @Livid 比如我这样建立一个表: create table settings (id int, key varchar(100), value varchar(500) ); 可以解决你的alter table麻烦不?


    @lerry redis的问题是,k-v方便,keys() 超级卡超级麻烦。一般都通过数据冗余来解决scan的操作。感觉就是不如OLTP方便。
    stackpop
        20
    stackpop  
       2013-10-24 16:42:03 +08:00
    和架构有很大关系。

    个人所负责的业务,一般是热数据放在内存中,使用redis等,然后ssd中有一份完整数据,磁盘也有一份。

    对于实时服务,一般使用内存中的数据,一旦机器挂掉,就重新从磁盘导出一份进内存。

    对于非实时的服务,就没这么讲究了,很有可能就是提交一个map/reduce的任务,让他一直跑,跑完了,结果还是放回内存,等待用户来取。
    lerry
        21
    lerry  
       2013-10-24 17:55:13 +08:00
    @est 确实有很大限制性,无法反向查询
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1123 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 17:55 · PVG 01:55 · LAX 09:55 · JFK 12:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.