管道
為什么使用管道?
Redis是一個TCP服務器,支持請求/響應協議。 在Redis中,請求通過以下步驟完成:
- 客戶端向服務器發送查詢,並從套接字讀取,通常以阻塞的方式,用於服務器響應。
- 服務器處理命令並將響應發送回客戶端。
Redis 管道技術可以在服務端未響應時,客戶端可以繼續向服務端發送請求,並最終一次性讀取所有服務端的響應。
redis-py
例如,redis-py默認在執行每次請求都會創建(連接池申請連接)和斷開(歸還連接池)一次連接操作,如果想要在一次請求中指定多個命令,則可以使用pipline實現一次請求指定多個命令,並且默認情況下一次pipline 是原子性操作。
#!/usr/bin/env python # -*- coding:utf-8 -*- import redis pool = redis.ConnectionPool(host='10.211.55.4', port=6379) r = redis.Redis(connection_pool=pool) # pipe = r.pipeline(transaction=False) pipe = r.pipeline(transaction=True) pipe.set('name', 'sb') pipe.set('sex', 'male') #前面兩個操作都成功才execute(),否則回滾 pipe.execute()
ps:默認的情況下,管道里執行的命令可以保證執行的原子性,執行pipe = r.pipeline(transaction=False)可以禁用這一特性。