我们是微服务架构,但业务比较小,单机 Redis 少许扩容就撑住了,现在有新独立业务就想切个缓存库,发现只支持 0 库。
看了一些 issue ,社区主导者认为这会增加运维工作量,干脆不支持这个功能。
业务已经开始写了一个月,现在切换估计不是很来得及。似乎只能 fork 一份自己改改?
最后吐个槽:
不是很理解这种:可以明明可以基于开发规范进行约束的问题,却直接干脆的放弃功能的设计思路。
选 go-zero 的时候,是被宣称“大而全”的微服务框架吸引了,突发奇想了一个词:高大壮汉穿小鞋……
已经在大佬们的指点下,理解了 0 库的用途了,的确是之前没有这方面的研究,技能点缺失。
再次感谢大家!
1
ecric 2023-03-16 19:49:16 +08:00
我最近也在看这个框架
|
2
xiaoshouchen 2023-03-16 19:53:52 +08:00
只能使用 0 库难道不是很基础的规范嘛?
|
3
hzzhzzdogee 2023-03-16 20:04:09 +08:00
0 库是什么意思, 求指教
|
4
so1n 2023-03-16 20:06:22 +08:00
感觉这个库宣传比开发更用心...
|
5
whatiam 2023-03-16 20:07:13 +08:00
我认为只用 0 库是更科学的做法。如果有不同的业务,应该用前缀区分。只用 0 库最大的好处就是以后做 redis 集群的时候,不用改动这部分的代码了。
|
6
lshero 2023-03-16 20:09:42 +08:00
@hzzhzzdogee redis 的 select 切换的那个
|
7
hljjhb 2023-03-16 20:42:51 +08:00 1
⌈Redis Cluster 竟然支持 0 库……⌋
🤣 |
8
ByteCat 2023-03-16 20:46:55 +08:00
很正常,只有单机的有 0-15 ,集群只有 0 库了,业务用不用 key 区分啦
|
9
rekulas 2023-03-16 21:38:41 +08:00
我也感觉这不是特别必要的,用库来区分业务似乎不合理,不然你们 50 个微服务那不是得部署几套 redis
|
10
uiosun OP @xiaoshouchen @whatiam @ByteCat @rekulas
原来集群时 0 库是规范,学到了 --- 那 Redis 推出多个库这个功能的意义在哪儿?之前都是 A 业务放 0 、B 业务放 1 、以此类推...,这样干净整洁 有大佬再指点一下吗,有点迷惑 |
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. |
13
crysislinux 2023-03-16 23:07:15 +08:00 via Android 1
@uiosun redis 作者说了这设计是一个错误。
|
14
kawowa 2023-03-17 02:08:25 +08:00 via iPhone
本来想提醒一下用了哨兵就只能用 0 库了,看到楼上已经说了。
想区分系统或者键的话,用前缀和固定的匹配规则就好。 |
15
swulling 2023-03-17 06:37:56 +08:00 via iPhone
@uiosun 集群版本不能指定 db
但是我不同意 db 无意义。虽然是设计失误,但是既然有这个功能,下游还是得开放配置。 go-zero 就是被国内开发环境吊打的太少,老板或者客户说,你的 db 就是 3 ,要么搞定要么滚蛋。你怎么办? |
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, }) ``` |
17
tairan2006 2023-03-17 07:41:54 +08:00 via Android
多库无用,不同服务的 key 前缀区分开就行
|
18
Rehtt 2023-03-17 08:30:15 +08:00 via Android
go-zero zero😀
|
19
tramm 2023-03-17 08:30:37 +08:00
这么多人都用 0 库的嘛.
看来我是异类了, 我就喜欢不同项目不同的库... |
20
bthulu 2023-03-17 08:30:44 +08:00
多库当然是有用的. 只是 redis 集群搞不定这个事情, 迫不得已降级到仅支持 0 库.
|
21
sujin190 2023-03-17 08:54:10 +08:00 via Android
如果 redis 当做数据库而不是缓存那么分库其实就比分 key 好,缓存的话还是分 key 更好,redis cluster 本来就已经定位于缓存集群了吧
|
22
JKeita 2023-03-17 08:57:21 +08:00
使用 0 库很正常吧,自己搞集群或多实例呗
|
24
RangerWolf 2023-03-17 09:45:28 +08:00
震惊了。。。 居然只能 0 库
|
25
dif 2023-03-17 10:14:05 +08:00
一直用 0 库,不同业务用 key:subkey:... 去区分了,当然,也要限制一些命令的执行。
主要是不管多小的业务,上来就是一套 redis-cluster ,省的后面麻烦了。看业务要求,我们这算是打印个 hello world ,你也要做成高可用的。 |
26
lotusgrm 2023-07-26 23:46:30 +08:00
我觉得之所以 redis 集群的时候默认只支持 0 库,更多是为了简化集群管理,redis 集群中的所有节点共享相同配置,包含集群 redis 实例使用的数据库编号,通过把所有节点都配置成使用 0 号数据库,可以简化集群的管理和维护工作
|
27
studentht 243 天前
@kawowa 似乎哨兵也支持 multiple databases ,未验证。https://stackoverflow.com/questions/62037740/does-redis-supports-databases-in-sentinel-setup-with-multiple-nodes
|