列表的操作
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 ....
