python如何选择redis数据库?

选择redis数据库,select 1,select 2

但是在python中是怎么操作的?我只知道r = redis.Redis(host='localhost',port=6379,db=0)

这个db如何切换,难道每次都要redis.Redis(host='localhost',port=6379,db=1),redis.Redis(host='localhost',port=6379,db=2)吗

阅读 13.9k
2 个回答

是的,目前只能这样。
原因是redis-py为了保证Redis实例的线程安全,没有实现SELECT指令

Redis 客户端实例可以安全地在线程间共享。从内部实现来说,只有在命令执行时才获取连接实例,完成后直接返回连接池,命令永不修改客户端实例的状态。但是,有一点需要注意:SELECT 命令。SELECT 命令允许切换当前连接使用的数据库。新的数据库保持被选中状态,直到选中另一个数据库或连接关闭。这会导致在返回连接池时,连接可能指定了别的数据库。因此,redis-py 没有在客户端实例中实现 SELECT 命令。如果要在同一个应用中使用多个 Redis 数据库,应该给第一个数据库创建独立的客户端实例(可能也需要独立的连接池)。

参考

  1. 官方文档-线程安全
  2. 中文文档-线程安全

程序是死的,但规则是人定的,官网不让这么做,并不是说不能实现,是会造成数据库指向的错误。其实你在不怕这种错误的情况下,自己去看看redis模块的各种方法源码,在方法定义的地方自己加上一个select方法就可以了,不忘了给Redis类一个current_db属性来标记当前数据库。当然我没试过,只是提供一种思路。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题