python redis订阅_Python 学习笔记 - Redis
Redis 和Memcached類似 也是一個開源的內存存儲系統,存儲格式也是通過鍵值對的方式。不過和memcached比起來,memcached的value只支持字符串,而redis支持字符串,列表,集合,hash等等;這些數據類型都支持push/pop,add/remove等操作,而且都是原子性的,也就是類似數據庫的事物特征一樣,所有的操作要么全部完成,要么全部失敗,然后回滾到之前的狀態。
現在來看看他的簡單使用和發布訂閱的功能。
服務器安裝[root@sydnagios?~]#?wget?http://download.redis.io/releases/redis-3.0.6.tar.gz
[root@sydnagios?~]#?tar?xzf?redis-3.0.6.tar.gz
[root@sydnagios?~]#?cd?redis-3.0.6/
[root@sydnagios?redis-3.0.6]#?make
裝好的界面如下,使用默認的配置文件,他的訪問端口是6379make[1]:?Leaving?directory?`/root/redis-3.0.6/src'
[root@sydnagios?redis-3.0.6]#?src/redis-server
24344:C?07?Nov?10:40:21.763?#?Warning:?no?config?file?specified,?using?the?default?confif
24344:M?07?Nov?10:40:21.764?*?Increased?maximum?number?of?open?files?to?10032?(it?was?or.
_._
_.-``__?''-._
_.-``????`.??`_.??''-._???????????Redis?3.0.6?(00000000/0)?64?bit
.-``?.-```.??```\/????_.,_?''-._
(????'??????,???????.-`??|?`,????)?????Running?in?standalone?mode
|`-._`-...-`?__...-.``-._|'`?_.-'|?????Port:?6379
|????`-._???`._????/?????_.-'????|?????PID:?24344
`-._????`-._??`-./??_.-'????_.-'
|`-._`-._????`-.__.-'????_.-'_.-'|
|????`-._`-._????????_.-'_.-'????|???????????http://redis.io
`-._????`-._`-.__.-'_.-'????_.-'
|`-._`-._????`-.__.-'????_.-'_.-'|
|????`-._`-._????????_.-'_.-'????|
`-._????`-._`-.__.-'_.-'????_.-'
`-._????`-.__.-'????_.-'
`-._????????_.-'
`-.__.-'
24344:M?07?Nov?10:40:21.766?#?WARNING:?The?TCP?backlog?setting?of?511?cannot?be?enforced.
24344:M?07?Nov?10:40:21.766?#?Server?started,?Redis?version?3.0.6
24344:M?07?Nov?10:40:21.766?#?WARNING?overcommit_memory?is?set?to?0!?Background?save?may.
24344:M?07?Nov?10:40:21.766?#?WARNING?you?have?Transparent?Huge?Pages?(THP)?support?enab.
24344:M?07?Nov?10:40:21.766?*?The?server?is?now?ready?to?accept?connections?on?port?6379
然后別忘記打開防火墻端口[root@sydnagios?~]#?firewall-cmd?--add-port=6379/tcp?--permanent
success
[root@sydnagios?~]#?systemctl?restart?firewalld
接下來用同一個目錄下的客戶端程序測試一下,成功設置和獲取數據[root@sydnagios?redis-3.0.6]#?src/redis-cli
127.0.0.1:6379>?set?foo?bar
OK
127.0.0.1:6379>?get?foo
"bar"
127.0.0.1:6379>
現在看看Python下如何調用。
首先安裝redis模塊C:\WINDOWS\system32>pip?install?redis
Collecting?redis
Using?cached?redis-2.10.5-py2.py3-none-any.whl
Installing?collected?packages:?redis
Successfully?installed?redis-2.10.5
第一個例子:import?redis
r=redis.Redis(host='sydnagios',port=6379)
r.set('name','John')
print(r.get('name'))
-------
b'John'
除了直接連接 也可以通過連接池連接,默認每個redis實例有自己的連接池,通過這種方式,可以多個實例共享一個連接池import?redis
pool=redis.ConnectionPool(host='sydnagios',port=6379)
r=redis.Redis(connection_pool=pool)
print(r.get('name'))
redis和memcached比起來,因為他支持多種數據結構,因此對應的操作函數也很多,幾乎是memcached的10倍
批量設置,批量獲取pool=redis.ConnectionPool(host='sydnagios',port=6379)
r=redis.Redis(connection_pool=pool)
r.mset(name='kevin',age=14)
print(r.mget('name','age'))
-----------
[b'kevin',?b'14']
自增import?redis
pool=redis.ConnectionPool(host='sydnagios',port=6379)
r=redis.Redis(connection_pool=pool)
r.incrby('age',10)
print(r.get('age'))
-------
b'24'
刪除import??redis
r=redis.Redis(host='sydnagios',port=6379)
r.delete('set1')
Hash批量操作import?redis
pool=redis.ConnectionPool(host='sydnagios',port=6379)
r=redis.Redis(connection_pool=pool)
r.hmset('computer',{'Macbook':20000,'Surface3':5000,'iPhone7':9000})
print(r.hmget('computer','Macbook'))
--------
[b'20000']
list操作import??redis
r=redis.Redis(host='sydnagios',port=6379)
r.lpush('list1','apple')
r.lpush('list1','pear')
print(r.llen('list1'))
print(r.lpop('list1'))
print(r.llen('list1'))
------
2
b'pear'
1
set操作,集合的元素不可以重復import??redis
r=redis.Redis(host='sydnagios',port=6379)
r.sadd('set1','orange')
r.sadd('set1','mango')
print(r.scard('set1'))
print(r.smembers('set1'))
---------
2
{b'mango',?b'orange'}
管道
默認redis-py在執行一次操作請求的時候會自動連接,然后斷開;我們可以通過管道,一次性傳入多條操作然后執行。#?!/usr/bin/env?python
#?-*-?coding:utf-8?-*-
import?redis
pool?=?redis.ConnectionPool(host='sydnagios',?port=6379)
r?=?redis.Redis(connection_pool=pool)
#?pipe?=?r.pipeline(transaction=False)
pipe?=?r.pipeline(transaction=True)
r.set('name',?'alex')
r.set('age',?16)
pipe.execute()
因為redis的函數實在太多 這里就不一一贅述了。
現在來看一個redis的使用場景,發布和訂閱。
簡單的說,發布者可以對一個頻道發布數據,然后凡是訂閱了這個頻道的人都可以收到信息。
s3.pyimport?redis
class?RedisHelper:
def?__init__(self):
self.__conn?=?redis.Redis(host='sydnagios')
def?publish(self,?msg,?chan):
self.__conn.publish(chan,?msg)
return?True
def?subscribe(self,?chan):
pub?=?self.__conn.pubsub()
pub.subscribe(chan)
pub.parse_response()
return?pub
s4.py(訂閱者)import?s3
obj?=?s3.RedisHelper()
data?=?obj.subscribe('fm111.7')
print(data.parse_response())
s5.py(發布者)import?s3
obj?=?s3.RedisHelper()
obj.publish('alex?db',?'fm111.7')
先執行訂閱者的代碼,進入等待狀態,然后執行發布者的程序,對指定的channel發送數據‘alex db’,訂閱者一方會收到以下數據[b'message',?b'fm111.7',?b'alex?db']
總結
以上是生活随笔為你收集整理的python redis订阅_Python 学习笔记 - Redis的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 京东白条支付,京东网银钱
- 下一篇: websocket python爬虫_p