是否可以在Redis中创建名称空间?
根据我的发现,所有全局命令(count,delete all)都适用于所有对象。有没有办法创建子空间,以便这些命令在上下文中受到限制?
我不想为此目的设置不同的Redis服务器。
我认为答案是" No"并且想知道为什么没有实现这个,因为它似乎是一个有用的功能而没有太多的开销。
答案 0 :(得分:33)
Redis服务器可以处理多个数据库......编号。我认为它默认提供32个;您可以使用 redis-cli shell脚本编制命令的 -n 选项以及类似的连接参数选项或使用 "select()"
来访问它们方法对其连接对象。 (在这种情况下, .select()
是Python Redis模块的方法名称...我认为它的名称与其他库和接口类似。
可以选择在Redis服务器守护程序的配置文件中控制所需的单独数据库数量。我不知道上限会是什么,并且似乎没有动态改变的方式(换句话说,你似乎必须关闭并重新启动服务器才能添加额外的DB)。此外,似乎没有将这些DB号与任何类型的名称相关联,也没有对它们施加单独的ACLS,甚至不同的密码。当然,Redis也是无模式的。
答案 1 :(得分:1)
如果您使用Ruby,您可以查看这些宝石:
https://github.com/resque/redis-namespace
https://github.com/jodosha/redis-store
答案 2 :(得分:1)
如果您正在使用Node,则ioredis具有transparent key prefixing,其作用是让客户端在命令中的每个键之前添加给定的字符串。它的工作方式与Ruby的redis-namespace相同。这种客户端方法仍然将您所有的密钥都放在同一个数据库中,但是至少您要添加一些结构,并且不必使用多个数据库或服务器。
var fooRedis = new Redis({ keyPrefix: 'foo:' });
fooRedis.set('bar', 'baz'); // Actually sends SET foo:bar baz