一、操作redis redis是一個key-value存儲系統,value的類型包括string(字元串),list(鏈表),set(集合),zset(有序集合),hash(哈希類型)。為了保證效率,數據都是緩衝在記憶體中,在處理大規模數據讀寫的場景下運用比較多。 備註:預設redis有16個資料庫, ...
一、操作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()