文章目录

  • list列表简介
  • 常用命令
    • 添加命令
    • 查询命令
    • 弹出/删除命令
    • 修改命令
    • 阻塞弹出命令
  • 应用场景

list列表简介

  1. list是简单的字符串列表(说通俗点,存储的还是字符串),按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边),个列表最多可以包含^32-1个元素(每个列表超过40亿个元素)。
  2. Redis中的list和Java中的LinkedList很像,底层都是一种链表结构,list的插入和删除操作非常快,时间复杂度为 0(1),不像数组结构插入、删除操作需要移动数据。像归像,但是redis中的list底层可不是一个双向链表那么简单。
  3. 当数据量较少的时候它的底层存储结构为一块连续内存,称之为ziplist(压缩列表),它将所有的元素紧挨着一起存储,分配的是一块连续的内存;当数据量较多的时候将会变成quicklist(快速链表)结构。
  4. 可单纯的链表也是有缺陷的,链表的前后指针prev和next会占用较多的内存,会比较浪费空间,而且会加重内存的碎片化。在redis 3.2之后就都改用ziplist+链表的混合结构,称之为quicklist(快速链表)。

常用命令

添加命令

  1. lpush key value
    从左边插入元素(将一个或多个值插入到列表头部)

    127.0.0.1:6379> lpush ids 1
    (integer) 1
    127.0.0.1:6379> lrange ids 0 -1
    1) "1"
    127.0.0.1:6379> lpush ids 2
    (integer) 2
    127.0.0.1:6379> lrange ids 0 -1
    1) "2"
    2) "1"
    
  2. rpush key value
    从右边插入元素(将一个或多个值插入到列表的尾部(最右边))

    127.0.0.1:6379> rpush ids 3
    (integer) 3
    127.0.0.1:6379> lrange ids 0 -1
    1) "2"
    2) "1"
    3) "3"
    
  3. linsert key BEFORE|AFTER pivot value
    向某个元素前/后插入元素,返回结果为当前列表长度,注意列表不存在或者指定元素不存在列表中时,都将不执行任何操作。

    //元素3前插入0
    127.0.0.1:6379> linsert ids before 3 0
    (integer) 4
    127.0.0.1:6379> lrange ids 0 -1
    1) "2"
    2) "1"
    3) "0"
    4) "3"
    //元素3后插入0
    127.0.0.1:6379> linsert ids after 3 4
    (integer) 5
    127.0.0.1:6379> lrange ids 0 -1
    1) "2"
    2) "1"
    3) "0"
    4) "3"
    5) "4"
    

查询命令

  1. lrange key start end
    获取列表中指定范围内的元素列表;若start值大于列表end值则返回空列表
    如上已经展示过了
  2. lindex key index
    获取列表指定索引下标的元素

    127.0.0.1:6379> lindex ids 0
    "2"
    127.0.0.1:6379> lindex ids -1
    "4"
    
  3. llen key
    获取列表长度;列表不存在则返回0

    127.0.0.1:6379> llen ids
    (integer) 5
    

弹出/删除命令

  1. lpop key
    从列表左侧弹出元素并返回头部元素

    127.0.0.1:6379> lpop ids
    "2"
    127.0.0.1:6379> lrange ids 0 -1
    1) "1"
    2) "0"
    3) "3"
    4) "4"
    
  2. rpop key
    从列表右侧弹出元素并返回尾部元素

    127.0.0.1:6379> rpop ids
    "4"
    127.0.0.1:6379> lrange ids 0 -1
    1) "1"
    2) "0"
    3) "3"
    
  3. lrem key count value
    从列表中找到等于value的元素进行删除,根据count的不同分为三种情况:
    count > 0,从表头开始向表尾,移除数量为count个元素;
    count < 0,从表尾开始向表头,移除数量为count的绝对值个元素;
    count = 0,移除表中所有与 value 相等的值

    127.0.0.1:6379> lrem ids 0 3
    (integer) 1
    127.0.0.1:6379> lrange ids 0 -1
    1) "1"
    2) "0"
    
  4. ltrim key start end
    对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除

    127.0.0.1:6379> ltrim ids 0 0
    OK
    127.0.0.1:6379> lrange ids 0 -1
    1) "1"
    

修改命令

  1. lset key index value
    修改指定下标的元素的值设置为value

    127.0.0.1:6379> lset ids 0 0
    OK
    127.0.0.1:6379> lrange ids 0 -1
    1) "0"
    

阻塞弹出命令

  1. blpop key [key …] timeout
    移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时(单位秒)或发现可弹出元素为止
  2. brpop key [key …] timeout
    移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
    演示:
    开启三个reids连接窗口,第一个执行blpop ,第二个执行brpop ,第三个执行添加:
    可以看到窗口1和2执行完都已经阻塞在这里,这是因为ids中没有元素


    窗口3执行添加:lpush ids 1 2 3 4 5 6
    可以看到窗口1和2立即弹出对应元素:

