Python集成Redis与MongoDB数据库实战指南

落日邮差
落日邮差
发布时间:2026-10-13 | 5人浏览过
原创

本文详细介绍Python中操作Redis和MongoDB数据库的方法。涵盖Redis的直接连接与连接池模式,解析其内存存储机制及性能优势;深入讲解MongoDB的特性、适用场景及与MySQL的互补使用策略。通过具体代码示例,展示如何建立连接、执行数据插入、查询及删除操作,帮助开发者高效管理非关系型数据。

Python操作Redis数据库

一、操作Redis

Redis是一个基于键值对(key-value)的存储系统,其值类型丰富,包括字符串(string)、列表(list)、集合(set)、有序集合(zset)以及哈希类型(hash)。为了追求极致的读写效率,Redis将数据主要缓冲在内存中,因此在处理大规模数据的高频读写场景中表现尤为出色。

需要注意的是,Redis默认配置了16个数据库,编号从db0到db15。通常情况下,如果存取数据时未明确指定数据库索引,数据默认会存储在db0中。

在Python中操作Redis时,主要提供两种连接方式:直接连接和使用连接池连接。

以下是直接连接的示例代码:


import redis             # pip3 install redis
# 创建redis连接对象
def init_redis():
  redis_config = {
    "host": "172.29.0.17",
    "port": 6379
  }
  global Redis_Conn
  Redis_Conn = redis.Redis(**redis_config)
  # Redis_Conn = redis.Redis(host='172.29.0.17', port=6379, db=1)  # 指定数据库
  
# 插入值,Value为str类型为例
def insert_redis_key_value(key,value):  
  Redis_Conn.set("name","Zhu")
# 获取值,Value为str类型为例
def get_redis_key_value(key):
  global Redis_Conn
  print("redis key value: %s" % Redis_Conn.get(key))

连接池的核心原理在于预先创建多个数据库连接实例。当执行Redis操作时,程序直接从池中获取已存在的连接,操作完成后不立即释放,而是归还给池以供后续使用。这种机制有效避免了频繁创建和销毁连接带来的开销,从而显著提升系统性能。

Redis模块内部通过ConnectionPool类来统一管理对Redis服务器的所有连接资源。

以下是使用连接池连接的示例代码:


import redis
pool = redis.ConnectionPool(host='172.29.0.17', port=6379,db=1) 
red = redis.Redis(connection_pool=pool) 
red.set('key1', 'value1') 
red.set('key2', 'value2')

Python操作MongoDB数据库

二、操作MongoDB

MongoDB是一款非关系型数据库(NoSQL),它介于传统关系型数据库与非关系型数据库之间,具备多项优异特性,如高性能、高可用性、支持丰富的查询语句、无需预定义数据模型以及支持水平扩展等。

在各类非关系型数据库中,MongoDB的功能最为丰富,其设计最接近关系型数据库。它支持的数据结构非常松散,采用类似JSON的BSON格式,因此能够存储结构复杂且多变的数据类型。

MongoDB最显著的特点之一是其强大的查询语言,其语法风格类似于面向对象查询语言。它几乎实现了关系数据库单表查询的大部分功能,并且支持对数据进行索引建立,从而优化查询效率。

MongoDB的适用场景主要包括:数据重要性相对较低(如通知、推送信息)、数据表结构频繁变更、数据量极其庞大、并发请求特别高,以及数据结构具有特殊性(例如存储地图位置坐标等)。

在上述特定场景下使用MongoDB,而在其他常规场景下继续使用MySQL,两者组合使用可以达到系统效率的最大化。


import pymongo            # pip3 install pymongo
# 创建mongo连接对象
def init_mongo():
  global Mongo_Conn
  Mongo_Conn = pymongo.MongoClient(host="172.29.0.14", port=27017)
  admin = Mongo_Conn.admin
  admin.authenticate('root', '')
# 数据操作  
def get_mongo_key_value(token_id):
  db = Mongo_Conn['device_center']             # 创建数据库"device_center",命名为"db"
  col = db['token_info']                  # 创建集合"token_info",命名为"col"
  mydict = {"name": "Zhuyu", "alexa": "160", "sex": "male"}
  col.insert_one(mydict)                  # 插入一条数据
  mylist = [
  {"name": "ating", "alexa": "168", "sex": "male"},
  {"name": "Liang", "alexa": "165", "sex": "female"},
  {"name": "Libai", "alexa": "156", "sex": "female"}
  ]
  col.insert_one(mylist)                    # 插入一组数据
  query1 = col.find_one()                # 查询一条数据
  query2 = col.find({},{"alexa": 1})           # 查询指定字段的数据
  query3 = col.find()                  # 查询集合中的所有数据
  query4 = col.find({"name": "ating"})          # 根据指定条件查询
  myquery1 = { "alexa": "160" }
  newvalues1 = { "$set": { "alexa": "161" } }
  col.update_one(myquery1, newvalues1)           # 修改匹配到的第一条记录
  myquery2 = { "name": { "$regex": "^L" } }
  newvalues2 = { "$set": { "alexa": "123" } }
  col.update_many(myquery2, newvalues2)          # 修改所有匹配到的记录,将查找所有以 L 开头的 name 字段,并将匹配到所有记录的 alexa 字段修改为 123
  query5 = col.find().sort("alexa")           # sort() 方法第一个参数为要排序的字段,第二个字段指定排序规则,1 为升序,-1 为降序,默认为升序
  for x in query5 :
    print(x)
  # 结果
  {"name": "Libai", "alexa": "156", "sex": "female"}
  {"name": "Zhuyu", "alexa": "160", "sex": "male"}
  {"name": "Liang", "alexa": "165", "sex": "female"}
  {"name": "ating", "alexa": "168", "sex": "male"}
  query6 = col.find().sort("alexa",-1)          # 降序
  for x in query6:
    print(x)
  # 结果
  {"name": "ating", "alexa": "168", "sex": "male"}
  {"name": "Liang", "alexa": "165", "sex": "female"}
  {"name": "Zhuyu", "alexa": "160", "sex": "male"}
  {"name": "Libai", "alexa": "156", "sex": "female"}
  myquery3 = { "name": "Libai" }             # 删除一条数据
  mycol.delete_one(myquery3)
  myquery4 = { "name": {"$regex": "^L"} }        # 删除多个数据
  x1 = mycol.delete_many(myquery4)
  print(x1.deleted_count, "个文档已删除")        # 2个文档已删除
  x2 = mycol.delete_many({})               # 删除集合中的所有数据
  print(x2.deleted_count, "个文档已删除")        # 4个文档已删除
# 断开mongo连接  
def disconnect_mongo():
  Mongo_Conn.disconnect()

总结

以上内容介绍了Python操作Redis和MongoDB数据库的主要方法,希望能为读者提供实质性的帮助。如有任何疑问,欢迎留言交流,作者会及时回复。同时,非常感谢大家对本站的支持! 如果您觉得本文对您有帮助,欢迎转载,但请注明出处,谢谢!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表