中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中怎樣操作Redis庫

發布時間:2021-07-27 15:56:51 來源:億速云 閱讀:141 作者:Leah 欄目:大數據

今天就跟大家聊聊有關Python中怎樣操作Redis庫,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

Redis庫在互聯網應用的非常普遍,常常作為“緩存層”存在,因為相比MySQL來說它要快非常多,Redis是可以作為應用的唯一數據存儲庫而不需要MySQL的,但如果搭配MySQL使用,因為性能比MySQL快它常常作為Web應用服務的緩存層,使用時先訪問Redis,訪問不到再訪問MySQL,同時更新到Redis(下次就能訪問到這個緩存了)。

Redis主要支持5種數據結構:String: 字符串、Hash: 散列、List: 列表、Set: 集合、Sorted Set: 有序集合,個人非常喜歡Redis就是因為這些數據結構跟Python編程語言的數據容器真的好相似。

接下來我就用一個真實的文章網站怎樣使用Redis做下代碼演示,總結下各種數據結構的用法:

  1.  使用Hash存儲文章的(ID、標題)數據;

  2. 使用String存儲每個文章的訪問次數,可以每次加1計數;

  3. 使用List存儲每個用戶的訪問文章的歷史,按順序記錄;

  4. 使用Set存儲訪問網站的所有用戶ID的集合;

  5. 使用Sorted Set存儲網站的熱榜,排序分數就是權重;

引入redis包

如果沒有的話,可以用pip install redis安裝。

import redis
# 創建鏈接redis_conn = redis.Redis(    host='192.168.0.119',     port=6379)

1. 給網站新增幾篇文章

# 使用hash,類似map的形式# 存儲(Id、標題)數據for idx in range(101, 106):    title = f"this is {idx} article title"    redis_conn.hset(      "articles",        str(idx),        title )

2. 給用戶展示文章列表

# 存儲在hash,用hgetall展示所有的文章列表articles = redis_conn.hgetall("articles")for id, title in articles.items():    # 默認返回bytes類型    print(id, title)

看下結果吧:

101 this is 101 article title102 this is 102 article title103 this is 103 article title104 this is 104 article title105 this is 105 article title

也可以查看單個文章:

# 展示單個文章的標題redis_conn.hget("articles", "105")

結果為:

b'this is 105 article title'

3. 用戶訪問文章則產生行為記錄

# 這個函數用到了好多個數據結構def user_visit(uid, article_id):    """產生了行為:uid訪問了article_id"""    # 1. String結構,文章的訪問次數加1    redis_conn.incr(      f"article_counter_{article_id}")    # 2. List結構,記錄uid的訪問列表    redis_conn.lpush(      f"user_visit_{uid}", str(article_id))    # 3. Set結構,記錄uid的全站集合    redis_conn.sadd(      f"all_visit_uids", str(uid))    # 4. SortedSet結構,文章的熱度加1    redis_conn.zincrby(      "article_hots", 1, str(article_id))

模擬一下幾個用戶的訪問:

# 模擬3個用戶的訪問記錄user_visit("uid_01", "101")user_visit("uid_01", "102")user_visit("uid_01", "103")
user_visit("uid_02", "102")user_visit("uid_02", "103")user_visit("uid_02", "104")
user_visit("uid_03", "103")user_visit("uid_03", "104")user_visit("uid_03", "105")

4. 查詢文章的訪問次數

因為存儲在String結構,直接get即可

redis_conn.get(f"article_counter_104")返回:2
redis_conn.get(f"article_counter_105")返回:1

5. 展示一個用戶的訪問歷史

因為存儲在List,可以用lrange分頁查詢

redis_conn.lrange(  "user_visit_uid_01", 0, -1)返回:[b'103', b'102', b'101']
redis_conn.lrange(  "user_visit_uid_03", 0, -1)返回:[b'105', b'104', b'103']

6. 展示訪問全站的用戶集合

因為存儲在Set,可以用smembers取出所有內容

redis_conn.smembers("all_visit_uids")返回:{b'uid_01', b'uid_02', b'uid_03'}

7. 展示文章熱榜以及熱度

redis_conn.zrange(    "article_hots",      0, -1,      withscores=True,      desc=True)     返回如下,其實就是每個文章ID和熱度值:[(b'103', 3.0), (b'104', 2.0), (b'102', 2.0), (b'105', 1.0), (b'101', 1.0)]

以上就是我使用Python對Redis的操作的一個總結,其中string/list/set/hash大家用的會比較多sorted set用的比較少,但當你遇到熱榜、帶權重列表等場景時用sorted set會很方便。

代碼在github:

https://github.com/peiss/ant-learn-python

看完上述內容,你們對Python中怎樣操作Redis庫有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

彭山县| 深州市| 河曲县| 修文县| 松阳县| 合江县| 安丘市| 韶关市| 云林县| 遂川县| 绿春县| 长阳| 洞头县| 镇坪县| 满洲里市| 大埔县| 云南省| 青龙| 利辛县| 余庆县| 北碚区| 文山县| 定边县| 冷水江市| 曲水县| 从江县| 贵港市| 青州市| 凌海市| 中阳县| 密云县| 静海县| 泸州市| 讷河市| 蓬安县| 潜山县| 社会| 汉川市| 保亭| 金寨县| 峨眉山市|