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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python使用redis在实际场景使用_用python操作redis及redis的一些应用场景

發(fā)布時(shí)間:2025/3/20 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python使用redis在实际场景使用_用python操作redis及redis的一些应用场景 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

redis安裝

網(wǎng)上很多windows、Linux的安裝教程,可根據(jù)自己的需要尋找對(duì)應(yīng)教程安裝

redis-py安裝

pip install redis

redis可視化工具

API的使用

redis-py 的API的使用可以分類為:

連接方式

直接連接

連接池

操作

String 操作

Hash 操作

List 操作

Set 操作

Sort Set 操作

管道

發(fā)布訂閱

連接方式

操作模式

redis-py提供兩個(gè)類Redis和StrictRedis用于實(shí)現(xiàn)Redis的命令,StrictRedis用于實(shí)現(xiàn)大部分官方的命令,并使用官方的語法和命令,Redis是StrictRedis的子類,用于向后兼容舊版本的redis-py。官方推薦使用StrictRedis方法

import redis

r = redis.StrictRedis(host='127.0.0.1', port=6379, db=0) r.set('name', 'longofo')

r.get('name')

連接池

redis-py使用connection pool來管理對(duì)一個(gè)redis server的所有連接,避免每次建立、釋放連接的開銷。默認(rèn),每個(gè)Redis實(shí)例都會(huì)維護(hù)一個(gè)自己的連接池。可以直接建立一個(gè)連接池,然后作為參數(shù)Redis,這樣就可以實(shí)現(xiàn)多個(gè)Redis實(shí)例共享一個(gè)連接池

import redis

pool = redis.ConnectionPool(host='127.0.0.1', port=6379,db=0)

r = redis.StrictRedis(connection_pool=pool)

r.set('wu', 'longe')

print r.get('wu')

操作

應(yīng)用場(chǎng)景

緩存

作為Key-Value形態(tài)的內(nèi)存數(shù)據(jù)庫,Redis 最先會(huì)被想到的應(yīng)用場(chǎng)景便是作為數(shù)據(jù)緩存。而使用 Redis 緩存數(shù)據(jù)非常簡(jiǎn)單,只需要通過string類型將序列化后的對(duì)象存起來即可,不過也有一些需要注意的地方:

必須保證不同對(duì)象的 key 不會(huì)重復(fù),并且使 key 盡量短,一般使用類名(表名)加主鍵拼接而成。

選擇一個(gè)優(yōu)秀的序列化方式也很重要,目的是提高序列化的效率和減少內(nèi)存占用。

緩存內(nèi)容與數(shù)據(jù)庫的一致性,這里一般有兩種做法:只在數(shù)據(jù)庫查詢后將對(duì)象放入緩存,如果對(duì)象發(fā)生了修改或刪除操作,直接清除對(duì)應(yīng)緩存(或設(shè)為過期)。

在數(shù)據(jù)庫新增和查詢后將對(duì)象放入緩存,修改后更新緩存,刪除后清除對(duì)應(yīng)緩存(或設(shè)為過期)。

消息隊(duì)列

Redis 中l(wèi)ist的數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)是雙向鏈表,所以可以非常便捷的應(yīng)用于消息隊(duì)列(生產(chǎn)者 / 消費(fèi)者模型)。消息的生產(chǎn)者只需要通過lpush將消息放入 list,消費(fèi)者便可以通過rpop取出該消息,并且可以保證消息的有序性。如果需要實(shí)現(xiàn)帶有優(yōu)先級(jí)的消息隊(duì)列也可以選擇sorted set。而pub/sub功能也可以用作發(fā)布者 / 訂閱者模型的消息。無論使用何種方式,由于 Redis 擁有持久化功能,也不需要擔(dān)心由于服務(wù)器故障導(dǎo)致消息丟失的情況。

時(shí)間軸(Timeline)

list作為雙向鏈表,不光可以作為隊(duì)列使用。如果將它用作棧便可以成為一個(gè)公用的時(shí)間軸。當(dāng)用戶發(fā)完微博后,都通過lpush將它存放在一個(gè) key 為L(zhǎng)ATEST_WEIBO的list中,之后便可以通過lrange取出當(dāng)前最新的微博。

排行榜

使用sorted set和一個(gè)計(jì)算熱度的算法便可以輕松打造一個(gè)熱度排行榜,zrevrangebyscore可以得到以分?jǐn)?shù)倒序排列的序列,zrank可以得到一個(gè)成員在該排行榜的位置(是分?jǐn)?shù)正序排列時(shí)的位置,如果要獲取倒序排列時(shí)的位置需要用zcard-zrank)。

計(jì)數(shù)器

計(jì)數(shù)功能應(yīng)該是最適合 Redis 的使用場(chǎng)景之一了,因?yàn)樗哳l率讀寫的特征可以完全發(fā)揮 Redis 作為內(nèi)存數(shù)據(jù)庫的高效。在 Redis 的數(shù)據(jù)結(jié)構(gòu)中,string、hash和sorted set都提供了incr方法用于原子性的自增操作,下面舉例說明一下它們各自的使用場(chǎng)景:

