链表List的操作

redis中的List在内存中按照一个name对应一个List来存储。

链表基本操作

#1 lpush(name, *values)
在name对应的链表中添加元素,每个新的元素都添加到链表的最左边
如:
    r.lpush('l1', 1,2,3,4,5)  # l1 = [b'5', b'4', b'3', b'2', b'1']

    
#2 rpush(name, *values) 表示每个新元素插在列表的最右边
如
	r.rpush('l1', 6)	# [b'5', b'4', b'3', b'2', b'1', b'6']

    
#3 lpushx(name, value)
在name对应的list中添加元素,只有name已经存在时将元素插在最左边;不存在不做任何操作
  
    
#4 rpushx(name, value)  name存在时,将元素插在最右边


#5 llen(name)
 name对应的list元素的个数
    
    
#6 linsert(name, where, refvalue, value))
在name对应的列表的某一个值前或后插入一个新值
参数:
    name,redis的name
    where,BEFORE或AFTER, 不区分大小写
    refvalue,标杆值,即:在它前后插入数据
    value,要插入的数据
如
	r.linsert('l1', 'after', 3, 12)  # [b'5', b'4', b'3', b'12', b'2', b'1', b'6']
	
    
#7 r.lset(name, index, value)
对name对应的list中的某一个索引位置重新赋值
参数:
    name,redis的name
    index,list的索引位置
    value,要设置的值
如:
	r.lset('l1', 2, '99')  # [b'5', b'4', b'99', b'12', b'12', b'2', b'1', b'6']
    
    
 
#8 r.lrem(name, count, value) 
在name对应的list中删除指定的值
参数:
    name,redis的name
    value,要删除的值
    count,
    	count=0,删除列表中所有的指定的value;
        count=2, 从前到后,删除前2个value;
        count=-2, 从后向前,删除后2个value
           
#9 lpop(name)
删除name对应的列表中出现的第一个元素并返回
更多:
    # rpop(name) 表示弹出从右向左出现的第一个元素
    
    
 
#10 lindex(name, index)
在name对应的列表中根据索引获取列表元素


#11 lrange(name, start, end)
在name对应的列表分片获取数据
参数:
    name,redis的name
    start,索引的起始位置
    end,索引结束位置
如
	r.lrange('l1', 0, -1)	# 获取链表l1的所有元素
    
    
    
#12 ltrim(name, start, end)
在name对应的列表中移除start-end之外的元素,双闭区间
参数:
    name,redis的name
    start,索引的起始位置
    end,索引结束位置
如
	print(r.lrange('l1', 0, -1)) # [b'4', b'99', b'12', b'12', b'2', b'1', b'6']
	r.ltrim('l1', 1, 4) # 保留1-4之间的元素
	print(r.lrange('l1', 0, -1)) # [b'99', b'12', b'12', b'2']
    
# 13 blpop(name, timeout=0)
弹出name对应列表中的左边第一个元素,如果不存在则阻塞,等待列表中出现元素。
    timeout为等待时间,表示阻塞时等待的时间,如果timeout=0则表示无期限的原地阻塞
    blpop('lx_list1')		# 弹出lx_list1中第一个元素,如果不存在则原地阻塞

自定制分批获取链表的数据

# 每次从redis中取2个元素, 通过生成器返回出去
# 然后再次while循环,直到满足取值个数要求,
def scan_list(name, count=2):
    index=0
    while True:
        # 闭区间:[0, count-1]
        data_list = conn.lrange(name, index, count+index-1)
        if not data_list:
            return			# 循环完毕,结束
        index += count		# 更新取值区间的起点
        for item in data_list:
            yield item		# 每次切片的列表通过生成器依次返回
            
            

# 使用
for item in scan_list('lx_list1', 5):
    print(item)
posted @ 2020-05-05 20:43  the3times  阅读(223)  评论(0)    收藏  举报