一, 操作 Redis
Redis 是一个 key-value 存储系统, value 的类型包括 string(字符串),list(链表),set(集合),zset(有序集合),hash(哈希类型). 为了保证效率, 数据都是缓冲在内存中, 在处理大规模数据读写的场景下运用比较多.
备注: 默认 Redis 有 16 个数据库, 即 db0~db15, 一般存取数据如果不指定库的话, 默认都是存在 db0 中.
resid 提供 2 种连接方式: 直接连接, 连接池连接
1, 直接连接示例:
- 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 操作, 这样就达到了避免频繁的 Redis 连接创建和释放的目的, 从而提高性能.
Redis 模块采用 ConnectionPool 来管理对 Redis server 的所有连接.
2, 连接池连接示例:
- 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')
二, 操作 MongoDB
1,MongoDB 是一个非关系型数据库 (NoSQL), 介于关系数据库和非关系数据库之间的产品. 拥有很多优秀特性, 例如高性能, 高可用, 支持丰富的查询语句, 无需预定义数据模型和水平可伸缩等.
2,MongoDB 是非关系数据库当中功能最丰富, 最像关系数据库的. 它支持的数据结构非常松散, 是类似 JSON 的 bson 格式, 因此可以存储比较复杂的数据类型.
3,MongoDB 最大的特点是它支持的查询语言非常强大, 其语法有点类似于面向对象的查询语言, 几乎可以实现类似关系数据库单表查询的绝大部分功能, 而且还支持对数据建立索引.
4,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()
来源: https://www.cnblogs.com/ailiailan/p/12059962.html