python 操作 Redis

來源:互聯網
上載者:User

標籤:取資料   exists   dex   ping   rem   串連   redis命令   range   redis   

Redis 模組基本介紹

[toc]

參考
  • Redis中文官網
  • Redis命令參考
  • 菜鳥教程
資料緩衝系統:
  • mongodb:直接持久化,直接儲存在於硬碟的緩衝系統(有疑問)
  • redis:半持久化,儲存於記憶體和硬碟
  • memcache:資料只能儲存在記憶體裡的緩衝系統
redis

redis是一個key-value儲存系統,支援的資料類型:

  • string
  • list
  • zet
  • szet(有序集合)
  • hash(雜湊類型)

這些資料類型都支援:push/pop,add/remove及取交集、並集和差集。關鍵的是,這些操作都是**原子性**的

redis-py 的 API
  • 串連方式和串連池
  • 操作:string操作、hash操作、list操作、set操作、sort set 操作
  • 管道(pipeline)的使用
  • 發布訂閱 redis-py GitHub 連結
串連 redis

串連方式:redis 提供了2個類

  1. StrictRedis:實現了大部分官方的命令
  2. Redis:是 StrictRedis 的子類,用於向後相容舊版的Redis
普通串連
import redisredis_config = {    "host": "192.168.189.100",    "port": 6379}# redis連線物件redis_conn = redis.Redis(**redis_config)redis_conn.set("name","ping")print redis_conn.get("name")
串連池

管理對一個 redis server 的所有串連,避免每次建立,釋放串連的開銷。預設,每個redis執行個體後悔維護一個自己的串連池,可以直接建立一個串連池,作為參數傳給redis,這樣可以實現多個redis執行個體共用一個串連池。

import redisredis_config = {    "host": "192.168.189.100",    "port": 6379}redis_pool = redis.ConnectPool(**redis_config)r = redis.Redis(connection_pool=redis_pool)r.set(‘name‘,‘qiang‘)print r.get(‘name‘)
redis 字串操作

redis中的String在在記憶體中按照一個name對應一個value來儲存

set() 參數:set(name, value, ex=None, px=None, nx=False, xx=False)
ex,到期時間(秒)
px,到期時間(毫秒)
nx,如果設定為True,則只有name不存在時,當前set操作才執行,同setnx(name, value)
xx,如果設定為True,則只有name存在時,當前set操作才執行

單次設定key-value
import redisredis_config = {    "host": "192.168.189.100",    "port": 6379}# 建立一個串連池redis_pool = redis.ConnectionPool(**redis_config)# 建立一個 Redis 連線物件r = redis.Redis(connection_pool=redis_pool)# 在 Redis 中設定值,若不存在則建立,存在則替換r.set("name","ping")print r.get("name")
大量設定key-value
import redisredis_config = {    "host": "192.168.189.100",    "port": 6379}# 建立一個串連池redis_pool = redis.ConnectionPool(**redis_config)# 建立一個 Redis 連線物件r = redis.Redis(connection_pool=redis_pool)# 在 Redis 中設定值,若不存在則建立,存在則替換k_v_pair = {    "alpha": "a",    "bete": "b",    "gamma": "c"}# 大量設定值r.mset(**k_v_pair)# 批量取值print r.mget("alpha", "bete", "gamma")
redis list操作

redis中的List在記憶體中按照一個name對應一個list來儲存

lpush(name,values)

#在 name 對應的list中添加元素,每個新的元素都添加到列表的最左邊r.lpush("list1","alpha")r.lpush("list1",3,4,5)# 查看列表結果print r.lrange("list1",0,-1)# 結果[‘5‘, ‘4‘, ‘3‘, ‘alpha‘]

rpush(name,values)

# 同lpush,但每個新的元素都添加到列表的最右邊

lpushx(name,value)

# 在name對應的list中添加元素,只有name已經存在時,值添加到列表的最左邊,否則為空白

rpushx(name,value)

# 在name對應的list中添加元素,只有name已經存在時,值添加到列表的最右邊,否則為空白

