溫馨提示×

溫馨提示×

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

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

Reids數(shù)據(jù)類型的使用方法

發(fā)布時間:2020-06-26 12:35:09 來源:億速云 閱讀:181 作者:Leah 欄目:開發(fā)技術(shù)

這篇文章運用簡單易懂的例子給大家介紹Reids數(shù)據(jù)類型的使用方法,代碼非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

1、Redis API

1.安裝redis模塊

$ pip3.8 install redis

2.使用redis模塊

import redis

# 連接redis的ip地址/主機名,port,password=None
r = redis.Redis(host="127.0.0.1",port=6379,password="gs123456")

3.redis連接池

redis-py使用connection pool來管理對一個redis server的所有連接,避免每次建立、釋放連接的開銷。默認(rèn),每個Redis實例都會維護一個自己的連接池??梢灾苯咏⒁粋€連接池,然后作為參數(shù)Redis,這樣就可以實現(xiàn)多個Redis實例共享一個連接池。

總之,當(dāng)程序創(chuàng)建數(shù)據(jù)源實例時,系統(tǒng)會一次性創(chuàng)建多個數(shù)據(jù)庫連接,并把這些數(shù)據(jù)庫連接保存在連接池中,當(dāng)程序需要進(jìn)行數(shù)據(jù)庫訪問時,無需重新新建數(shù)據(jù)庫連接,而是從連接池中取出一個空閑的數(shù)據(jù)庫連接

import redis
# 創(chuàng)建連接池,將連接保存在連接池中
pool = redis.ConnectionPool(host="127.0.0.1",port=6379,password="gs123456",max_connections=10)

# 創(chuàng)建一個redis實例,并使用連接池"pool"
r = redis.Redis(connection_pool=pool)

2、String 操作

redis中的String在內(nèi)存中按照一個name對應(yīng)一個value來存儲。如圖:

Reids數(shù)據(jù)類型的使用方法

1. set 為name設(shè)置值

# 在Redis中設(shè)置值,默認(rèn),不存在則創(chuàng)建,存在則修改
set(name, value, ex=None, px=None, nx=False, xx=False, keepttl=False)

name:設(shè)置鍵
value:設(shè)置值
ex:設(shè)置過期時間(秒級)
px:設(shè)置過期時間(毫秒)
nx:如果設(shè)置為True,則只有name不存在時,當(dāng)前set操作才執(zhí)行,同setnx(name, value)
xx:如果設(shè)置為True,則只有name存在時,當(dāng)前set操作才執(zhí)行

set用法:

r.set("name1","jack",ex=3600)
r.set("name2","xander",xx=36000)

setnx用法:

# 設(shè)置值,只有name不存在時,執(zhí)行設(shè)置操作(添加)
setnx(name, value)

setex用法:

# 設(shè)置值,參數(shù):time -->過期時間(數(shù)字秒 或 timedelta對象)
setex(name, value, time)

psetex用法:

# 設(shè)置值,參數(shù):time_ms,過期時間(數(shù)字毫秒 或 timedelta對象)
psetex(name, time_ms, value)

2. get 獲取name的值

# 根據(jù)key獲取值
get(name)

r.get("foo")

3. mset 批量設(shè)置name的值:

mset(mapping)

data = {
  "k1":"v1",
  "k2":"v2",
}
r.mset(data)

4. Mget 批量獲取name的值

# 批量獲取值,根據(jù)多key獲取多個值
mgets(mapping)

# 方法一
r.mget("k1","k2")

# 方法二
data = ["k1","k2"]
r.mget(data)

# 方法三
data = ("k1","k2")
r.mget(data)

5. getset 設(shè)置新值并獲取原來的值

getset(name, value)

r.set("foo", "xoo")
ret = r.getset("foo", "yoo")
print(ret) # b'xoo'

6. append 為name原有值后追加內(nèi)容

# key對應(yīng)值的后面追加內(nèi)容
append(key, value)

r.set("name","jack")
r.append("name","-m")
ret = r.get("name")
print(ret) # b'jack-m'

7. strlen 返回name的值字節(jié)長度:

# 返回字符串的長度,當(dāng)name不存在時返回0
strlen(name)

r.set("name","jack-")
ret = r.strlen("name")
print(ret) # 5

8. incr 為name整數(shù)累加值