应用场景

  1. 消息队列:lpop和rpush(或者反过来,lpush和rpop)能实现队列的功能
  2. 朋友圈的点赞列表、评论列表、排行榜:lpush命令和lrange命令能实现最新列表的功能,每次通过lpush命令往列表里插入新的元素,然后通过lrange命令读取最新的元素列表。

redis的list数据类型相关命令介绍及使用相关推荐

  1. redis的String数据类型相关命令介绍及使用

    文章目录 字符串命令 存值相关(set) 取值相关(get) 数值操作命令 加操作 减操作 BIT位操作命令 应用场景 字符串命令 存值相关(set) set key value 例如 set age ...

  2. redis的set数据类型相关命令介绍及使用

    文章目录 set简介 添加命令 查询命令 移动/删除命令 集合运算命令 差集运算 交集运算 并集运算 应用场景 set简介 redis集合set类型和list列表类型类似,都可以用来存储多个字符串元素 ...

  3. redis的hash数据类型相关命令介绍及使用

    文章目录 hash类型简介 添加命令 查询命令 删除命令 应用场景 hash类型简介 redis中的哈希(hash或者散列表),内部存储很多键值对以key - [Field-Value]的形式存储,也 ...

  4. redis有序集合sorted set(zset)数据类型相关命令介绍及使用

    文章目录 简介 添加命令 查询命令 递增类型 递减类型 删除命令 运算命令 skiplist 简介 Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员.不同的是每个元 ...

  5. 解析Redis操作五大数据类型常用命令

    摘要:分享经常用到一些命令和使用场景总结,以及对Redis中五大数据类型如何使用cmd命令行的形式进行操作的方法. 本文分享自华为云社区<Redis操作五大数据类型常用命令解析>,作者:灰 ...

  6. Linux安全关机命令以及相关命令介绍

    Linux安全关机命令以及相关命令介绍 致新手运维师 作为一名Linux运维师,应该明白Linux服务器运行时关机的正确方法,有助于我们在工作的时候不至于造成一些必要的损失.当然,Linux服务器作为 ...

  7. java hmget 最大值,【Redis】基本数据类型及命令操作(超详细)

    一.String 可以直接看每一大节的命令示例部分,敲一遍就大体会了 1.1 概述 字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数 ...

  8. Redis 几种数据类型的详细介绍

    文章目录 概述 Keys Strings Lists Hashes Sets Sorted sets Bitmaps HyperLogLogs 原文: https://redis.io/topics/ ...

  9. Redis的事务:相关命令 watch 与mysql事务的区别

    Redis事务的概念: Redis 事务的本质是一组命令的集合. 事务支持一次执行多个命令,一个事务中所有命令都会被序列化.在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不 ...

最新文章

  1. 大公司为什么都有API网关?没你想的那么简单!
  2. 操作系统学习:Linux0.12初始化详细流程-打开文件与加载可执行程序
  3. c语言 爬虫 socket,爬虫遇到 Socket,莫慌,肝就完了!
  4. O365(世纪互联)SharePoint 之站点个性化
  5. poj2175费用流消圈算法
  6. 【研究】Metasploit自动攻击模块
  7. Django-session的存放位置
  8. 10. GD32F103C8T6 定时器-测量pwm的占空比和频率
  9. 二级c语言上机题库下载,二级C语言上机题库(全).doc
  10. java table注解_java注解简单使用
  11. ArrayList集合学生管理系统,java笔试基础题
  12. msfvenom制作简易后门程序
  13. 通过Matplotlib画sin(x)
  14. 纯css svg 改变图片颜色 ios android 小程序
  15. Oracle 如何删除控制文件中rman备份到磁带的备份集信息(RMAN-06091)
  16. 如何做好区块链社区?得社区者得天下
  17. DataStream API【3】
  18. 【Oracle】-【权限-ORA-04043】- object does not exist
  19. libvirt numatune 原理
  20. 记互联网创业公司二三事

热门文章

  1. 基于Android的乡镇旅游指南APP-景点-酒店预订系统
  2. Auto-Keras与AutoML: 入门指南
  3. 华为HMS Core音频服务,让有声世界更动听
  4. jq获取兄弟节点_jQuery 获取兄弟元素的几种方法
  5. Franzis SHARPEN projects 3 professional 3.31.03465 特别版 Mac 照片特效编辑软件
  6. 从乡镇副镇长辞职到入职互联网大厂,我走了一条反方向路
  7. 重磅下载 | 核心系统 100% 上云,揭秘双11背后的云原生实践
  8. 数据清洗工具kettle
  9. 状态管理vuex的规范化使用~~总结
  10. AndroidTV开发14优雅地实现超长大图加载