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

使用 redis 作为数据库(非缓存),有什么建议吗?

  •  
  •   HUNYXV · 2021-10-03 22:39:28 +08:00 · 6176 次点击
    这是一个创建于 907 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一个新的项目,上级的意思是要使用 redis 作为主数据库来提高服务的性能,使用 mongodb 或 mysql 等数据库作为冷备数据库。 大家有这样用的吗?

    47 条回复    2021-10-06 23:59:34 +08:00
    wellsc
        1
    wellsc  
       2021-10-03 22:57:47 +08:00 via iPhone
    别这么用,是在要用这么别扭的东西就上 pika
    heyjei
        2
    heyjei  
       2021-10-03 23:00:15 +08:00   ❤️ 1
    6379 请绑定在 127.0.0.1
    Maboroshii
        3
    Maboroshii  
       2021-10-03 23:00:23 +08:00 via Android
    有,直接用的阿里云的。但是我们的数据都是不太重要,所以这么用问题不大。还是要看具体业务
    HUNYXV
        4
    HUNYXV  
    OP
       2021-10-03 23:04:28 +08:00
    @Maboroshii 数据还是蛮重要的,不过数据有时限,过时的就删掉了。
    HUNYXV
        5
    HUNYXV  
    OP
       2021-10-03 23:06:07 +08:00
    @wellsc emm,上级就让这么用,使用的是 阿里云的 redis,稳定性应该尚可,不过之前阿里的 redis 出过故障,赔给了一些代金券...
    shyangs
        6
    shyangs  
       2021-10-03 23:15:46 +08:00
    數據不重要可以這麼玩.

    金融銀行業不會這麼玩 ( Redis 作為主資料庫).

    數據重要不重要, 要問你上級.
    clf
        7
    clf  
       2021-10-04 01:07:21 +08:00 via Android
    没写到磁盘的数据都是不可靠的。第二手的数据也是不可靠的。
    提高服务的性能不如做好高频数据的查询优化。
    唯一完全丢 Redis 里的东西是那些丢失了也无所谓的数据。
    gabon
        8
    gabon  
       2021-10-04 07:37:06 +08:00 via Android
    可以看看基于 rocks db 兼容 Redis 协议的数据库,自带持久化,性能尚可。
    yuanmomo
        9
    yuanmomo  
       2021-10-04 08:50:13 +08:00 via iPhone
    做过两个项目,以 Redis 为主库。一个是广告推荐系统,之前迅雷的广告平台每天量还是很大的,当时拉暴风放点测试流量就给了我 1.5 亿左右的请求。广告系统允许 5%的误差,所以这么用,没有关系。

    第二个系统,跟钱沾点关系,也这么用的,Redis 集群还是在云上自己搞的,跑了两年,居然没有出过问题。也是神奇
    yuanmomo
        10
    yuanmomo  
       2021-10-04 08:54:28 +08:00 via iPhone
    看你的量,是否要上集群,然后做好主从(一主两从),aof 和 rdb 配合使用,key 分类使用,做好监控的,搞好主从切换方案,好像就这些
    gidot
        11
    gidot  
       2021-10-04 09:20:22 +08:00
    redis 放热数据没问题的,但新增重要数据时:日志+异步落库,让 redis 出现意外损失降到最低。
    aptupdate
        12
    aptupdate  
       2021-10-04 10:06:40 +08:00 via iPhone
    数据量到一定规模之后怎么办呢?
    Ansen
        13
    Ansen  
       2021-10-04 10:13:27 +08:00 via iPhone
    我们这么用了好几年了,使用的是 aof 模式
    1194129822
        14
    1194129822  
       2021-10-04 10:26:54 +08:00
    一般而言数据都是很重要的。所以事务很重要。内存 cache 一般都不支持事务,主要是因为事务现在的必须用到日志,这又会极大降低性能。现在好像有傲腾持久内存,以后数据库可能真的会出现常驻内存的 ACID 数据库。
    ctro15547
        15
    ctro15547  
       2021-10-04 11:02:23 +08:00
    可以本地化,家里几个传感器数据就用的 redis,多年没出过问题 。不重要数据可以这么玩,工作生产的请上 mysql
    sujin190
        16
    sujin190  
       2021-10-04 11:04:38 +08:00 via Android
    首先你们真的有超过 mongodb 和 mysql 的性能需求么,过度设计了吧,除了性能,一致性、集群和事务也还是跟重要的
    HUNYXV
        17
    HUNYXV  
    OP
       2021-10-04 11:05:29 +08:00
    @yuanmomo 感谢
    HUNYXV
        18
    HUNYXV  
    OP
       2021-10-04 11:11:48 +08:00
    @sujin190 也许是第一版这样设计,为的是简单快速上线,以后的版本迭代可能就要考虑更多方面了😂
    ospider
        19
    ospider  
       2021-10-04 11:32:13 +08:00
    easychen
        20
    easychen  
       2021-10-04 11:39:44 +08:00
    试试现成的方案 http://tendis.cn/
    ch2
        21
    ch2  
       2021-10-04 11:57:09 +08:00
    经常备份 aof,数据别存太多防止爆内存
    luin
        22
    luin  
       2021-10-04 12:02:43 +08:00   ❤️ 2
    一个建议是管理 Redis 时可以用我写的 Medis: https://getmedis.com/ 哈哈哈

    正经来讲,虽然可以(确实有不少公司这么用),但是非常不推荐,除非你们真的知道自己在做啥...随便想几个例子:
    1. Redis 的查询能力相比 MySQL 和 MongoDB 而言很初级,所以实现一些功能你需要手动维护二级索引。维护成本随着数据复杂度会明显上升;
    2. 作为 primary database 的生态环境比其他正经数据库差。例如性能分析;
    3. 一般情况下,空间大小受限内存;除非用非官方的各种 SSD/RocksDB 魔改版;
    4. 没有事务啥的,不过看来你们用不上...

    记得 AOF & 设置好 fsync 。
    freelancher
        23
    freelancher  
       2021-10-04 12:21:17 +08:00
    数据丢了就等着向老板吊得半死。最后被炒。
    roundgis
        24
    roundgis  
       2021-10-04 12:37:36 +08:00 via Android
    redis 不要考慮持久化
    palmers
        25
    palmers  
       2021-10-04 13:00:48 +08:00
    如果是性能 可以通过多种手段优化,比如 JVM+reids+mysql 的形式 如果数据可以快速恢复 可以放 redis 里 如此数据不丢失 只要可以保障数据安全 我觉得怎么折腾都可以 只要达到目的就行了
    palmers
        26
    palmers  
       2021-10-04 13:02:00 +08:00
    JVM 是指 localcache 的类似东西
    debuggerx
        27
    debuggerx  
       2021-10-04 14:24:28 +08:00 via Android   ❤️ 1
    如果应用场景确实不注重数据可靠性,为了提高性能这样用,完全是可以的,而且可以设计地简单可控。我之前一个 H5 游戏就是这个思路写的,效果非常好
    HUNYXV
        28
    HUNYXV  
    OP
       2021-10-04 14:40:00 +08:00
    @aptupdate redis 中保存的数据是有时限属性的,现在是为了快速上线,等数据量达到很大规模,可能就考虑更换了
    ps:主要开发就我一个人😂
    simonlu9
        29
    simonlu9  
       2021-10-04 14:52:16 +08:00
    内存是个问题,试过爆内存写入失败情况
    securityCoding
        30
    securityCoding  
       2021-10-04 15:48:09 +08:00 via Android
    图什么呢
    jorneyr
        31
    jorneyr  
       2021-10-04 16:18:49 +08:00
    工作中尽量按照上级的安排做,不要自作主张并且反驳抵触,正确与错误并不重要,但是同时要留下足够的证据:
    1. 听上级的,叫你怎么做就怎么做
    2. 为了避免后期出问题后背锅,根据上级的意思,写设计文档,然后通过邮件的方式发给上级,让他给评审一下,评审通过后继续开发,以后有据可查
    victor
        32
    victor  
       2021-10-04 17:04:44 +08:00
    @luin 支持 M1 架构了吗,是的话就支持一波
    wolfie
        33
    wolfie  
       2021-10-04 17:12:53 +08:00
    事务怎么办
    fannas
        34
    fannas  
       2021-10-04 17:16:24 +08:00 via iPhone
    作为数据库,oracle snowflake 不香了吗
    再不济 mongo db 企业版也行
    yidinghe
        35
    yidinghe  
       2021-10-04 17:27:11 +08:00 via Android
    如果确实你的业务不需要进行关系型查询,这样做倒是无可厚非,不过这种场景我想不出来。
    luin
        36
    luin  
       2021-10-04 18:39:30 +08:00 via iPhone
    @victor 支持的
    leafre
        37
    leafre  
       2021-10-04 21:33:21 +08:00
    不建议
    wangxiyu191
        38
    wangxiyu191  
       2021-10-04 22:52:32 +08:00
    如果可靠性非常重要可以考虑一些针对数据可靠性和一致性进行了增强的 redis 接口存储服务。
    https://aws.amazon.com/cn/memorydb/
    https://help.aliyun.com/document_detail/183956.html
    akira
        39
    akira  
       2021-10-04 23:27:28 +08:00
    看你们的实际业务情况呀,如果确实能大幅度提升性能的话 那为什么不呢.
    之前有个案例就是,一个海外的图片分享网站,就是用了十几台 redis 做的集群,性能超好。
    786375312123
        40
    786375312123  
       2021-10-04 23:53:14 +08:00
    redit 自己就有机制可以冷保存在硬盘上啊
    kuangwinnie
        41
    kuangwinnie  
       2021-10-05 02:13:28 +08:00
    我们之前用 k8s 的时候就是用 redis 做数据库,你做好 sharding 就问题不大。
    kuangwinnie
        42
    kuangwinnie  
       2021-10-05 02:14:00 +08:00
    因为 k8s 的写硬盘就是很烦,所以正好符合了 redis 的需求。
    offswitch
        43
    offswitch  
       2021-10-05 02:32:58 +08:00
    @wellsc pika 现在都不怎么维护了,而且也不支持原生集群,实现上跟 redis 也有些差别。
    opengps
        44
    opengps  
       2021-10-05 12:05:46 +08:00
    redis 用作缓存,并非主数据。虽然 redis 现在支持落盘存储,但是还是建议关系型数据库用作持久目的
    MeteorCat
        45
    MeteorCat  
       2021-10-05 13:18:47 +08:00 via Android
    我感觉还不如 MongoDB,数据安全性更重要,还是 MySQL 之类入库得了
    mywaiting
        46
    mywaiting  
       2021-10-05 13:20:28 +08:00
    生产数据宁愿丢 MySQL/PostgreSQL 里面吃灰,也绝不会丢 Redis 做持久化存储
    troywinter
        47
    troywinter  
       2021-10-06 23:59:34 +08:00
    领导说什么就是什么吧,我的经验就是说服领导是个吃力不讨好的活,但除此之外,你可以双写,写日志或者写数据库,毕竟丢数据锅还是在你。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5491 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 01:37 · PVG 09:37 · LAX 18:37 · JFK 21:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.