python redis模塊詳解

来源:https://www.cnblogs.com/WebLinuxStudy/archive/2019/12/09/12013945.html
-Advertisement-
Play Games

這篇文章主要介紹redis的使用。 簡單介紹下redis,一個高性能key-value的存儲系統,支持存儲的類型有string、list、set、zset和hash。在處理大規模數據讀寫的場景下運用比較多。 1.連接Redis資料庫: 1)直接連接 2)連接池連接 連接池的原理是, 通過預先創建多個 ...


這篇文章主要介紹redis的使用。

簡單介紹下redis,一個高性能key-value的存儲系統,支持存儲的類型有string、list、set、zset和hash。在處理大規模數據讀寫的場景下運用比較多。

 

1.連接Redis資料庫:

1)直接連接

import redis

red = redis.Redis(host='localhost',port=6379,db=1)

 

2)連接池連接

連接池的原理是, 通過預先創建多個連接, 當進行redis操作時, 直接獲取已經創建的連接進行操作, 而且操作完成後, 不會釋放, 用於後續的其他redis操作,這樣就達到了避免頻繁的redis連接創建和釋放的目的, 從而提高性能。redis模塊採用ConnectionPool來管理對redis server的所有連接。

複製代碼
import redis

pool = redis.ConnectionPool(host='localhost', port=6379,db=1)
red = redis.Redis(connection_pool=pool)
red.set('key1', 'value1')
red.set('key2', 'value2')
複製代碼

 

2.String類型存取:

set(self, name, value, ex=None, px=None, nx=False, xx=False)

複製代碼
#在Redis中設置值,預設不存在則創建,存在則修改
red.set('key', 'value')
#參數:
#     set(name, value, ex=None, px=None, nx=False, xx=False)
#     ex,過期時間(秒)
#     px,過期時間(毫秒)
#     nx,如果設置為True,則只有key不存在時,當前set操作才執行,同#setnx(key, value)
#     xx,如果設置為True,則只有key存在時,當前set操作才執行

setex(self, name, value, time) #設置過期時間(秒) psetex(self, name, time_ms, value) #設置過期時間(豪秒)
複製代碼

mset(self, *args, **kwargs)

#批量設置值
red.mget({"key1":'value1', "key2":'value2'})

get(self, name)

#獲取某個key的值
red.get('key1')

mget(self, keys, *args)

#批量獲取
red.mget("key1","key1")

strlen(self, name)

#返回key對應值的位元組長度(一個漢字3個位元組)
red.strlen("key")

append(name, value)

#在name對應的值後面追加內容
red.set("key","value")
print(r.get("key"))    #輸出:'value'
r.append("key","one")
print(r.get("key"))    #輸出:'valueone'

 

3.Hash類型:一個name對應一個dic字典來存儲。

hset(self, name, key, value)

#name對應的hash中設置一個鍵值對(不存在,則創建,否則,修改)
red.hset("name","key","value")

hget(self, name, key)

red.hset("name","key","value")
#在name對應的hash中根據key獲取value
print(red.hget("name","key"))#輸出:'value'

hgetall(self, name)

#獲取name所有鍵值對
red.hgetall("name")

hmset(self, name, mapping)

#在name對應的hash中批量設置鍵值對,mapping:字典
dic={"key1":"aa","key2":"bb"}
red.hmset("name",dic)
print(red.hget("name","key2"))#輸出:bb

hmget(self, name, keys, *args)

#在name對應的hash中批量獲取鍵所對應的值
dic={"key1":"aa","key2":"bb"}
red.hmset("name",dic)
print(red.hmget("name","key1","key2"))#輸出:['aa', 'bb']

hlen(self, name)

#獲取hash鍵值對的個數
print(red.hlen("name"))#輸出:2

hkeys(self, name)

#獲取hash中所有key
red.hkeys("name")

hvals(self, name)

#獲取hash中所有value
red.hvals("name")

hexists(self, name, key)

#檢查name對應的hash是否存在當前傳入的key
print(red.hexists("name","key1"))#輸出:Ture

hdel(self, name, *keys)

#刪除指定name對應的key所在的鍵值對,刪除成功返回1,失敗返回0
print(red.hdel("name","key1"))#輸出:1

hincrby(self, name, key, amount=1)

#與hash中key對應的值相加,不存在則創建key=amount(amount為整數)
print(red.hincrby("name","key",amount=10))#返回:10

 

4.list類型:一個name對應一個列表存儲。

lpush(self, name, *values)

#元素從list的左邊添加,可以添加多個
red.lpush('name','元素1','元素2')

rpush(self, name, *values)

#元素從list右邊添加,可以添加多個
red.rpush('name','元素1','元素2')

lpushx(self, name, *values)

#當name存在時,元素才能從list的左邊加入
red.lpushx('name','元素1')

rpushx(self, name, *values)

#當name存在時,元素才能從list的右邊加入
red.rpushx('name','元素1')

 llen(self, name)

#name列表長度
red.llen('name')

linsert(self, name, where, refvalue, value)

複製代碼
# 在name對應的列表的某一個值前或後插入一個新值
red.linsert("name","BEFORE","元素2","元素1.5")#在列表內找到第一個"元素2",在它前面插入"元素1.5"

