Python對redis的list切片

2021-09-24 09:19:08 字數 2200 閱讀 4397

眾所皆知redis的增刪改查指令十分簡陋,我們如何在python中像操作自身的list一樣操作redis的list呢?

比如切片賦值:

a = [1,2,3,4]

b = [6,7,8,9]

a[:3:2] = b[:3:2]

print(a)

下面開始準備工作

在redis中這麼乙個list,key為testlist2

127.0.0.1:6379> lrange testlist2 0 5

1) "feng"

2) "5"

3) "wei"

4) "tu"

5) "test"

import redis

redisdb = redis.strictredis()

class redislist:

def __init__(self, rediskey):

self.rediskey = rediskey

redisdb.rpush(self.rediskey, item)

def pop(self):

return redisdb.rpop(self.rediskey).decode("utf8")

def clear(self):

redisdb.delete(self.rediskey)

def __len__(self):

return redisdb.llen(self.rediskey)

def __getitem__(self, index):

if isinstance(index, int):

if index >= self.__len__():

raise stopiteration()

return redisdb.lindex(self.rediskey, index).decode("utf8")

elif isinstance(index, slice):

return list(map(lambda x: x.decode("utf8"), redisdb.lrange(self.rediskey, 0, self.__len__())[index] ))

def __setitem__(self, index, value):

if isinstance(index, int):

if index >= self.__len__():

raise exception("over range list")

redisdb.lset(self.rediskey, index, value)

elif isinstance(index, slice):

for i, j in enumerate(range(0, self.__len__())[index]):

redisdb.lset(self.rediskey, j, value[i])

def __str__(self):

return str(self.__getitem__(slice(none, none, none)))

m = redislist("testlist2")

print(m)

for i in m:

print(i)

print(tuple(m))

m[::2] = [1,1,1]

print(m)

輸出:

['feng', '5', 'wei', 'tu', 'test']

feng

5wei

tutest

('feng', '5', 'wei', 'tu', 'test')

['1', '5', '1', 'tu', '1']

檢視redis ,可見切片賦值走通了

127.0.0.1:6379> lrange testlist2 0 5

1) "1"

2) "5"

3) "1"

4) "tu"

5) "1"

備註:

由於redis只支援五種資料型別:string(字串)、hash(雜湊)、list(列表)、set(集合)及zset(sorted set:有序集合),因此 int 和 float 等數字型別存入redis時會被轉成 string

python對redis的增刪改查

一.有序集合參考下面文章 1 zadd key score1 member1 score2 member2 向有序集合新增乙個或多個成員,或者更新已存在成員的分數 2 zcard key 獲取有序集合的成員數 3 zcount key min max 計算在有序集合中指定區間分數的成員數 4 zin...

python 使用paramiko操作linux

可以利用paramiko模組寫伺服器指令碼,在本地執行,比如持續更新 檢視日誌,批量配置集群等。paramiko 主要包含sshclient和sftpclient兩個元件 ssh服務會話的表示,通常用來執行命令,主要有connect exec command load system host key...

Redis06 Redis五大資料型別 list

單鍵多值 redis列表是簡單的字串列表,按照插入順序排序,可以新增左邊 右邊 底層實際上是乙個雙向鍊錶,對兩端的操作效能好,但是通過索引下標的操作中間節點效能較差 從左邊 右邊插入乙個或多個值 lpop rpop 從左邊 右邊吐出乙個值 值在鍵在,值無鍵亡 rpoplpush 從列表右邊吐出乙個值...