一、Redis APIredis
1.安裝redis模塊數據庫
$ pip3.8install redis
2.使用redis模塊緩存
import redis # 鏈接redis的ip地址/主機名,port,password=Noner = redis.Redis(host="127.0.0.1",port=6379,password="gs123456")
3.redis鏈接池app
redis-py使用connection pool來管理對一個redis server的全部鏈接,避免每次創建、釋放鏈接的開銷。默認,每一個Redis實例都會維護一個本身的鏈接池。能夠直接創建一個鏈接池,而後做爲參數Redis,這樣就能夠實現多個Redis實例共享一個鏈接池。分佈式
總之,當程序建立數據源實例時,系統會一次性建立多個數據庫鏈接,並把這些數據庫鏈接保存在鏈接池中,當程序須要進行數據庫訪問時,無需從新新建數據庫鏈接,而是從鏈接池中取出一個空閒的數據庫鏈接ide
import redis# 建立鏈接池,將鏈接保存在鏈接池中pool = redis.ConnectionPool(host="127.0.0.1",port=6379,password="gs123456",max_connections=10) # 建立一個redis實例,並使用鏈接池"pool"r = redis.Redis(connection_pool=pool)
二、String 操做spa
redis中的String在內存中按照一個name對應一個value來存儲。如圖:3d
1. set 爲name設置值server
# 在Redis中設置值,默認,不存在則建立,存在則修改set(name, value, ex=None, px=None, nx=False, xx=False, keepttl=False) name:設置鍵value:設置值ex:設置過時時間(秒級)px:設置過時時間(毫秒)nx:若是設置爲True,則只有name不存在時,當前set操做才執行,同setnx(name, value)xx:若是設置爲True,則只有name存在時,當前set操做才執行
set用法:對象
r.set("name1","jack",ex=3600)r.set("name2","xander",xx=36000)
setnx用法:
# 設置值,只有name不存在時,執行設置操做(添加)setnx(name, value)
setex用法:
# 設置值,參數:time -->過時時間(數字秒 或 timedelta對象)setex(name, value, time)
psetex用法:
# 設置值,參數:time_ms,過時時間(數字毫秒 或 timedelta對象)psetex(name, time_ms, value)
2. get 獲取name的值
# 根據key獲取值get(name) r.get("foo")
3. mset 批量設置name的值:
mset(mapping) data = { "k1":"v1", "k2":"v2",}r.mset(data)
4. Mget 批量獲取name的值
# 批量獲取值,根據多key獲取多個值mgets(mapping) # 方法一r.mget("k1","k2") # 方法二data = ["k1","k2"]r.mget(data) # 方法三data = ("k1","k2")r.mget(data)
5. getset 設置新值並獲取原來的值
getset(name, value) r.set("foo", "xoo")ret = r.getset("foo", "yoo")print(ret) # b'xoo'
6. append 爲name原有值後追加內容
# key對應值的後面追加內容append(key, value) r.set("name","jack")r.append("name","-m")ret = r.get("name")print(ret) # b'jack-m'
7. strlen 返回name的值字節長度:
# 返回字符串的長度,當name不存在時返回0strlen(name) r.set("name","jack-")ret = r.strlen("name")print(ret) # 5
8. incr 爲name整數累加值
# 自增mount對應的值,當mount不存在時,則建立mount=amount,不然,則自增,amount爲自增數(整數)incr(name, amount=1) r.incr('mount')r.incr('mount')r.incr('mount', amount=3)ret = r.get('mount')print(ret) # b'5'
三、Hash 操做
hash表現形式上有些像pyhton中的dict,能夠存儲一組關聯性較強的數據 ,redis中Hash在內存中的存儲格式以下圖:
1. hset 爲name設置單個鍵值對
# name對應的hash中設置一個鍵值對(不存在,則建立;不然,修改)hset(name, key, value) name:設置namekey:name對應hash中的key(鍵)value:name對應的hash中的value(值)
hset用法
# 一次只能設置一個鍵值對r.hset("student-jack", "name", "Jack")
2 . hget 獲取name單個鍵值對
# 根據name對應的hash中獲取根據key獲取valuehget(name,key) ret = r.hget("student-jack", "name")print(ret) // b'Jack'
3. hmset 爲name設置多個鍵值對
# mapping中傳入字典(不存在,則建立;不然,修改)hmset(name, mapping): data = { "name": "Jack", "age": 20, "gender": "M",}r.hmset("student-jack", mapping=data)
4. hmget 獲取name多個鍵值對
# 根據name對應的hash中獲取多個key的值hmget(name, keys, *args) name:指定namekeys:要獲取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的鍵值對
# 根據name獲取hash的全部值hgetall(name) ret = r.hgetall("student-jack")print(ret) # {b'name': b'Jack', b'age': b'20', b'gender': b'M'}
六、hlen 獲取name中的鍵值對個數
# 根據name獲取hash中鍵值對的總個數hlen(name) ret = r.hlen("student-jack")print(ret) # 3 , 3個鍵值對
7. hkeys 獲取name中鍵值對全部key
# 獲取name裏鍵值對的keyhkeys(name) ret = r.hkeys('student-jack')print(ret) # [b'name', b'age', b'gender']
8. hvals 獲取name中鍵值對全部value
# 獲取name裏鍵值對的valuehvals(name) ret = r.hvals('student-jack')print(ret) # [b'Jack', b'20', b'M']
9. hkeys 檢查name裏的鍵值對是否有對應的key
# 根據name檢查對應的hash是否存在當前傳入的keyhexists(name, key) # 返回布爾值ret = r.hexists('student-jack', 'name')print(ret) # True
10. hincrby 從name裏的鍵值對設置自增值
1.整數自增:
# 自增name對應的hash中的指定key的值,不存在則建立key=amounthincrby(name, key, amount=1) name:設置鍵key:hash對應的keyamount:自增數(整數) ret = r.hincrby('student-jack', 'age')ret = r.hincrby('student-jack', 'age')print(ret) # 22
2.浮點自增
# 自增name對應的hash中的指定key的值,不存在則建立key=amounthincrbyfloat(name, key, amount=1.0) name:設置鍵key:hash對應的keyamount:自增數(浮點數)
11. hdel 根據name從鍵值對中刪除指定key
# 根據name將對應hash中指定的key鍵值對刪除hdel(name,*keys) r.hdel("info",*("m-k1","m-k2"))
四、List 操做
List操做,redis中的List在內存中按照一個name對應一個List來存儲。如圖:
1. lpush 爲name添加元素,每一個新的元素都添加到列表的最左邊
# name對應的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:列表類型中的值統稱元素
2. rpush 爲name添加元素,每一個新的元素都添加到列表的最右邊
# 同lpush,但每一個新的元素都會添加到列表的最右邊rpush(name, values)
3. lpushx 爲name添加元素,只有當name已存在時,將元素添加至列表最左邊
lpushx(name,value)
4. rpushx 同上,將元素添加至列表最右邊
rpushx(name, values)
5. llen 統計name中list的元素個數
# name對應的list元素的個數llen(name) ret = r.llen('names')print(ret) # 3, 該list中有3個元素
6. linsert 爲name中list的某一個值或後 插入一個新的值
# 在name對應的列表的某一個值前或後插入一個新值linsert(name, where, refvalue, value) name:設置namewhere:BEFORE或AFTERrefvalue:標杆值,即:在它先後插入數據value:要插入的數據 // 在Alex值前插入一個值(BEFORE表示:在...以前)r.linsert('names', 'BEFORE', 'Jack', 'Jason') // 在Jack後插入一個值(AFTER表示:在...以後)r.linsert('names', 'AFTER', 'Jack', 'Xander')
7. lset 爲name中list的某一個索引位置的元素從新賦值
# 對name對應的list中的某一個索引位置從新賦值lset(name, index, value) name:設置nameindex:list的索引位置value:要設置的值 // 將索引爲1的元素修改成Gigir.lset('names', 1, 'Gigi')
8. lrem 移除name裏對應list的元素
# 在name對應的list中刪除指定的值lrem(name, count, value) name:設置namevalue:要刪除的值count:count=0,刪除列表中的指定值; count=2,從前到後,刪除2個; count=-2,從後向前,刪除2個 r.lrem('names', count=2, value='Xander')
9. lpop 從name裏的list獲取最左側的第一個元素,並在列表中移除,返回值是則是第一個元素
lpop(name) ret = r.lpop('names')print(ret) # b'Jason'
10. rpop 同上,從右側獲取第一個元素
rpop(name)
11. lindex 在name對應的列表 根據索引獲取元素
# 在name對應的列表中根據索引獲取列表元素lindex(name, index) ret = r.lindex('names', 0)print(ret) # b'Gigi'
12. ltrim 移除列表內沒有在該索引以內的值(截斷)
# 移除列表內沒有在該索引以內的值ltrim(name, start, end) r.ltrim("names",0,2)
13. lrange 在name對應的列表 根據索引獲取數據
# 在name對應的列表分片獲取數據lrange(name, start, end) name:設置namestart:索引的起始位置end:索引結束位置 // 先添加點元素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']
到此這篇關於Python 分佈式緩存之Reids數據類型操做詳解的文章就介紹到這了,更多相關Python Reids數據類型操做內容請搜索之前的文章或繼續瀏覽下面的相關文章但願你們之後多多支持!