用 redis 做缓存,总共有 16db,在实际应用为了方便管理把不同的业务放在了不同的 db 中(虽然 16 个没全部用到,但基本上也用了差不多一半左右的样子)
最开始操作 redis 的代码是这样的
比如我要 SET 一个 string 到 db=1 的库中,命令顺序就是:SELECT > SET
这样做了之后发现一个问题:并发稍微高了一点就会导致 dbindex 错乱,就是我明明想 SET 到 db=1 的库里,可能跑了到 db=2 的或者其他的库里
于是将所有的 redis 操作改为了用事物来代替,即:MULTI > SELECT > SET > EXEC
这样做了之后就没有问题了
那么问题来了:
- 1.全部用事物和不用事物有没有什么弊端(比如性能上的损耗啥的)
- 2.比如我现在已经把我的业务划分好了,总共要用到 6 个 db,是不是一开始直接初始化 6 个 client 分别对应 1-6 的 db 来操作会好一点,这样我就不需要用事物了。但是这样会不会又会带来别的什么问题呢?(或者极限情况直接初始化 16 个 client )
- 3.有没有必要分 db 存储呢? redis 设置 16 的 db 的原因应该不仅仅是为了方便管理吧?应该还是有性能上的考虑啥的吧?
最后:开发语言用的是 go,client 使用的是redigo