如果應(yīng)用需要顯示每天的注冊(cè)用戶數(shù),便可以使用string作為計(jì)數(shù)器,設(shè)定一個(gè)名為REGISTERED_COUNT_TODAY的 key,并在初始化時(shí)給它設(shè)置一個(gè)到凌晨 0 點(diǎn)的過期時(shí)間,每當(dāng)用戶注冊(cè)成功后便使用incr命令使該 key 增長(zhǎng) 1,同時(shí)當(dāng)每天凌晨 0 點(diǎn)后,這個(gè)計(jì)數(shù)器都會(huì)因?yàn)?key 過期使值清零。

每條微博都有點(diǎn)贊數(shù)、評(píng)論數(shù)、轉(zhuǎn)發(fā)數(shù)和瀏覽數(shù)四條屬性,這時(shí)用hash進(jìn)行計(jì)數(shù)會(huì)更好,將該計(jì)數(shù)器的 key 設(shè)為weibo:weibo_id,hash的 field 為like_number、comment_number、forward_number和view_number,在對(duì)應(yīng)操作后通過hincrby使hash 中的 field 自增。

如果應(yīng)用有一個(gè)發(fā)帖排行榜的功能,便選擇sorted set吧,將集合的 key 設(shè)為POST_RANK。當(dāng)用戶發(fā)帖后,使用zincrby將該用戶 id 的 score 增長(zhǎng) 1。sorted set會(huì)重新進(jìn)行排序,用戶所在排行榜的位置也就會(huì)得到實(shí)時(shí)的更新。

好友關(guān)系

這個(gè)場(chǎng)景最開始是是一篇介紹微博 Redis 應(yīng)用的 PPT 中看到的,其中提到微博的 Redis 主要是用在在計(jì)數(shù)和好友關(guān)系兩方面上,當(dāng)時(shí)對(duì)好友關(guān)系方面的用法不太了解,后來看到《Redis 設(shè)計(jì)與實(shí)現(xiàn)》中介紹到作者最開始去使用 Redis 便是希望能通過set解決傳統(tǒng)數(shù)據(jù)庫無法快速計(jì)算集合中交集這個(gè)功能。后來聯(lián)想到微博當(dāng)前的業(yè)務(wù)場(chǎng)景,確實(shí)能夠以這種方式實(shí)現(xiàn),所以姑且猜測(cè)一下:

對(duì)于一個(gè)用戶 A,將它的關(guān)注和粉絲的用戶 id 都存放在兩個(gè) set 中:

A:follow:存放 A 所有關(guān)注的用戶 id

A:follower:存放 A 所有粉絲的用戶 id

那么通過sinter命令便可以根據(jù)A:follow和A:follower的交集得到與 A 互相關(guān)注的用戶。當(dāng) A 進(jìn)入另一個(gè)用戶 B 的主頁后,A:follow和B:follow的交集便是 A 和 B 的共同專注,A:follow和B:follower的交集便是 A 關(guān)注的人也關(guān)注了 B。

分布式鎖

在 Redis 2.6.12 版本開始,string的set命令增加了三個(gè)參數(shù):

EX:設(shè)置鍵的過期時(shí)間(單位為秒)

PX:設(shè)置鍵的過期時(shí)間(單位為毫秒)

NX?|?XX:當(dāng)設(shè)置為NX時(shí),僅當(dāng) key 存在時(shí)才進(jìn)行操作,設(shè)置為XX時(shí),僅當(dāng) key 不存在才會(huì)進(jìn)行操作

由于這個(gè)操作是原子性的,可以簡(jiǎn)單地以此實(shí)現(xiàn)一個(gè)分布式的鎖,例如:

set key "lock" EX 1 XX

如果這個(gè)操作返回false,說明 key 的添加不成功,也就是當(dāng)前有人在占用這把鎖。而如果返回true,則說明得了鎖,便可以繼續(xù)進(jìn)行操作,并且在操作后通過del命令釋放掉鎖。并且即使程序因?yàn)槟承┰虿]有釋放鎖,由于設(shè)置了過期時(shí)間,該鎖也會(huì)在 1 秒后自動(dòng)釋放,不會(huì)影響到其他程序的運(yùn)行。

倒排索引

倒排索引是構(gòu)造搜索功能的最常見方式,在 Redis 中也可以通過set進(jìn)行建立倒排索引,這里以簡(jiǎn)單的拼音 + 前綴搜索城市功能舉例:

假設(shè)一個(gè)城市北京,通過拼音詞庫將北京轉(zhuǎn)為beijing,再通過前綴分詞將這兩個(gè)詞分為若干個(gè)前綴索引,有:北、北京、b、be…beijin和beijing。將這些索引分別作為set的 key(例如:index:北)并存儲(chǔ)北京的 id,倒排索引便建立好了。接下來只需要在搜索時(shí)通過關(guān)鍵詞取出對(duì)應(yīng)的set并得到其中的 id 即可。

總結(jié)

以上是生活随笔為你收集整理的python使用redis在实际场景使用_用python操作redis及redis的一些应用场景的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。