redis有5種資料結構,分別如下:

5種資料結構



python語言對5種資料結構的增刪改查









全域性函式

redis 連線

import redis

pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)
r = redis.Redis(connection_pool=pool)

redis 取出的結果預設是位元組,可以設定 decode_responses=True 改成字串

redis python操作

一、字串

建立

1.設定單個鍵值對

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

ex:過期時間(秒),時間到了後redis會自動刪除

px:過期時間(毫秒),時間到了後redis會自動刪除。ex、px二選一即可

nx:如果設定為True,則只有name不存在時,當前set操作才執行

xx:如果設定為True,則只有name存在時,當前set操作才執行

2.設定多個值

value_dict = {'num': 123, 'str': 456}

mset(value_dict)

3.不存在鍵更新value,存在則不變

setnx(name, value)

4.設定value,並新增有效期

setex(name, time, value)

r.setex('name', 1, 'James') 設定name=James,並且有效期為1s

修改

1.value後面追加

append(key, value)

查詢

1.獲取單個值,返回字串

get(key)

2.獲取多個值,返回列表

mget(['num', 'str'])

3.給已有的鍵設定新值,並返回原有的值。返回字串

getset(name, value)

當所給的鍵不存在時,會設定新值,但返回值是None

4.獲取value的長度,返回整型

strlen(key)

5.獲取value從start到end的子字串,返回字串

getrange(key, start, end)

二、列表

redis中,一個鍵對應一個列表

增加:

1.在列表右邊新增值。key不存在時建立一個新列表,返回列表的長度

redis.rpush(key, 1,2,3,4)

可以新增單個,可以新增多個。當有多個值時,將值依次新增到最右邊

arr = [5,4,3,2,1]

r.rpush(key, *arr)

2.在列表左邊新增,key不存在時建立一個新列表,返回列表的長度

r.lpush(key, 1,2,3,4)

當有多個值時,將值依次新增到最左邊。

3.在列表中間插入新值

linsert(name, where, refvalue, value)

name:鍵名

where:位置,前面(BEFORE)或後面(AFTER)

refvalue:指定哪個值的前後插入

value:插入的新值

返回值:插入後列表的長度,若返回-1,則refvalue不存在

r.linsert(key, 'after', 6, 'new_value')

4.key存在時插入。lpushx新增到左邊,rpushx新增到右邊。返回列表長度

lpushx(key, value) 新增到左邊

rpushx(key, value) 新增到右邊

只有鍵存在時,才新增。若鍵不存在則不新增,也不新建立列表

修改

1.列表中通過索引賦值,返回True或False

lset(key, index, value)

刪除

1.刪除左邊第一個值,返回刪除的值

lpop(name)

2.刪除右邊第一個值,返回刪除的值

rpop(name)

3.刪除列表中範圍之外的所有值,返回刪除的值

ltrim(key, start, end)

4.刪除列表中N的相同的值,返回刪除的數量

lrem(name, num, value)

name:鍵名

value:需刪除的值

num:刪除的個數 整數表示從左往右 負數表示從右往左 例如:2 -2

返回值:返回刪除的個數

r.lrem('arr', 10, 'delete_name')

5.刪除並返回列表中首個元素,列表為空則一直阻塞

blpop(key, timeout=n)

6.刪除並返回列表中尾元素,如果列表為空則一直阻塞

brpop(key, timeout=n)

查詢

1.列表中獲取一段資料,返回列表

lrange(name, start, end)

2.通過索引獲取列表值,返回單個元素

lindex(key, index)

3.獲取鍵對應列表的長度,返回數值

llen(key)

三、字典

一個name對應一個字典,類似於字典名字。字典中是key->value

增加

1.單個新增,返回新增的數量

hset(name, key, value)

key存在則修改,否則就是新增

2.批量新增,返回True或False

mapping = {'age':10, 'tel':123}

redis.hmset(name, mapping)

3.如果鍵不存在新增,否則不處理。返回建立字典長度

hsetnx(name, key, value)

刪除

刪除鍵值對,返回刪除的個數

hdel(name, key)

可刪除多個

