Redis中的命名空间?

rip*_*234 45 nosql redis

是否可以在Redis中创建名称空间?

根据我的发现,所有全局命令(count,delete all)都适用于所有对象.有没有办法创建子空间,以便这些命令在上下文中受到限制?

我不想为此目的设置不同的Redis服务器.

我假设答案是"否",并想知道为什么不实现这一点,因为它似乎是一个有用的功能,没有太多的开销.

Jim*_*nis 33

Redis服务器可以处理多个数据库......这些数据库已编号.我认为它默认提供32个; 您可以使用redis-cli shell脚本编制命令的-n选项以及连接参数的类似选项或在其连接对象上使用方法来访问它们.(在这种情况下是Python Redis模块的方法名称...我认为它的名称与其他库和接口类似."select()".select()

可以选择在Re​​dis服务器守护程序的配置文件中控制所需的单独数据库数量.我不知道上限会是什么,似乎没有办法动态改变它(换句话说,似乎你必须关闭并重启服务器以添加额外的数据库).此外,似乎没有将这些DB号与任何类型的名称相关联,也没有将单独的ACLS,甚至是不同的密码强加给它们.当然,Redis也是无架构的.

  • 命名空间不是数据库,数据库由数字(0到15)表示.命名空间用于添加前缀 (3认同)
  • @kalelc:由于术语“命名空间”未在 Redis 文档中定义,我认为您在此处对术语的应用并不比我的规范。我澄清了给定 Redis 服务器上的每个“数据库”都是一个独立的“命名空间”(相同的键不会冲突)。显然,您可以创建任意前缀并将它们视为“命名空间”——但这不是 Redis 中任何特别支持的功能;这只是使用它的约定。 (2认同)

Dan*_*Guo 8

如果您使用 Node,ioredis具有透明的键前缀,它的工作原理是让客户端在命令中的每个键前面添加给定的字符串。它的工作方式与 Ruby 的redis-namespace相同。这种客户端方法仍然将所有密钥放入同一个数据库中,但至少添加了一些结构,并且不必使用多个数据库或服务器。

var fooRedis = new Redis({ keyPrefix: 'foo:' });
fooRedis.set('bar', 'baz');  // Actually sends SET foo:bar baz
Run Code Online (Sandbox Code Playgroud)