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

一直有一个好奇,如果网站用 redis 作为唯一的数据库,会怎样?

  •  
  •   zzzmh · 2020-06-28 14:56:15 +08:00 · 10533 次点击
    这是一个创建于 1609 天前的主题,其中的信息可能已经有所发展或是发生改变。

    其实我心里大概是有一个答案的,就是怕断电丢 5 分钟左右的数据?
    如果不考虑断电的情况呢,因为阿里云腾讯云我用了好多年都没遇到过断电,而且就丢失 5 分钟,概率上还没有中勒索病毒大。
    其他的我暂时也想不到什么坏处,顶多是逻辑要自己写,大表拆分起来要动动脑。
    好处不用说了,速度起飞,内存占用低。
    所以还是想请教一下各位大佬,到底有没有可行性

    41 条回复    2020-07-26 10:34:25 +08:00
    kiracyan
        1
    kiracyan  
       2020-06-28 14:58:38 +08:00
    本来就可以这样做 只不过看你能承担的风险是多少而已
    Jooooooooo
        2
    Jooooooooo  
       2020-06-28 15:01:09 +08:00
    运维过好几 T 的 redis 集群?
    monsterxx03
        3
    monsterxx03  
       2020-06-28 15:02:12 +08:00 via Android
    你的数据库大小不能超过机器内存喽,开了 aof 也就丢一秒,还有 redis 那个事务不堪用
    pastgift
        4
    pastgift  
       2020-06-28 15:04:49 +08:00 via iPhone
    怎么会内存占用低呢? redis 的内存也是内存呀
    比如正常 mysql 里存了 10 个 G 数据,换 redis 岂不是要 10 个 G 内存?
    你真的只考虑数据全内存里读写,sqlite 放内存,或者 mysql 内存表,加个定时刷到硬盘不就行了
    takemeaway
        5
    takemeaway  
       2020-06-28 15:06:42 +08:00
    哪来的丢 5 分钟? 可以不丢的。 就是看你内存够不够。
    luckyrayyy
        6
    luckyrayyy  
       2020-06-28 15:06:44 +08:00
    不光断电,硬件坏掉的问题?进程挂掉?系统意外死了?另外备份也不是五分钟吧,你完全可以调更低。要是丢数据对你来说完全不重要,那当然只用 redis
    GM
        7
    GM  
       2020-06-28 15:07:31 +08:00
    看你是用来干嘛的了,个人网站随意。
    公司正式用途的,别瞎想。
    vivipure
        8
    vivipure  
       2020-06-28 15:11:37 +08:00   ❤️ 2
    数据库只是一种方式,你用个 json 或者 txt 文件存数据也没问题啊,只是效率问题。
    lshero
        9
    lshero  
       2020-06-28 15:36:06 +08:00
    对运维的要求挺高的,之前的公司大部分项目就是 Redis
    所有的 Redis 实例每一次存取都有监控
    阻塞操作热点 key 之类的问题过一会儿就可以反馈给业务部门
    DBA 对 RDB 文件解析恢复使用的贼溜
    xuanbg
        10
    xuanbg  
       2020-06-28 15:39:19 +08:00
    楼主说的速度起飞,大概就是 30 毫秒的响应时间变成 3 毫秒。这点提升其实体验并没有那么明细,所以根本不重要。
    realpg
        11
    realpg  
       2020-06-28 15:39:47 +08:00
    会很爽
    技术实力不够,就会很酸爽
    zzzmh
        12
    zzzmh  
    OP
       2020-06-28 15:43:48 +08:00
    多谢回答,了解了,先开个虚拟机试试水好了。redis 一直也就作为缓存在用,之前没有足够的深入了解。
    defunct9
        13
    defunct9  
       2020-06-28 15:47:05 +08:00 via iPhone
    @lshero 请教怎么监控每次存取的,还有阻塞热点 key 怎么监控
    est
        14
    est  
       2020-06-28 15:53:38 +08:00   ❤️ 3
    redis 自己的官网和博客就是跑在一个纯 redis 上的。所以呢

    /t/652191
    /t/652220
    /t/652232
    /t/652217
    liuguang
        15
    liuguang  
       2020-06-28 15:59:31 +08:00
    小数据量可以用用,海量数据的时候内存限制了
    swulling
        16
    swulling  
       2020-06-28 16:00:51 +08:00 via iPhone
    redis 主从配好 断电也只损失同步延迟内的数据
    lshero
        17
    lshero  
       2020-06-28 16:01:42 +08:00
    @defunct9 自己搞了个代理呗,把分片监控的问题都解决了,然而代理的可用性又是下一个问题了。
    不过业务都允许用 RDB 恢复数据了代理的高可用性也没有这么重要了。
    jifengg
        18
    jifengg  
       2020-06-28 16:17:34 +08:00
    redis 不是“关系型”数据库,所以有“关系型”的业务的时候,只用 redis 来存数据读数据,不管是开发还是运行其实都不是很好。开发就不用说了,可能需要在存的时候就存很多对应关系。读的时候,需要读好几次才能读完你要的数据。所以,还是看具体需求了。
    没有什么“关系型”业务的,很适合,比如上面说的博客。
    像一般的什么管理系统,就不太适合。
    yinjunjian0
        19
    yinjunjian0  
       2020-06-28 17:45:20 +08:00
    脱离场景没什么好讨论的吧
    DreamH
        20
    DreamH  
       2020-06-28 18:28:20 +08:00
    陌陌一直都是用 redis 当数据库,主要是操作方便,抗量简单
    wysnylc
        21
    wysnylc  
       2020-06-28 18:36:43 +08:00
    @est #13 连 redis 官网都能因为 redis 宕机而整体宕机,生产环境你宕机 5 分钟试试?
    arloor
        22
    arloor  
       2020-06-28 18:59:39 +08:00 via Android
    nodebb
    ClarkAbe
        23
    ClarkAbe  
       2020-06-28 19:06:44 +08:00 via iPhone
    之前用 Golang 嵌入式纯 kv 数据库写了个漫画网站....从推荐到分类,用户模块到记录每一次访问者信息都 ok......不过推荐那些最好别即时....而且查找什么的由于对算法实在头疼也没什么算法就是把数据分(数据总数 /5-10)份然后每一份一个 goroutine 暴力遍历因为用的是 json 的原因所以要转 map 不过我在转 map 前先让他匹配一下是否包含要查找的 value 所以速度超快......当然数据量到 n 亿条了就........

    就是架构挺麻烦.....一共搞了 10 个架构然后一个个实现再一个个测试性能大概用了一个季度......写完差不多就半年过后了
    ClarkAbe
        24
    ClarkAbe  
       2020-06-28 19:09:01 +08:00 via iPhone
    跑起来后日活 ip 2000 左右,内存占用 130M-300M 左右根据 goroutine 的数量变化

    vultr 最低配鸡稳定跑到现在还跑着
    emanci
        25
    emanci  
       2020-06-28 19:09:52 +08:00
    会这样?当然是费钱了。
    dobelee
        26
    dobelee  
       2020-06-28 19:10:04 +08:00 via iPhone
    存储成本剧增,不方便复杂查询,维护成本高。别的跟数据库一样。
    LukeChien
        27
    LukeChien  
       2020-06-28 19:23:31 +08:00 via Android
    ssdb 可以试试
    qwerthhusn
        28
    qwerthhusn  
       2020-06-28 20:01:13 +08:00
    这得看是什么网站
    murmur
        29
    murmur  
       2020-06-28 20:03:47 +08:00
    不需要持久化么? redis 的持久化跟传统 mysql 这些比呢
    liaokylin2v
        30
    liaokylin2v  
       2020-06-28 20:43:31 +08:00 via Android
    应用场景合理就可以,有啥问题
    pmispig
        31
    pmispig  
       2020-06-28 21:17:12 +08:00
    你不如把 mysql 的表文件放到内存,自己写个内存文件系统定时 sync 到磁盘
    wangyzj
        32
    wangyzj  
       2020-06-28 22:09:28 +08:00
    内存贵
    Nicoco
        33
    Nicoco  
       2020-06-28 22:10:02 +08:00
    CSDN 曾经搞过去 SQL 化,全站上 xml 的。

    结果呢?
    lihongming
        34
    lihongming  
       2020-06-28 22:57:58 +08:00 via iPhone
    别被复杂查询吓到,即使是 amazon,也只有百分之十几的查询是关系型查询,其他都可以用 nosql 。

    为了这百分之十几的查询而降低那百分之八十多查询的效率不值,所以 amazon 转向了 dynamodb

    至于复杂的那一小部分,用程序拼凑就好。
    lithbitren
        35
    lithbitren  
       2020-06-28 23:22:05 +08:00
    在知乎上看到好像有公司是真的堆 redis 做数据存储的,就是太费钱,不过老板喜欢,其他暂时没有太严重的问题。
    不过也就看过这么一例,也不知道是不是编的,网上绝大多数碰到这个问题的都是劝退,也几乎没人敢尝试放在业务上。
    594duck
        36
    594duck  
       2020-06-29 08:11:18 +08:00   ❤️ 1
    丁香园的 CTO feng 大用 redis 做底层,结果事后大家都知道了。


    不要老想搞个大新闻 ,什么 IOT 替代计划。真的商业数据库能力甩 MYSQL 一百条马路,除了穷没有不用的道理。而至于 Redis,他只是个 KV,KV 就只干 KV 的活,任何的想象都是犯罪。
    P0P
        37
    P0P  
       2020-06-29 10:54:11 +08:00
    要是想用简单的关系型数据库的话,sqlite 也是不错的,可以运行在纯内存模式或者基于文件模式, pv 不高的话很好用
    heiheidewo
        38
    heiheidewo  
       2020-06-29 13:02:38 +08:00
    kv 一把梭哈(可以用 leveldb 省内存),关系数据全部读到内存处理
    zzzmh
        39
    zzzmh  
    OP
       2020-06-29 14:19:06 +08:00
    @heiheidewo 刚了解了一下 leveldb,好东西适合我的项目,正在入门了
    shyangs
        40
    shyangs  
       2020-07-25 13:49:36 +08:00
    内存好貴的。
    ychost
        41
    ychost  
       2020-07-26 10:34:25 +08:00
    如果觉得关系型数据库的速度太慢,可以考虑使用 Orcale/SQLServer 的「内存表」,这样既有事务支持,而且内存加持速度还很快,还能定时通过快照持久化,也支持水平扩展
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2633 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 85ms · UTC 10:24 · PVG 18:24 · LAX 02:24 · JFK 05:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.