Django redis2 列表 和其他操作


列表的操作

List操作,redis中的List在在內存中按照一個name對應一個List來存儲。如圖:

lpush插值至列表最左邊

 
         

   lpush(name,values)

# 在name對應的list中添加元素,每個新的元素都添加到列表的最左邊
 
# 如:
    # r.lpush('oo', 11,22,33)
    # 保存順序為: 33,22,11
 
# 擴展:
    # rpush(name, values) 表示從右向左操作

lpushx已存在name,添加到列表最左邊

  lpushx(name,value)

# 在name對應的list中添加元素,只有name已經存在時,值添加到列表的最左邊
 
# 更多:
    # rpushx(name, value) 表示從右向左操作

llen、list元素的個數

llen(name)
# name對應的list元素的個數

linsert在列表特定位置插入新值

 
         

 linsert(name, where, refvalue, value))

# 在name對應的列表的某一個值前或后插入一個新值
 
# 參數:
    # name,redis的name
    # where,BEFORE或AFTER
    # refvalue,標桿值,即:在它前后插入數據
    # value,要插入的數據

r.lset對name對應的list中的某一個索引位置重新賦值

r.lset(name, index, value)

# 參數:
    # name,redis的name
    # index,list的索引位置
    # value,要設置的值

r.lrem刪除指定的值

r.lrem(name, value, num)

# 在name對應的list中刪除指定的值
 
# 參數:
    # name,redis的name
    # value,要刪除的值
    # num,  num=0,刪除列表中所有的指定值;
           # num=2,從前到后,刪除2個;
           # num=-2,從后向前,刪除2個

lpop移除最左側元素

lpop(name)
# 在name對應的列表的左側獲取第一個元素並在列表中移除,返回值則是第一個元素
 
# 更多:
    # rpop(name) 表示從右向左操作

lindex根據索引獲取列表元素

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

lrange分片獲取數據

 
         

lrange(name, start, end)

# 在name對應的列表分片獲取數據
# 參數:
    # name,redis的name
    # start,索引的起始位置
    # end,索引結束位置

ltrim范圍移除元素

 

  ltrim(name, start, end)

# 在name對應的列表中移除沒有在start-end索引之間的值
# 參數:
    # name,redis的name
    # start,索引的起始位置
    # end,索引結束位置

rpoplpush右邊移除元素列表1,左邊插入列表2

rpoplpush(src, dst)
# 從一個列表取出最右邊的元素,同時將其添加至另一個列表的最左邊
# 參數:
    # src,要取數據的列表的name
    # dst,要添加數據的列表的name

blpop左邊移除元素,設置超時時間

blpop(keys, timeout)
# 將多個列表排列,按照從左到右去pop對應列表的元素
 
# 參數:
    # keys,redis的name的集合
    # timeout,超時時間,當元素所有列表的元素獲取完之后,阻塞等待列表內有數據的時間(秒), 0 表示永遠阻塞
 
# 更多:
    # r.brpop(keys, timeout),從右向左獲取數據

brpoplpush右邊移除元素列表1,左邊插入元素列表2,設置超時時間

brpoplpush(src, dst, timeout=0)
# 從一個列表的右側移除一個元素並將其添加到另一個列表的左側
 
# 參數:
    # src,取出並要移除元素的列表對應的name
    # dst,要插入元素的列表對應的name
    # timeout,當src對應的列表中沒有數據時,阻塞等待其有數據的超時時間(秒),0 表示永遠阻塞

自定義增量迭代

import redis
from redis_study.redis_poll import  POLL

conn = redis.Redis(connection_pool=POLL)
def list_iter(key,count=10):
    index=0

    while True:
        data_list=conn.lrange(key,index,index+count-1)
        if not data_list:
            return
        index+=count

        for item in data_list:
            yield item


for item in list_iter('k1'):
    print(item)

 事務+一次發送多個指令

#!/usr/bin/env python
# -*- coding:utf-8 -*-
 
import redis
 
pool = redis.ConnectionPool(host='10.211.55.4', port=6379)
 
r = redis.Redis(connection_pool=pool)
 
# pipe = r.pipeline(transaction=False)
pipe = r.pipeline(transaction=True)
pipe.multi()
pipe.set('name', 'alex')
pipe.set('role', 'sb')
 
pipe.execute()

 

其他操作

delete 刪除key和內容

delete(*names)
# 根據刪除redis中的任意數據類型/ 不能用正則來構建name
可以傳入列表

delete_list=[1,2,3,4]
delete(*delete_list)

 

exists 判斷name是否存在

exists(name)
# 檢測redis的name是否存在

 

keys 獲取keys列表

keys(pattern='*')
# 根據模型獲取redis的name
 
# 更多:
    # KEYS * 匹配數據庫中所有 key 。
    # KEYS h?llo 匹配 hello , hallo 和 hxllo 等。
    # KEYS h*llo 匹配 hllo 和 heeeeello 等。
    # KEYS h[ae]llo 匹配 hello 和 hallo ,但不匹配 hillo

expire 設置超時時間

expire(name ,time)
# 為某個redis的某個name設置超時時間

 

rename 重命名

rename(src, dst)
    
# 對redis的name重命名為

 

move 移動數據

move(name, db))
# 將redis的某個值移動到指定的db下

 

randomkey 隨機獲取name

randomkey()
# 隨機獲取一個redis的name(不刪除)

 

type 獲取name值數據類型

type(name)
# 獲取name對應值的類型

 

scan和scan_iter 循環獲取值

scan(cursor=0, match=None, count=None)
scan_iter(match=None, count=None)
# 同字符串操作,用於增量迭代獲取key

可以構建正則表達式
for key in scan_iter('payment_1_*'):
    print(key)
    ---> key=payment_1_1 /key=payment_1_2 ....

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM