《Redis操作Python系列、redis基本命令 list|CSDN创作打卡》

导读

list类型是简单的字符串列表,按照插入顺序排序。每个列表最多可以存储 232 - 1 个元素(40多亿) ,list类型主要有以下应用场景。

个人用的比较多的是不分页的数据列表,或者是变动较少的列表。

1. 消息队列

list类型的lpop和rpush(或者反过来,lpush和rpop)能实现队列的功能,故而可以用Redis的list类型实现简单的点对点的消息队列。不过我不推荐在实战中这么使用,因为现在已经有Kafka、NSQ、RabbitMQ等成熟的消息队列了,它们的功能已经很完善了,除非是为了更深入地理解消息队列,不然我觉得没必要去重复造轮子。

《Redis操作Python系列、redis基本命令 list|CSDN创作打卡》_第1张图片

2. 排行榜

list类型的lrange命令可以分页查看队列中的数据。可将每隔一段时间计算一次的排行榜存储在list类型中,如京东每日的手机销量排行、学校每次月考学生的成绩排名、斗鱼年终盛典主播排名等,下图是酷狗音乐“K歌擂台赛”的昨日打擂金曲排行榜,每日计算一次,存储在list类型中,接口访问时,通过page和size分页获取打擂金曲。(打个小广告,酷狗音乐“K歌擂台赛”每天都能产生一批优质翻唱作品,对普通人优质歌声有兴趣的朋友不妨来听听)。

《Redis操作Python系列、redis基本命令 list|CSDN创作打卡》_第2张图片

创建测试类【demo11.py】

增加与读取

lpush(name,values)

在name对应的list中添加元素,每个新的元素都添加到列表的最左边

import redis

r = redis.Redis(host='localhost', port=6379, decode_responses=True)
r.flushall()

r.lpush("list1", "琢石", "璞玉", "破梦")#向左侧添加
r.rpush("list1","灭神")#向右侧添加
print(r.lrange('list1', 0, -1))#-1代表所有值

《Redis操作Python系列、redis基本命令 list|CSDN创作打卡》_第3张图片

获取列表长度

import redis

r = redis.Redis(host='localhost', port=6379, decode_responses=True)
r.flushall()

r.lpush("list1", "琢石", "璞玉", "破梦")#向左侧添加
r.rpush("list1","灭神")#向右侧添加

len=r.llen("list1")
print("list长度是:",len)
print(r.lrange('list1', 0, len-1))#这里是可以越界的

《Redis操作Python系列、redis基本命令 list|CSDN创作打卡》_第4张图片

新增(固定索引号位置插入元素)

linsert(name, where, refvalue, value))

在name对应的列表的某一个值前或后插入一个新值

参数:

  • name - redis的name
  • where - BEFORE或AFTER
  • refvalue - 标杆值,即:在它前后插入数据
  • value - 要插入的数据
import redis

r = redis.Redis(host='localhost', port=6379, decode_responses=True)
r.flushall()

r.lpush("list1", "琢石", "璞玉", "破梦")#向左侧添加
r.rpush("list1","灭神")#向右侧添加

r.linsert("list1", "after", "璞玉", "诸佛")#在"璞玉"的右侧添加了"诸佛",如果是"befor"则是左侧
print(r.lrange("list1", 0, -1))

《Redis操作Python系列、redis基本命令 list|CSDN创作打卡》_第5张图片

修改(指定索引号进行修改) 

r.lset(name, index, value)

对name对应的list中的某一个索引位置重新赋值

参数:

  • name - redis的name
  • index - list的索引位置
  • value - 要设置的值
import redis

r = redis.Redis(host='localhost', port=6379, decode_responses=True)
r.flushall()

r.lpush("list1", "琢石", "璞玉", "破梦")#向左侧添加
r.rpush("list1","灭神")#向右侧添加

r.lset("list1", 2, "诸佛")    # 把索引号是2的元素修改成"诸佛"

print(r.lrange("list1", 0, -1))

《Redis操作Python系列、redis基本命令 list|CSDN创作打卡》_第6张图片

删除(指定值进行删除) 

r.lrem(name, num, value)

在name对应的list中删除指定的值

参数:

  • name - redis的name
  • num - num=0,删除列表中所有的指定值;
  • num=2从前到后,删除2个, num=1,从前到后,删除左边第1个
  • num=-2从后向前,删除2个
  • value - 要删除的值
import redis

r = redis.Redis(host='localhost', port=6379, decode_responses=True)
r.flushall()

r.lpush("list1","璞玉","琢石", "璞玉", "破梦","璞玉","璞玉","璞玉","璞玉","诸佛","璞玉","璞玉")#向左侧添加
r.rpush("list1","灭神")#向右侧添加
print(r.lrange("list1", 0, -1))

r.lrem("list1",1,"璞玉")#从左边删除1个
print(r.lrange("list1", 0, -1))

r.lrem("list1",2,"璞玉")#从左边删除2个
print(r.lrange("list1", 0, -1))

r.lrem("list1",-2,"璞玉")#从右边删除2个
print(r.lrange("list1", 0, -1))

《Redis操作Python系列、redis基本命令 list|CSDN创作打卡》_第7张图片

删除并返回

lpop(name)
rpop(name)

在name对应的列表的左侧获取第一个元素并在列表中移除,返回值则是第一个元素

更多:

rpop(name) 表示从右向左操作

import redis

r = redis.Redis(host='localhost', port=6379, decode_responses=True)
r.flushall()

r.lpush("list1","璞玉","琢石", "璞玉", "破梦","诸佛","璞玉")#向左侧添加
r.rpush("list1","灭神")#向右侧添加
print(r.lrange("list1", 0, -1))

one=r.lpop("list1")#左删除
print("左1",one)
two=r.lpop("list1")#左删除
print("左2",two)
three=r.rpop("list1")#右删除
print("右1",three)
four=r.rpop("list1")#右删除
print("右2",four)

print(r.lrange("list1", 0, -1))

《Redis操作Python系列、redis基本命令 list|CSDN创作打卡》_第8张图片

删除索引之外的值

ltrim(name, start, end)

在name对应的列表中移除没有在start-end索引之间的值

参数:

  • name - redis的name
  • start - 索引的起始位置
  • end - 索引结束位置
import redis

r = redis.Redis(host='localhost', port=6379, decode_responses=True)
r.flushall()

r.lpush("list1","璞玉","琢石", "璞玉", "破梦","诸佛","璞玉")#向左侧添加
r.rpush("list1","灭神")#向右侧添加

print(r.lrange("list1", 0, -1))

r.ltrim("list1", 2, 4)#存留下标2-4,也就是234三个值

print(r.lrange("list1", 0, -1))

《Redis操作Python系列、redis基本命令 list|CSDN创作打卡》_第9张图片

取值(根据索引号取值)

lindex(name, index)

在name对应的列表中根据索引获取列表元素

import redis

r = redis.Redis(host='localhost', port=6379, decode_responses=True)
r.flushall()

r.lpush("list1","璞玉","琢石", "璞玉", "破梦","诸佛","璞玉")#向左侧添加
r.rpush("list1","灭神")#向右侧添加

print(r.lrange("list1", 0, -1))

print(r.lindex("list1", 2))#下标值是2,也就是"破梦"

《Redis操作Python系列、redis基本命令 list|CSDN创作打卡》_第10张图片

希望能对大家有所帮助,谢谢,欢迎一键三连。

你可能感兴趣的:(Redis_python用法,redis,python,list)