V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
uiosun
V2EX  ›  Go 编程语言

go-zero 的 Redis 竟然只支持 0 库……

  •  
  •   uiosun · 2023-03-16 19:43:09 +08:00 · 5272 次点击
    这是一个创建于 609 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我们是微服务架构,但业务比较小,单机 Redis 少许扩容就撑住了,现在有新独立业务就想切个缓存库,发现只支持 0 库。

    看了一些 issue ,社区主导者认为这会增加运维工作量,干脆不支持这个功能。

    业务已经开始写了一个月,现在切换估计不是很来得及。似乎只能 fork 一份自己改改?


    最后吐个槽:

    不是很理解这种:可以明明可以基于开发规范进行约束的问题,却直接干脆的放弃功能的设计思路。

    选 go-zero 的时候,是被宣称“大而全”的微服务框架吸引了,突发奇想了一个词:高大壮汉穿小鞋……

    第 1 条附言  ·  2023-03-17 10:09:23 +08:00

    已经在大佬们的指点下,理解了 0 库的用途了,的确是之前没有这方面的研究,技能点缺失。

    再次感谢大家!

    27 条回复    2024-04-17 17:32:11 +08:00
    ecric
        1
    ecric  
       2023-03-16 19:49:16 +08:00
    我最近也在看这个框架
    xiaoshouchen
        2
    xiaoshouchen  
       2023-03-16 19:53:52 +08:00
    只能使用 0 库难道不是很基础的规范嘛?
    hzzhzzdogee
        3
    hzzhzzdogee  
       2023-03-16 20:04:09 +08:00
    0 库是什么意思, 求指教
    so1n
        4
    so1n  
       2023-03-16 20:06:22 +08:00
    感觉这个库宣传比开发更用心...
    whatiam
        5
    whatiam  
       2023-03-16 20:07:13 +08:00
    我认为只用 0 库是更科学的做法。如果有不同的业务,应该用前缀区分。只用 0 库最大的好处就是以后做 redis 集群的时候,不用改动这部分的代码了。
    lshero
        6
    lshero  
       2023-03-16 20:09:42 +08:00
    @hzzhzzdogee redis 的 select 切换的那个
    hljjhb
        7
    hljjhb  
       2023-03-16 20:42:51 +08:00   ❤️ 1
    ⌈Redis Cluster 竟然支持 0 库……⌋

    🤣
    ByteCat
        8
    ByteCat  
       2023-03-16 20:46:55 +08:00
    很正常,只有单机的有 0-15 ,集群只有 0 库了,业务用不用 key 区分啦
    rekulas
        9
    rekulas  
       2023-03-16 21:38:41 +08:00
    我也感觉这不是特别必要的,用库来区分业务似乎不合理,不然你们 50 个微服务那不是得部署几套 redis
    uiosun
        10
    uiosun  
    OP
       2023-03-16 22:39:27 +08:00
    @xiaoshouchen @whatiam @ByteCat @rekulas

    原来集群时 0 库是规范,学到了

    ---

    那 Redis 推出多个库这个功能的意义在哪儿?之前都是 A 业务放 0 、B 业务放 1 、以此类推...,这样干净整洁

    有大佬再指点一下吗,有点迷惑
    uiosun
        11
    uiosun  
    OP
       2023-03-16 22:40:15 +08:00
    @hljjhb 🤣这不是小业务,没上集群吗,大佬莫笑
    hljjhb
        12
    hljjhb  
       2023-03-16 23:04:03 +08:00   ❤️ 1
    @uiosun 也不算规范吧,只是没太大必要,况且官方也不推荐用于区分不同产品

    In practical terms, Redis databases should be used to separate different keys belonging to the same application (if needed), and not to use a single Redis instance for multiple unrelated applications.
    crysislinux
        13
    crysislinux  
       2023-03-16 23:07:15 +08:00 via Android   ❤️ 1
    @uiosun redis 作者说了这设计是一个错误。
    kawowa
        14
    kawowa  
       2023-03-17 02:08:25 +08:00 via iPhone
    本来想提醒一下用了哨兵就只能用 0 库了,看到楼上已经说了。
    想区分系统或者键的话,用前缀和固定的匹配规则就好。
    swulling
        15
    swulling  
       2023-03-17 06:37:56 +08:00 via iPhone
    @uiosun 集群版本不能指定 db

    但是我不同意 db 无意义。虽然是设计失误,但是既然有这个功能,下游还是得开放配置。

    go-zero 就是被国内开发环境吊打的太少,老板或者客户说,你的 db 就是 3 ,要么搞定要么滚蛋。你怎么办?
    yibin001
        16
    yibin001  
       2023-03-17 06:56:17 +08:00
    自己改一下就好了啊,我这边用 go-zero 快 2 年了


    ```
    type RedisConf struct {
    cache.NodeConf
    PoolSize int `json:"PoolSize ,default=500 ,optional"`
    Db int `json:"Db, default=0,optional"`
    }


    ......

    //redis/v8 里是能支持指定不同 DB 的。
    client := redis.NewClient(&redis.Options{
    Addr: c.CacheRedis[0].Host,
    Password: c.CacheRedis[0].Pass,
    PoolSize: c.CacheRedis[0].PoolSize,
    DB: c.CacheRedis[0].Db,
    })

    ```
    tairan2006
        17
    tairan2006  
       2023-03-17 07:41:54 +08:00 via Android
    多库无用,不同服务的 key 前缀区分开就行
    Rehtt
        18
    Rehtt  
       2023-03-17 08:30:15 +08:00 via Android
    go-zero zero😀
    tramm
        19
    tramm  
       2023-03-17 08:30:37 +08:00
    这么多人都用 0 库的嘛.
    看来我是异类了, 我就喜欢不同项目不同的库...
    bthulu
        20
    bthulu  
       2023-03-17 08:30:44 +08:00
    多库当然是有用的. 只是 redis 集群搞不定这个事情, 迫不得已降级到仅支持 0 库.
    sujin190
        21
    sujin190  
       2023-03-17 08:54:10 +08:00 via Android
    如果 redis 当做数据库而不是缓存那么分库其实就比分 key 好,缓存的话还是分 key 更好,redis cluster 本来就已经定位于缓存集群了吧
    JKeita
        22
    JKeita  
       2023-03-17 08:57:21 +08:00
    使用 0 库很正常吧,自己搞集群或多实例呗
    8355
        23
    8355  
       2023-03-17 09:14:56 +08:00
    @uiosun #11 没上集群也应该高可用啊...
    RangerWolf
        24
    RangerWolf  
       2023-03-17 09:45:28 +08:00
    震惊了。。。 居然只能 0 库
    dif
        25
    dif  
       2023-03-17 10:14:05 +08:00
    一直用 0 库,不同业务用 key:subkey:... 去区分了,当然,也要限制一些命令的执行。
    主要是不管多小的业务,上来就是一套 redis-cluster ,省的后面麻烦了。看业务要求,我们这算是打印个 hello world ,你也要做成高可用的。
    lotusgrm
        26
    lotusgrm  
       2023-07-26 23:46:30 +08:00
    我觉得之所以 redis 集群的时候默认只支持 0 库,更多是为了简化集群管理,redis 集群中的所有节点共享相同配置,包含集群 redis 实例使用的数据库编号,通过把所有节点都配置成使用 0 号数据库,可以简化集群的管理和维护工作
    studentht
        27
    studentht  
       211 天前
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5416 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 07:11 · PVG 15:11 · LAX 23:11 · JFK 02:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.