# 自增mount對應(yīng)的值,當(dāng)mount不存在時,則創(chuàng)建mount=amount,否則,則自增,amount為自增數(shù)(整數(shù))
incr(name, amount=1)

r.incr('mount')
r.incr('mount')
r.incr('mount', amount=3)
ret = r.get('mount')
print(ret)		# b'5'

3、Hash 操作

hash表現(xiàn)形式上有些像pyhton中的dict,可以存儲一組關(guān)聯(lián)性較強的數(shù)據(jù) ,redis中Hash在內(nèi)存中的存儲格式如下圖:

Reids數(shù)據(jù)類型的使用方法

1. hset 為name設(shè)置單個鍵值對

# name對應(yīng)的hash中設(shè)置一個鍵值對(不存在,則創(chuàng)建;否則,修改)
hset(name, key, value)

name:設(shè)置name
key:name對應(yīng)hash中的key(鍵)
value:name對應(yīng)的hash中的value(值)

hset用法

# 一次只能設(shè)置一個鍵值對
r.hset("student-jack", "name", "Jack")

2 . hget 獲取name單個鍵值對

# 根據(jù)name對應(yīng)的hash中獲取根據(jù)key獲取value
hget(name,key)

ret = r.hget("student-jack", "name")
print(ret) // b'Jack'

3. hmset 為name設(shè)置多個鍵值對

# mapping中傳入字典(不存在,則創(chuàng)建;否則,修改)
hmset(name, mapping):


data = {
  "name": "Jack",
  "age": 20,
  "gender": "M",
}
r.hmset("student-jack", mapping=data)

4. hmget 獲取name多個鍵值對

# 根據(jù)name對應(yīng)的hash中獲取多個key的值
hmget(name, keys, *args)

name:指定name
keys:要獲取key集合,如:['k1', 'k2', 'k3']
*args:要獲取的key,如:k1,k2,k3


# 直接傳入需要獲取的鍵
ret = r.hmget("student-jack", "name", "age")
print(ret) # [b'Jack', b'20']

# 列表中指定需要獲取的鍵
data = ["name", "age"]
ret = r.hmget("student-jack", data)
print(ret) # [b'Jack', b'20']

5. hgetall 獲取name的鍵值對

# 根據(jù)name獲取hash的所有值
hgetall(name)

ret = r.hgetall("student-jack")
print(ret)  # {b'name': b'Jack', b'age': b'20', b'gender': b'M'}

6、hlen 獲取name中的鍵值對個數(shù)

# 根據(jù)name獲取hash中鍵值對的總個數(shù)
hlen(name)

ret = r.hlen("student-jack")
print(ret) # 3 , 3個鍵值對

7. hkeys 獲取name中鍵值對所有key

# 獲取name里鍵值對的key
hkeys(name)

ret = r.hkeys('student-jack')
print(ret) # [b'name', b'age', b'gender']

8. hvals 獲取name中鍵值對所有value

# 獲取name里鍵值對的value
hvals(name)

ret = r.hvals('student-jack')
print(ret) # [b'Jack', b'20', b'M']

9. hkeys 檢查name里的鍵值對是否有對應(yīng)的key

# 根據(jù)name檢查對應(yīng)的hash是否存在當(dāng)前傳入的key
hexists(name, key)

# 返回布爾值
ret = r.hexists('student-jack', 'name')
print(ret)	# True

10. hincrby 從name里的鍵值對設(shè)置自增值

1.整數(shù)自增:

# 自增name對應(yīng)的hash中的指定key的值,不存在則創(chuàng)建key=amount
hincrby(name, key, amount=1)

name:設(shè)置鍵
key:hash對應(yīng)的key
amount:自增數(shù)(整數(shù))


ret = r.hincrby('student-jack', 'age')
ret = r.hincrby('student-jack', 'age')
print(ret)		# 22

2.浮點自增

# 自增name對應(yīng)的hash中的指定key的值,不存在則創(chuàng)建key=amount
hincrbyfloat(name, key, amount=1.0)

name:設(shè)置鍵
key:hash對應(yīng)的key
amount:自增數(shù)(浮點數(shù))

11. hdel 根據(jù)name從鍵值對中刪除指定key

# 根據(jù)name將對應(yīng)hash中指定的key鍵值對刪除
hdel(name,*keys)


r.hdel("info",*("m-k1","m-k2"))

4、List 操作

List操作,redis中的List在內(nèi)存中按照一個name對應(yīng)一個List來存儲。如圖: 

