Redis之4———list类型详解:常用操作、业务场景

目录

1 list类型

2 list类型的基本操作

1 lpush/rpush key value1 [value2] …… :添加数据

2 lrange key start stop :获取范围数据

3 lindex key index:获取index索引位置上的值

4 llen key:获取list中值的个数

5 lpop/rpop key:获取并移除数据

6 blpop/brpop key [key……] timeout:阻塞的去获取并移除数据

7 lrem key count value:从指定list中移除count个value

3 list类型的注意事项

4 list业务场景

1 朋友圈点赞,要求按照点赞顺序现实点赞好友的信息

2 在一般要求顺序的业务中,一般都用list来实现。


redis里面的string对应的是每次存储单条数据,hash虽然存放的数据量相比较多一些,但是如果数据量再进一步扩大,那么hash就显得捉襟见肘了。这时候list就在人们的欢呼声中,登上了舞台。

1 list类型

  • 数据存储需求:存储多个数据,并对数据进入存储的顺序进行区分
  • 需要的存储结构:一个存储空间保存多个数据,且通过数据可以体现进入顺序
  • list类型:保存多个数据,底层是用双向链表的存储结构实现的

知道这些就够了,接下来看以下list类型的基本操作。

2 list类型的基本操作

1 lpush/rpush key value1 [value2] …… :添加数据

从左边或者右边向list中插入数据。

可以看出我们先从左边放入一个huawei,再从左边放入一个apple,然后继续向左边放入一个microsoft,因此打印的顺序是从左到右,即:microsoft,apple,huawei.

可以自行测试rpush和rpush、lpush的联合使用。

2 lrange key start stop :获取范围数据

我们可以金桔list里面的索引来获取数据,其中第一个数据的下标为0,和数组的编号方式一样,但是不同的是,在list中最后一个元素的索引为-1,倒数第二个元素的编号为-2,因此在list中每个元素有两个索引,从左到右从0开始编号,从右往左从-1开始编号。测试如下图:

其实redis里面的操作还是很简单,非常容易理解的,如果你有编程基础的话。

3 lindex key index:获取index索引位置上的值

4 llen key:获取list中值的个数

5 lpop/rpop key:获取并移除数据

list中最牛X的操作就是lpush/rpush配合lpop/rpop 来使用。

6 blpop/brpop key [key……] timeout:阻塞的去获取并移除数据

b:block,阻塞的意思,这么命令的意思我简单解释以下:

从若干个list中去取数据,如果现在不存在,我可以等待timeout秒,如果在timeout秒内list中有数据了,就取出来,如果超过这个时间就自动执行完毕。

为了实现这这效果我们来开启两个redis cli,看下图:

在上图中,我们先执行blpop list0 5,由于list0一直为空,所以会超时,取出nil,然后执行blpop list0 10,在10秒的这个时间段内,我们从另一个redis cli 中向list0中插入数据 1,可以看到,执行blpop list0 10的redis cli已经成功的取到数据1。

7 lrem key count value:从指定list中移除count个value

首先因为list里面是允许值重复的,因此可能存在相同的几个value。上述的lpop和rpop只能从两边移除元素,lrem可以根据元素的值将元素移除。

如上图,001中有a b c d四个元素各一个,我们先用lrem 001 2 a移除a的时候,count为2,但是001中只有一个a,因此只能去除掉一个a.

在list中,如果删除中间的元素之后,后面的元素会自动向前追加,索引位置改变。

3 list类型的注意事项

  • list中保存的类型都是string的,数据总量有上限2的32次方减1.
  • list具有索引的概念
  • 获取全部数据操作结束索引设置为-1
  • list可以对数据进行分页操作,通常第一页信息来自于list,第二页及更多信息通过数据库的形式加载

4 list业务场景

1 朋友圈点赞,要求按照点赞顺序现实点赞好友的信息

这种场景如下图所示:

我们可以完整的将这个模型用list实现,发朋友圈的人用key表示,点赞的人为value,点赞操作对应rpush,取消点赞操作可以对应lrem。评论信息可以通过list去查询关系型数据库。

2 在一般要求顺序的业务中,一般都用list来实现。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章