llen(name)

# name 對應的list元素的個數print r.llen("list1")

linsert(name,where,refvalue,value)參數對應:name: redis的name
where: BEFORE(前)或AFTER(後)
refvalue: 列表內的值
value: 要插入的資料

# 在name對應的列表的某一個值前或後插入一個新值r.linsert("list1","BEFORE","alpha","bete")  #在列表內找到第一個元素alpha,在其之前插入 beta

lset(name,index,value)

# 對list中的某一個索引位置重新賦值,替換掉以前的元素r.lset("list1",0,"beta")

r.lrem(name,value,num)參數對應:name: redis的name
value: 要刪除的值
num: num=0 刪除列表中所有的指定值;
num=2 從前到後,刪除2個;
num=-2 從後向前,刪除2個

# 刪除name對應的list中的指定值r.lrem("list1","beta",num=1)

r.lpop(name)

# 移除列表的左側第一個元素,並返回,相當於出桟print r.lpop("list1")

r.lindex(name,index)

# 根據索引擷取列表內元素print r.lindex("list1",1)

lrange(name,start,end)

# 分區擷取元素,如擷取整個listprint r.lrange("list1",0,-1)

ltrim(name,start,end)

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

rpoplpush(src,dst)

# 從一個列表取出最右邊的元素,同時將其添加到另一個列表的最左邊# src 要取資料的列表# dst 要添加資料的列表

brpoplpush(src,dst,timeout=0)

# 同rpoplpush,多了timeout# timeout:取資料的列表沒元素後的阻塞時間,0為一直阻塞r.brpoplpush("list1","list2",timeout=0)

blpop(keys,timeout)

# 將多個列表排序,按照從左至右去移除各個列表內的元素r.lpush("list1",3,4,5)r.lpush("list2",3,4,5)while True:    print r.blpop(["list1","list2"],timeout=0)    print r.lrange("list1",0,-1),r.lrange("name",0,-1)#結果如下:(‘list1‘, ‘5‘)[‘4‘, ‘3‘] [‘5‘, ‘4‘, ‘3‘](‘list1‘, ‘4‘)[‘3‘] [‘5‘, ‘4‘, ‘3‘](‘list1‘, ‘3‘)[] [‘5‘, ‘4‘, ‘3‘](‘list2‘, ‘5‘)[] [‘4‘, ‘3‘](‘list2‘, ‘4‘)[] [‘3‘](‘list2‘, ‘3‘)[] []

brpop(keys,timeout)

# 同 blpop,將多個列表排序,按照從右往左移除各個列表內的元素
redis set操作

set集合就是不重複的列表

sadd(name,values)

# 給name對應的集合中添加元素r.sadd("set1","aa")r.sadd("set2","aa",1,2,"bb")

smembers(name)

# 擷取name對應的集合的所有成員

scard(name)

# 擷取name對應的集合中的元素個數r.scard("set1")
有序集合

在集合的基礎上,為每個元素排序,元素的排序需要根據另外一個值來進行比較,所以,對於有序集合,每一個元素有兩個值,即:值和分數,分數專門用開做排序。

*zadd(name,args,**kwargs)

# 在name對應的有序集合中添加元素r.zadd("set1","a",1,"b",2,"c",3)# 或者r.zadd("set1",b1=10,b2=5)

zcard(name)

# 擷取有序集合內元素的數量

zcount(name,min,max)

# 擷取有序集合中分數在[min,max]之間的個數print r.zcount("set1",1,5)
Redis Hash操作

hashRedis2.0後增加的一種資料類型,類似大多數程式設計語言中的map資料結構一樣,Redis是索引值對的集合,也就是說它存放的是字串和字串之間的映射。由於這個特性,hash特別適用於儲存一個對象。講一個Object Storage Service在hash中會佔用更少的記憶體,並且可以方便的存取整個對象。

hset命令

hset 命令用來就愛那個某個hash指定鍵的值,如果間不存在,則建立並設定對應的值,返回一個整數1,如果鍵已經存在,則對應的值將被覆蓋並返回整數0.具體格式為:

