Python集成Redis与MongoDB数据库实战指南
本文详细介绍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数据库的主要方法,希望能为读者提供实质性的帮助。如有任何疑问,欢迎留言交流,作者会及时回复。同时,非常感谢大家对本站的支持! 如果您觉得本文对您有帮助,欢迎转载,但请注明出处,谢谢!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













