我想使用redis存储一些自己的键值对,但是我的一些模块已经在使用它了。其中包括用于会话数据的Redis Express Session Store和用于Socket.io的Redis Adapter。所以我的问题很简单,如何创建或指定一个数据库/命名空间来存储我的自定义键而不发生键冲突?我正在使用Node-Redis驱动程序。
我想使用redis存储一些自己的键值对,但是我的一些模块已经在使用它了。其中包括用于会话数据的Redis Express Session Store和用于Socket.io的Redis Adapter。所以我的问题很简单,如何创建或指定一个数据库/命名空间来存储我的自定义键而不发生键冲突?我正在使用Node-Redis驱动程序。
解决方案1:将不同模块的数据存储在不同的Redis实例中
最严格的隔离方法是将每个模块的数据存储在一个单独的Redis实例中,即一个独立的Redis进程。
解决方案2:将不同模块的数据存储在单个Redis实例的不同数据库中
Redis实例可以拥有多个数据库,您可以在配置文件中配置数据库数量。默认情况下,有16个数据库。
这些数据库以从0开始的数字索引命名。使用select命令,您可以使用第i个数据库。选择后,任何后续命令都将在第i个数据库上操作。
因此,如果为每个模块分配一个独立的数据库,则可以避免名称冲突。
注意:此解决方案无法与Redis Cluster一起使用。 Redis Cluster只允许您使用第0个数据库。
解决方案3:使用键前缀创建命名空间
如果您必须将所有数据存储在一个单独的数据库中,则仍然可以使用键前缀来隐式地创建命名空间。对于每个模块,该模块的所有数据都应具有相同的键模式:ModuleName:KeyName
,即该模块的每个键都具有相同的前缀:ModuleName
。
由于每个模块都有不同的名称,因此这些模块之间不会产生任何名称冲突:
// Set keys for module1
SET module1:key1 value
SET module1:key2 value
// Set keys for module2
SET module2:key1 value
SET module2:key2 value
注意: 这个解决方案也适用于 Redis 集群
。
FT.CREATE
命令可以指定要索引的键的前缀。 - for_stack