#參數:
#     name: redis的name
#     where: BEFORE(前)或AFTER(後)
#     refvalue: 列表內的值
#     value: 要插入的數據
複製代碼

lset(self, name, index, value)

#對list中的某一個索引位置重新賦值
red.lset("name",0,"abc")

lrem(self, name, value, num=0)

複製代碼
#刪除name對應的list中的指定值
red.lrem("name","元素1",num=0)

# 參數:
#    name:  redis的name
#    value: 要刪除的值
#    num:   num=0 刪除列表中所有的指定值;
#           num=2 從前到後,刪除2個;
#           num=-2 從後向前,刪除2個'''
複製代碼

lpop(self, name)

#移除列表的左側第一個元素,返回值則是第一個元素
print(red.lpop("name"))

lindex(self, name, index)

#根據索引獲取列表內元素
print(red.lindex("name",1))

lrange(self, name, start, end)

#分片獲取元素
print(red.lrange("name",0,-1))

ltrim(self, name, start, end)

#移除列表內沒有在該索引之內的值
red.ltrim("name",0,2)

 

5.set類型:集合是不允許重覆的列表

sadd(self, name, *values)

#給name對應的集合中添加元素
red.sadd("name","aa")
red.sadd("name","aa","bb")

scard(self, name)

#獲取name對應的集合中的元素個數
red.scard("name")

smembers(self, name)

#獲取name對應的集合的所有成員
red.smembers('name')

sdiff(self, keys, *args)

複製代碼
#在第一個name對應的集合中且不在其他name對應的集合的元素集合
red.sadd("name","aa","bb")
red.sadd("name1","bb","cc")
red.sadd("name2","bb","cc","dd")

print(red.sdiff("name","name1","name2"))#輸出:{aa}
複製代碼

sismember(self, name, value)

#檢查value是否是name對應的集合內的元素

smove(self, src, dst, value)

#將某個元素從一個集合中移動到另外一個集合

spop(self, name)

#從集合的右側移除一個元素,並將其返回

 

6.其他常用操作

flushdb(self,asynchronous=False)

#清空當前db中的數據,預設是同步。若開啟非同步asynchronous=True,會新起一個線程進行清空操作,不阻塞主線程

flushall(self,asynchronous=False)

#清空所有db中的數據,預設是同步。非同步同flushdb

delete(self, *names)

#根據name刪除redis中的任意數據類型

exists(self, name)

#檢查redis的name是否存在

keys(self, pattern='*')

#根據* ?等通配符匹配獲取redis的name

expire(self,name ,time)

#為某個name的設置過期時間

rename(self, src, dst)

#重命名

move(self, name, db))

# 將redis的某個name移動到指定的db下

randomkey(self)

#隨機獲取一個redis的name(不刪除)

type(self, name)

# 獲取name對應值的類

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Scala中Option是用來表示一個可選類型 什麼是可選? --> 主要是指 有值(Some) 和 無值(None)-->Some和None是Option的子類 val myMap:Map[String,String] = Map("key1"->"value1") //獲取集合value的值 v ...
  • stirng類型 簡介: C++標準庫提供的類型:string 長度可變的字元串 操作簡單 僅為包含個人常用函數 頭文件 string 類型與其它的標準庫類型相同,都需要包含對應的頭文件 string 類型的定義和初始化 定義及初始化 | 解釋 | string s1 = "C++"; | 創建字元 ...
  • 1:nothing是所有類型的子類,他沒有具體的實例對象,常見的應用:拋出異常、程式exit、無線迴圈等。 2:nothing是所有類型的子類,也是null的子類,nothing沒有對象,但是可以用來定義類型,如方法拋出異常的返回值類型就是nothing。 3:null是所有引用類型的子類,他只是一 ...
  • 1:內容是否可變:val修飾的是不可變的,var修飾是可變的 2:val修飾的變數在編譯後類似於java中的中的變數被final修飾 3:lazy修飾符可以修飾變數,但是這個變數必須是val修飾的 ps:lazy相當於延遲載入(懶載入),當前變數使用lazy修飾的時候,只要變數不被調用,就不會進行初 ...
  • 一、局部內部類 1.局部內部類等同於局部變數 2.局部內部類在訪問局部變數的時候,局部變數必須使用final修飾。 3.舉個例子: package com.bjpowernode.java_learning; ​ public class D59_1_LocalInnerClass { public ...
  • C programming language was developed in 1972 by Dennis Ritchie at bell laboratories of AT&T (American Telephone & Telegraph) in the U.S.A. ANSI C or C ...
  • 題目: 編程式將給定字元串中指定字元刪除。要求刪除指定字元後原字元串不能留下空位置,字元串和指定字元均由鍵盤輸入 基本思路 將字元串與要刪除的字元進行比較,若為相同字元,則將字元串中的該字元替換為原字元串中下一個字元,並依次將後面的字元提前,從而達到刪除字元的目的。 註意 :字元前移一位後,需要判斷 ...
  • 1. "Spot The Discrepancies with Dialyzer for Erlang" . 如何在大型Erlang項目中從零開始一步步踐行Dialyzer。 2. "Which companies are using Erlang, and why?" 哪一些公司正在生產上使用Er ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...