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

业内有没有把 redis 开启 aof=always 当做数据库使用的?

  •  
  •   Orlion ·
    Orlion · 2024-03-04 09:06:54 +08:00 · 7237 次点击
    这是一个创建于 366 天前的主题,其中的信息可能已经有所发展或是发生改变。

    个人理解对于简单的存储 kv 、读写压力都比较大的需求,完全可以开启 redis 持久化,当成一个数据库来用的。aof=always 既不会导致数据丢失,也能获取极高的读性能,虽然写性能会变差,但相比 b tree/lsm tree 这种磁盘数据库性能还是比较高的吧。

    而且还有个好处就是避免了常说的“缓存一致性问题”😄。

    各位大佬厂里有没有这样用的?如果没有原因是什么呢?

    第 1 条附言  ·  2024-03-04 18:06:13 +08:00

    感谢V友们踊跃评论,这里再做一个阶段性补充:

    1. 场景是只针对KV这种非常简单的需求的哈,就是读一个k,写一个k,没有复杂查询之类的东西。
    2. 总结下各位的意见这种玩法目前有两个缺点:
      • aof文件存在损坏的可能性
      • 存储数据多之后aof文件会非常大,导致redis拉起比较慢
    33 条回复    2024-03-04 18:13:32 +08:00
    FawkesV
        1
    FawkesV  
       2024-03-04 09:13:00 +08:00
    内存太贵
    ShuA1
        2
    ShuA1  
       2024-03-04 09:13:21 +08:00
    你把持久化的内容作为标准内容输出再导入试试
    LongMaoz
        3
    LongMaoz  
       2024-03-04 09:13:54 +08:00   ❤️ 10
    碰到过哦,天才设计,把 Redis 当数据库用 聚合运算无法实现,想聚合运算只能把所有数据拉到内存里再计算,延迟大得吓人

    单机架构,高并发情况下 Rrdis 单线程执行,所有人全部在等待慢查询,所有 IO 也没有使用异步,整个系统高并发情况下直接崩掉
    securityCoding
        4
    securityCoding  
       2024-03-04 09:15:15 +08:00 via Android
    有,很多活动数据都是直接丢 redis 里面
    bruce0
        5
    bruce0  
       2024-03-04 09:18:19 +08:00   ❤️ 1
    我们就这样用, 以前的时候,这个只用在数据规模比较小的时候, 一个 redis 大约几十, 几百 MB 吧,因为以前的 redis aof 和 rdb 性能没那么好, 数据量太大性能有影响. 数据规模大的 redis 自己做了一个 monitor 工具,来做数据落地

    后来还换过 pika 这样的硬盘型的 kv 数据库, 优点:数据实时写入硬盘,不用担心断电数据丢失, 而且使用成本低, 数据量不受内存制约. 缺点, 读写延迟相对 redis 大, API 不是 100%兼容 redis

    现在直接用 云厂商的 redis, 好处就是什么都不用管, 只管用就行. 而且有多种模式, 主从, 集群都有, 基本不用担心丢数据


    !!! 最后警告, 我们的业务模式允许极端状况下 丢失少量数据, 如果涉及到非常严格的场景,纯 redis 还是有风险
    lovedebug
        6
    lovedebug  
       2024-03-04 09:20:29 +08:00
    部分服务拿来做数据库,当时只限大数据量和高速查询用途
    layxy
        7
    layxy  
       2024-03-04 09:21:22 +08:00
    各种关联组合查询以及数据聚合怎么办
    matrix1010
        8
    matrix1010  
       2024-03-04 09:25:45 +08:00 via iPhone
    简单 kv 内存够大当然没问题。但一般情况下小公司用户少不需要那么快,大公司数据量大放内存性价比太低
    kneo
        9
    kneo  
       2024-03-04 09:28:07 +08:00 via Android
    自己测一下再说。
    infun
        10
    infun  
       2024-03-04 09:42:24 +08:00   ❤️ 3
    FrankAdler
        11
    FrankAdler  
       2024-03-04 09:50:31 +08:00 via Android   ❤️ 1
    我所在的公司把 redis 当持久存储使用,有些数据只在内存有数据库没有,好几个集群的内存规模在 tb 级别,当然费用也很高,现在想做降本随随便便都是万/月😄
    thinkershare
        12
    thinkershare  
       2024-03-04 09:56:13 +08:00   ❤️ 1
    大部分业务都有对写有一致性要求(而且不是简单的 K/V 写入),Redis 只能用读(也要处理缓存失效的问题),完全无法处理写的一致性问题。
    你看国内几家大型互联网公司,搞了一堆中间件,结果是一致性总会出现一堆奇奇怪怪的问题,我遇到的就有:美团&淘宝&京东&天猫&腾讯。
    PiersSoCool
        13
    PiersSoCool  
       2024-03-04 10:05:33 +08:00
    我不信谁的系统里没有 select sum(amount) from money group by user_id 的需求,有的话老老实实 mysql 把
    37Y37
        14
    37Y37  
       2024-03-04 10:06:25 +08:00 via Android
    接触过很多游戏项目,就是直接 Redis 做数据库,并且跑的很成熟了,用户体量很大,基本没出过什么问题。在这之前我也一直认为 Redis 只能做缓存,实践证明做数据库也可以

    单 Redis 集群有几个 T 的内存,内存太贵了,胜在现在有一些新产品可以自动分离冷热数据,降低成本到之前的 1/10 左右,很好用很划算
    version
        15
    version  
       2024-03-04 10:28:42 +08:00
    活动秒杀啥的.上 redis 储存..比看什么高级架构师高并发 ppt 靠谱
    vivisidea
        16
    vivisidea  
       2024-03-04 10:32:01 +08:00
    现在 nvme ssd 的性能很强,容量大的也可以很大,可以考虑楼上提到的 kvrocks 类的 ssd based redis 方案
    QWE321ASD
        17
    QWE321ASD  
       2024-03-04 10:46:40 +08:00
    其他地方不知道,知乎我看见过好几个说主力数据库是 redis 的
    limingzhe123
        18
    limingzhe123  
       2024-03-04 11:18:14 +08:00
    Redis 通过 proxy+instance 做成高可用集群,就是一个内存数据库
    guanzhangzhang
        19
    guanzhangzhang  
       2024-03-04 12:33:40 +08:00
    如果机器配置不高,又混着用,切宕机风险高(例如小公司自建机房,随便的 vmware ,exsi ),aof 的文件会存在损坏几率的
    assiadamo
        20
    assiadamo  
       2024-03-04 12:40:16 +08:00
    游戏行业很多年前就见过把 leveldb 集成到 redis 中当数据库用的
    xiaowangge
        21
    xiaowangge  
       2024-03-04 13:14:13 +08:00 via iPhone
    游戏行业多年前使用腾讯云魔改版 Memcached (可持久化)当数据库用。

    后来又使用 Redis 当数据库用。
    lidashuang
        22
    lidashuang  
       2024-03-04 13:41:12 +08:00
    nvme 性能好, 可以直接拿 pg 当 缓存用
    rails 就是这么干的
    https://discuss.rubyonrails.org/t/explaning-solid-cache-rails-new-cache-store/83970/1
    roundgis
        23
    roundgis  
       2024-03-04 14:38:44 +08:00 via Android
    云风的游戏公司好像用 redis 当主数据库
    hxzhouh1
        24
    hxzhouh1  
       2024-03-04 14:42:53 +08:00
    如果只有 KV 数据,没关系型运算,应该可以把,但是我不敢尝试,毕竟丢数据比较糟心
    dododada
        25
    dododada  
       2024-03-04 14:47:17 +08:00
    有的,以前我们就用,IM 的 TCP 消息服务,16 台 256Gredis 。除了业务逻辑上的问题,从来没有什么并发跟不上。
    嫌贵的话可以试试 ssd ,小米有个基于 rockdb 的开源项目,我们也用过,性能比 redis 低一些,但是很便宜。
    另外当年有个新闻,某成人网站,主数据库就迁移到 redis 了
    locochen
        26
    locochen  
       2024-03-04 14:50:57 +08:00
    可以对比下 SAP Hana 内存数据库
    Rickkkkkkk
        27
    Rickkkkkkk  
       2024-03-04 14:55:11 +08:00
    挺多的
    fcten
        28
    fcten  
       2024-03-04 14:55:51 +08:00
    想法很好,有很多人都是这么想的。但是用 Redis 来搞属实有些蹩脚,所以有了 LevelDB 。
    ZeroAsh
        29
    ZeroAsh  
       2024-03-04 15:40:05 +08:00
    NoSQL 做业务数据存储如果没做详细的调研确定自己能用 Redis ,整体感觉是直接上 MongoDB 更好,功能更多更全,楼上说的 aggregate/sum 这种查询也没问题
    RedisMasterNode
        30
    RedisMasterNode  
       2024-03-04 16:21:05 +08:00
    这样的玩法为啥不直接用个 KV 存储咧?
    ychost
        31
    ychost  
       2024-03-04 17:47:55 +08:00
    你这个需求应该用 MongoDB 速度也够快,查询也够灵活就是不支持 join 而已
    totoro52
        32
    totoro52  
       2024-03-04 18:00:14 +08:00
    问题来了。。 事务怎么办
    me1onsoda
        33
    me1onsoda  
       2024-03-04 18:13:32 +08:00
    你对缓存一致性是不是有什么误解?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3711 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 10:30 · PVG 18:30 · LAX 02:30 · JFK 05:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.