hset hash_name field value#樣本:127.0.0.1:6379> hset myhash name fred(integer) 1127.0.0.1:6379> hset myhash name fred2(integer) 0

** hmset 命令**

hmset命令和hset命令的作用相似,可以用來設定hash的鍵和值。不同的是hmset可以同時設定多個索引值對,操作成功後hmset命令返回一個簡單的字串‘ok‘.具體格式如下:

hmset hash_name field1 value1 field2 value2...#樣本127.0.0.1:6379> hmset myhash name fred age 24OK127.0.0.1:6379> hget myhash name"fred"127.0.0.1:6379> hget myhash age"24"

hsetnx 命令

hsetnx 命令也用來在指定鍵不存在的情況下設定索引值資訊。如果鍵不存在,則Redis會先建立鍵,然後設定對應的值,操作成功後返回整數1。如果該鍵已經存在,則該命令不進行任何操作,傳回值為0.具體格式如下:

hsetnx hash_name field value#樣本127.0.0.1:6379> hsetnx myhsh address hangzhou(integer) 1127.0.0.1:6379> hsetnx myhsh address guangzhou(integer) 0127.0.0.1:6379> hget myhsh address"hangzhou"

hget命令

hget 命令用開擷取某個hash指定key的值。如果該鍵存在,直接返回對應的值,否則返回nil。具體格式如下:

hget hash_name field#樣本127.0.0.1:6379> hset myhash name fred(integer) 0127.0.0.1:6379> hget myhash name"fred"127.0.0.1:6379> hget myhash nonkey(nil)

hmget命令

hmget命令和hget命令類似,用來返回某個hash多個鍵的值的列表,對於不存在的鍵,返回nil值。具體格式如下:

hmget hash_name field1 field2...#樣本127.0.0.1:6379> hmset myhash name fred age 24OK127.0.0.1:6379> hmget myhash name age weight1) "fred"2) "24"3) (nil)

hexists命令

hexists命令令用來判斷某個hash指定鍵是否存在,若存在返回整數1,否則返回0。具體格式如下:

hexists hash_name field#樣本127.0.0.1:6379> hset myhash name fred(integer) 0127.0.0.1:6379> hexists myhash name(integer) 1127.0.0.1:6379> hexists myhash home(integer) 0

hlen命令

hlen命令用來返回某個hash中所有鍵的數量。具體格式如下:

hlen hash_name#樣本:127.0.0.1:6379> hmset myhash name fred age 24OK127.0.0.1:6379> hlen myhash(integer) 2127.0.0.1:6379> hlen nonhash(integer) 0

hdel命令

hdel命令用來刪除某個hash指定的鍵,如果該鍵不存在,則不進行任何操作。hdel命令的傳回值是成功刪除的鍵的數量(不包括不存在的鍵)。具體格式為:

hdel hash_name field:#樣本127.0.0.1:6379> hmset myhash name fred age 24OK127.0.0.1:6379> hdel myhash name age(integer) 2127.0.0.1:6379> hmget myhash name age1) (nil)2) (nil)

hgetall命令

hgetall命令返回一個列表,該列表包含了某個hash的所有鍵和值。在傳回值中,先是鍵,接下來的一個元素是對應的值,所以hgetall命令返回的列表長度是hash大小的兩倍。具體格式如下:

hgetall hash_name#樣本127.0.0.1:6379> hmset myhash name fred age 24OK127.0.0.1:6379> hgetall myhash1) "name"2) "fred"3) "age"4) "24"
其他動作

在redis用戶端中執行

# 根據name刪除redis中的任意資料類型delete(*name)# 檢測redis的name是否存在exists(name)# 根據 *?等萬用字元匹配擷取redis的namekeys(pattern=‘*‘)# 為某個name設定逾時時間expire(name,time)# 重新命名rename(src,dst)# 將redis的某個值移動到指定的db下move(name,db)# 隨機擷取一個redis的name(不刪除)randomkey()# 擷取name對應值的類型type(name)

python 操作 Redis

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.