日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python redis订阅_Python 学习笔记 - Redis

發布時間:2025/3/15 python 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。