问题描述:

我想用Redis存储一些自己的键值对,但是我有多个模块使用同一个Redis实例,Redis存储session数据,我的问题很简单,如何创建或者指定一个数据库或者命名空间,保证存储数据的时候,不会发生冲突?

最佳答案:

方案一:存储不同模块的数据到不同的Resis实例中

最严格的隔离方式就是将每个模块的数据存储在独立的Redis实例中,例如独立的Redis进程。

方案二:存储不同模块的数据的单实例Redis中的不同数据库

一个Redis实例可以有多个数据库,你可以在配置文件中配置数据库的数量,默认有16个数据库。

数据库从0开始编号,通过select命令,你可以使用指定的数据库,在选择后,所有的子命令都将在指定的数据库上操作。

因此,你可以给每个模块分配独立的数据库,可以避免键冲突。

这种方案不支持Redis集群模式,集群模式只允许使用0数据库。
方案三:使用键前缀创建命名空间

如果你需要将所有的数据都存放到一个数据库,你仍然可以通过key前缀的方式,隐式创建命名空间。对于每个模块,所有的数据都有相同的key模式:ModuleName:KeyName,例如,这个模块的每一个键都有相同的前缀ModuleName

由于每个模块都有不同的名字,因此这些模块也就不会有键冲突了。

这种方案支持Redis集群模式。

参考:
How to namespace keys on redis to avoid name collisions?

最后修改:2021 年 12 月 14 日
如果觉得我的文章对你有用,请随意赞赏