shell909090/influx-proxy

关于redis的错误使用

Opened this issue · 4 comments

在生产环境redis数据量比较大的情况下,使用keys命令会出现超时,https://github.com/shell909090/influx-proxy/blob/master/backend/config.go 代码中多次使用keys命令,建议使用set封装“b:”以及“m:”

😓,你是我知道的第一个配置复杂到redis里不能用keys的。
正解其实不是用set去封装"b:"。"b:"下面的数据是个dict,没法装进set里。使用set只能对backend做一个索引,加速获得所有名字。这个修改会增加结构的复杂度,因为set中的内容和"b:"的内容要严格对应。
正解应该使用json这类可嵌套的结构,或者使用文档数据库去存储配置。其实整个配置就是三个json dict。或者打包到一起也可以说是一个json dict。增加一个config source,从http url上拉配置文件,然后生成配置,貌似是更可行的方案。
我原本的设计,redis只是一个过渡方案。最终方案是用etcd的。这样就不用请求更新配置了。不过貌似过渡方案运行的好好的,一过渡就这么着没动过了。

我们业务侧使用的redis和其他的系统共用,目前查看数据量已经达到4GB。keys命令的执行已经严重影响redis服务的整体性能了。
简单起见,我们为这个服务单独起个redis~
期待后续方案~

其实不用。你试试开一个单独数据库。redis支持开多个数据库,新版的分支支持指定redis数据库。

好的,我们这边试一下。没想到这点。