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
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...