Python redis操作實(shí)例分析【連接、管道、發(fā)布和訂閱等】
本文實(shí)例講述了Python redis操作。分享給大家供大家參考,具體如下:
一、redis
redis是一個(gè)key-value存儲(chǔ)系統(tǒng)。和Memcached類(lèi)似,它支持存儲(chǔ)的value類(lèi)型相對(duì)更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類(lèi)型)。這些數(shù)據(jù)類(lèi)型都支持push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎(chǔ)上,redis支持各種不同方式的排序。與memcached一樣,為了保證效率,數(shù)據(jù)都是緩存在內(nèi)存中。區(qū)別的是redis會(huì)周期性的把更新的數(shù)據(jù)寫(xiě)入磁盤(pán)或者把修改操作寫(xiě)入追加的記錄文件,并且在此基礎(chǔ)上實(shí)現(xiàn)了master-slave(主從)同步。
Redis 是一個(gè)高性能的key-value數(shù)據(jù)庫(kù)。 redis的出現(xiàn),很大程度補(bǔ)償了memcached這類(lèi)key/value存儲(chǔ)的不足,在部 分場(chǎng)合可以對(duì)關(guān)系數(shù)據(jù)庫(kù)起到很好的補(bǔ)充作用。它提供了Python,Ruby,Erlang,PHP客戶端,使用很方便,Redis支持主從同步。數(shù)據(jù)可以從主服務(wù)器向任意數(shù)量的從服務(wù)器上同步,從服務(wù)器可以是關(guān)聯(lián)其他從服務(wù)器的主服務(wù)器。這使得Redis可執(zhí)行單層樹(shù)復(fù)制。從盤(pán)可以有意無(wú)意的對(duì)數(shù)據(jù)進(jìn)行寫(xiě)操作。由于完全實(shí)現(xiàn)了發(fā)布/訂閱機(jī)制,使得從數(shù)據(jù)庫(kù)在任何地方同步樹(shù)時(shí),可訂閱一個(gè)頻道并接收主服務(wù)器完整的消息發(fā)布記錄。
二、python操作redis
1、連接方式
redis-py提供兩個(gè)類(lèi)Redis和StrictRedis用于實(shí)現(xiàn)Redis的命令,StrictRedis用于實(shí)現(xiàn)大部分官方的命令,并使用官方的語(yǔ)法和命令,Redis是StrictRedis的子類(lèi)
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import redis
r = redis.Redis(host='192.168.0.110', port=6379,db=0)
r.set('name', 'zhangsan') #添加
print (r.get('name')) #獲取
2、連接池
redis-py使用connection pool來(lái)管理對(duì)一個(gè)redis server的所有連接,避免每次建立、釋放連接的開(kāi)銷(xiāo)。默認(rèn),每個(gè)Redis實(shí)例都會(huì)維護(hù)一個(gè)自己的連接池??梢灾苯咏⒁粋€(gè)連接池,然后作為參數(shù)Redis,這樣就可以實(shí)現(xiàn)多個(gè)Redis實(shí)例共享一個(gè)連接池。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import redis
pool = redis.ConnectionPool(host='192.168.0.110', port=6379)
r = redis.Redis(connection_pool=pool)
r.set('name', 'zhangsan') #添加
print (r.get('name')) #獲取
3、操作
4、管道
redis-py默認(rèn)在執(zhí)行每次請(qǐng)求都會(huì)創(chuàng)建(連接池申請(qǐng)連接)和斷開(kāi)(歸還連接池)一次連接操作,如果想要在一次請(qǐng)求中指定多個(gè)命令,則可以使用pipline實(shí)現(xiàn)一次請(qǐng)求指定多個(gè)命令,并且默認(rèn)情況下一次pipline 是原子性操作。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import redis
pool = redis.ConnectionPool(host='192.168.0.110', port=6379)
r = redis.Redis(connection_pool=pool)
pipe = r.pipeline(transaction=True)
r.set('name', 'zhangsan')
r.set('name', 'lisi')
pipe.execute()
5、發(fā)布和訂閱
首先定義一個(gè)RedisHelper類(lèi),連接Redis,定義頻道為monitor,定義發(fā)布(publish)及訂閱(subscribe)方法。
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import redis
class RedisHelper(object):
def __init__(self):
self.__conn = redis.Redis(host='192.168.0.110',port=6379)#連接Redis
self.channel = 'monitor' #定義名稱
def publish(self,msg):#定義發(fā)布方法
self.__conn.publish(self.channel,msg)
return True
def subscribe(self):#定義訂閱方法
pub = self.__conn.pubsub()
pub.subscribe(self.channel)
pub.parse_response()
return pub
發(fā)布者
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#發(fā)布
from RedisHelper import RedisHelper
obj = RedisHelper()
obj.publish('hello')#發(fā)布
訂閱者
#!/usr/bin/env python # -*- coding:utf-8 -*- #訂閱 from RedisHelper import RedisHelper obj = RedisHelper() redis_sub = obj.subscribe()#調(diào)用訂閱方法 while True: msg= redis_sub.parse_response() print (msg)
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Python常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》、《Python編碼操作技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門(mén)與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
解決Django 在ForeignKey中出現(xiàn) non-nullable field錯(cuò)誤的問(wèn)題
今天小編就為大家分享一篇解決Django 在ForeignKey中出現(xiàn) non-nullable field錯(cuò)誤的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08
Pytorch自己加載單通道圖片用作數(shù)據(jù)集訓(xùn)練的實(shí)例
今天小編就為大家分享一篇Pytorch自己加載單通道圖片用作數(shù)據(jù)集訓(xùn)練的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01
分析Python中設(shè)計(jì)模式之Decorator裝飾器模式的要點(diǎn)
這篇文章主要介紹了Python中設(shè)計(jì)模式之Decorator裝飾器模式模式,文中詳細(xì)地講解了裝飾對(duì)象的相關(guān)加鎖問(wèn)題,需要的朋友可以參考下2016-03-03
Python高階函數(shù)之filter()函數(shù)代碼示例
這篇文章主要介紹了Python高階函數(shù)之filter()函數(shù)代碼示例,獲取了一個(gè)序列的時(shí)候,想要把一些內(nèi)容去掉,保留一部分內(nèi)容的時(shí)候可以使用高效的filter()函數(shù),需要的朋友可以參考下2023-07-07
Python處理函數(shù)調(diào)用超時(shí)的四種方法
在實(shí)際開(kāi)發(fā)過(guò)程中,我們可能會(huì)遇到一些場(chǎng)景,需要對(duì)函數(shù)的執(zhí)行時(shí)間進(jìn)行限制,例如,當(dāng)一個(gè)函數(shù)執(zhí)行時(shí)間過(guò)長(zhǎng)時(shí),可能會(huì)導(dǎo)致程序卡頓、資源占用過(guò)高,因此,在某些情況下,我們希望限制函數(shù)調(diào)用的最大時(shí)所以本文給大家介紹了Python處理函數(shù)調(diào)用超時(shí)的四種方法2025-04-04
Python實(shí)現(xiàn)繪制雙柱狀圖并顯示數(shù)值功能示例
這篇文章主要介紹了Python實(shí)現(xiàn)繪制雙柱狀圖并顯示數(shù)值功能,涉及Python數(shù)值運(yùn)算及基于matplotlib的圖形繪制相關(guān)操作技巧,需要的朋友可以參考下2018-06-06