hdel(name, *keys)

修改

hset(name, key, value)

key存在則修改,否則就是新增

查詢

獲取所有鍵值對,返回一個字典

hgetall(name)

獲取所有的key,返回列表

hkeys(name)

獲取所有value,返回列表

hvals(name)

獲取指定key的值,返回元素

hget(name, key)

獲取多個鍵值對,返回列表

keys = ['age', 'tel']

r.hmget(name, [keys])

獲取鍵值對個數,返回數字

hlen(name)

查詢雜湊中是否有某個key,返回True或False

hexists(name, key)

四、集合

集合中的元素不重複,一般用於過濾元素

增,返回新增的數量

沒有key則建立集合並新增所有元素;有key則直接新增到結合中

sadd(name, value1,value2,value3)

刪,返回刪除元素的個數

1.刪除集合中一個或多個元素

srem(key,values)

srem(key, value1, value2, value3)

2.隨機刪除並返回集合中元素,返回元素

spop(key)

3.將一個集合移動到另一個集合

smove(src, dst, value)

1.返回集合中所有元素,返回集合

smemebers(key)

2.返回集合中元素的個數,返回個數

scard(key)

3.隨機獲取n個元素,返回列表

srandmember(name, number=None)

name:鍵名

number:一個或N個,預設返回一個。若返回N個,則返回List型別

返回值:返回一個值或一個列表

r.srandmemeber(key, number=45)

4.判斷某個值是否在集合中,返回True或False

sismember(key, value)

5.差集,返回集合

sdiff(key1, key2)

6.交集,返回集合

sinter(key1, key2)

7.並集,返回集合

sunion(key1, key2)

五、有序集合

有序集合比集合多了一個分數的欄位,可對分數升序降序

增,返回增加元素個數

set_dict = {'one': 1, 'two':9, 'three': 12}

r.zadd(key, set_dict)

刪,返回刪除元素的個數

1.刪除有序集合中某個或多個值

zrem(key, *values)

返回刪除的個數

2.根據分數範圍刪除有序集合,返回刪除元素的個數

zremrangebyscore(name, min, max)

3.根據排名範圍刪除集合

zremrangebyrank(key, min, max)

增加有序集合中某個值的分數

zincrby(name, value, amount=1)

value:若存在,則增加其amount分數;若不存在,則增加新值以及對應的分數

amount:增加的值,可以為負數

返回值:增加後的分數 float型別 ;形如: -5.0 <class 'float'>

r.zincrby('Zarten', 'zhi', -5)

1.返回有序集合中元素個數,返回數字

zcard(key)

2.返回有序集合中分數範圍內的元素個數,返回數字

zcount(key, min, max)

3.返回有序集合中指定某個值的分數,返回數字

zscore(key, name)

4.返回某個值在有序集合中的分數排名,返回數字

zrank(name, value)

5.返回有序結合分數排序後的一段資料,返回列表

zrange(name, start, end, desc=False, withscores=False, score_cast_func=float)

name:redis的name

start:有序集合索引起始位置(非分數)

end:有序集合索引結束位置(非分數)

desc:排序規則,預設按照分數從小到大排序

withscores:是否獲取元素的分數,預設只獲取元素的值

score_cast_func:對分數進行資料轉換的函式

六、全域性函式

全域性函式對任何資料結構都適用

1.刪除一個或多個鍵的司所有資料

r.delete(*names)

2.判斷redis中是否存在某個鍵

r.exists(key)

3.重新命名redis中建名

r.rename(key, new_key)

4.移動某個鍵所有資料到某一個db中

r.move(key, db_name)

5.隨機獲取redis中某個鍵名

r.randonkey()

6.檢視某個鍵資料結構型別

r.type(key)

返回值:字串(位元組形式) 形如: b'hash'

none (key不存在)

string (字串)

list (列表)

set (集合)

zset (有序集)

hash (雜湊表)

7.設定過期時間

r.expire(key, time)

8.獲取鍵的過期時間

r.ttl(name)

9.獲取所有符合規則的鍵

keys(pattern)

r.keys('n*') 獲取所有以n開頭的鍵