Reids數(shù)據(jù)類型的使用方法

1. lpush 為name添加元素,每個新的元素都添加到列表的最左邊

# name對應(yīng)的list中添加元素
lpush(name,values)


# 直接指定多個元素
r.lpush("names", "Jack", "Alex", "Eric")

# 將需要添加的元素添加到元組
data = ("Jack", "Alex", "Eric")
r.rpush("names", *data)

# 將需要添加的元素添加到列表
data = ["Jack", "Alex", "Eric"]
r.rpush("names", *data)

Note:列表類型中的值統(tǒng)稱元素

2. rpush 為name添加元素,每個新的元素都添加到列表的最右邊

# 同lpush,但每個新的元素都會添加到列表的最右邊
rpush(name, values) 

3. lpushx 為name添加元素,只有當(dāng)name已存在時,將元素添加至列表最左邊

lpushx(name,value)

4. rpushx 同上,將元素添加至列表最右邊

rpushx(name, values) 

5. llen 統(tǒng)計name中l(wèi)ist的元素個數(shù)

# name對應(yīng)的list元素的個數(shù)
llen(name)

ret = r.llen('names')
print(ret) # 3, 該list中有3個元素

6. linsert 為name中l(wèi)ist的某一個值或后 插入一個新的值

# 在name對應(yīng)的列表的某一個值前或后插入一個新值
linsert(name, where, refvalue, value)

name:設(shè)置name
where:BEFORE或AFTER
refvalue:標(biāo)桿值,即:在它前后插入數(shù)據(jù)
value:要插入的數(shù)據(jù)


// 在Alex值前插入一個值(BEFORE表示:在...之前)
r.linsert('names', 'BEFORE', 'Jack', 'Jason')

// 在Jack后插入一個值(AFTER表示:在...之后)
r.linsert('names', 'AFTER', 'Jack', 'Xander')

7. lset 為name中l(wèi)ist的某一個索引位置的元素重新賦值

# 對name對應(yīng)的list中的某一個索引位置重新賦值
lset(name, index, value)

name:設(shè)置name
index:list的索引位置
value:要設(shè)置的值

// 將索引為1的元素修改為Gigi
r.lset('names', 1, 'Gigi')

8. lrem 移除name里對應(yīng)list的元素

# 在name對應(yīng)的list中刪除指定的值
lrem(name, count, value)

name:設(shè)置name
value:要刪除的值
count:count=0,刪除列表中的指定值;
    count=2,從前到后,刪除2個;
    count=-2,從后向前,刪除2個

r.lrem('names', count=2, value='Xander')

9. lpop 從name里的list獲取最左側(cè)的第一個元素,并在列表中移除,返回值是則是第一個元素

lpop(name)

ret = r.lpop('names')
print(ret)		# b'Jason'

10. rpop 同上,從右側(cè)獲取第一個元素

rpop(name)

11. lindex 在name對應(yīng)的列表 根據(jù)索引獲取元素

# 在name對應(yīng)的列表中根據(jù)索引獲取列表元素
lindex(name, index)

ret = r.lindex('names', 0)
print(ret)	# b'Gigi'

12. ltrim 移除列表內(nèi)沒有在該索引之內(nèi)的值(截斷)

# 移除列表內(nèi)沒有在該索引之內(nèi)的值
ltrim(name, start, end)

r.ltrim("names",0,2)

13. lrange 在name對應(yīng)的列表 根據(jù)索引獲取數(shù)據(jù)

# 在name對應(yīng)的列表分片獲取數(shù)據(jù)
lrange(name, start, end)

name:設(shè)置name
start:索引的起始位置
end:索引結(jié)束位置

// 先添加點元素
data = ['Jack', 'Eric', 'Koko', 'Jason', 'Alie']
r.rpush('names', *data)

// 獲取列表所有元素
ret = r.lrange('names', 0, -1)
print(ret) # [b'Gigi', b'Alex', b'Jack', b'Eric', b'Koko', b'Jason', b'Alie']

// 獲取列表索引2-5的元素(包含2和5,即 2 3 4 5)
ret = r.lrange('names', 2, 5)
print(ret)	# [b'Jack', b'Eric', b'Koko', b'Jason']

// 獲取列表的最后一個元素
ret = r.lrange('names', -1, -1)
print(ret)  # [b'Alie']

關(guān)于Reids數(shù)據(jù)類型的使用方法就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI