redis 学习笔记(四)list数据类型

 

目录

一.list类型的介绍与基本操作

二.redis中list类型的存储结构

三.list类型数据基本操作

四.list类型数据扩展操作

五.list类型的业务场景使用(一)         

六.list实现业务场景(二)           

七. list类型常用的解决方案:


 

一.list类型的介绍与基本操作

       1.list类型

                  数据存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分.

                  需要的存储结构:一个存储空间需要保存多个数据,且通过数据可以体现进入顺序

                  list类型:保存多个数据,底层使用双向链表存储结构实现

       2.数组,链表,双向链表的概念

              数组:查询快,插入慢

              链表:查询慢,插入快

              单向链表:

               

              双向链表:

               

             如果来一个新的节点,相关的顺序:

              

             

              list就是双向链表的结构

 

 二.redis中list类型的存储结构

         1.数据存储需求:存储多个数据,并对数据进行存储空间顺序进行区分

              redis存储空间

                  

                   双向链表有助于构建特殊业务

                   --------------------------------------

 

                   ---------------------------------------

 

                 可以左进也可以右进

                 左进左出===栈

                 右进左出===队列

三.list类型数据基本操作

               (左头右尾)

       1.添加/修改数据

                lpush key value1  value2 ...            left左进

           

                rpush key value1 value2 ...             right右进

          

           2.获取数据

               lrange key  start  stop

            

               lindex  key index   查询第几个进入得,从索引0开始

            

               LLEN    key 查询队列list长度

           

         3.获取并移除数据

             lpop key  获取并移除一个,左出

            

             rpop  key  获取并移除一个右出

            

     例子:右进左出

            

   lrange list 0 -1 展示全部信息

          

  四.list类型数据扩展操作

        1.规定时间内获取并移除数据

           blpop  key1 [key2]    timeout  左取   如果列表没有元素会阻塞列表直到等待超时发现可弹出元素为止

           如果列表为空,返回一个 nil 。 否则,返回一个含有两个元素的列表,第一个元素是被弹出元素所属的 key ,第二个元素是被弹出元素的值

             

           brpop  key1  [key2]    timeout 右取  假如在指定时间内没有任何元素被弹出,则返回一个 nil 和等待时长。

          反之,返回一个含有两个元素的列表,第一个元素是被弹出元素所属的 key ,第二个元素是被弹出元素的值。

             

          总结 :阻塞版本

           取数据时可以等待 ,有数据便返回,没有数据时将在规定时间之外返回

    五.list类型的业务场景使用(一)

           业务场景1:

                       微信朋友圈点赞,要求按点赞顺序点赞显示点赞好友信息

                       如果取消点赞,移除对应好友的信息

                       存在问题:如何从中间取出数据

          解决方案:

                      移除指定位置的数据

                      lrem  key count value

                              key 队列名   count 移除几个   value删除哪个元素

                             

     tips 6: redis应用具有操作先后顺序的数据控制

    六.list实现业务场景(二)

             (一).list类型数据操作注意事项

                  1.list中保存的数据是有限的,且均为String类型,最多2^32  -1个元素

                  2.list具有索引的概念,但操作数据时,通常以队列的形式入队,出队的操作或以栈入栈出栈的操作

                  3.list可以对数据进行分页操作,通常第一页的信息来自于list.第二页以及更多信息通过数据库的形式加载

           (二)业务场景

                  1.twitter,新浪微博,腾讯微博,个人用户的关注顺序进行展示,粉丝列表需要将最近关注的粉丝列在前面

                  2.新闻资讯类网站按照发生的时间顺序展示

                  3.企业运营过程中,企业将产生出大量的运营数据,如何保障多台服务器操作日志的统一顺序输出

                例子:ELK日志系统

              

           tips7:redis应用于最新消息的展示

   

七. list类型常用的解决方案:

           1.利用list数据类型具有顺序特征对信息进行管理

           2.使用队列模型解决多路信息汇总合并的问题

           3.使用栈解决最新消息的问题