Python对redis的list切片

众所皆知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

    def append(self, item):
        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
5
wei
tu
test
('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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值