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


    1、概述

    单键多值:Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。

     2、相关操作

    • lpush key value1 [value2]--------------将一个或多个值插入到列表头部,返回插入数量,从1开始
    • lpushx key value--------------将一个值插入到已存在的列表头部,返回integer,0-插入失败,成功返回当前list数量
    • rpush key value1 [value2]--------------在列表中添加一个或多个值,返回integer,0-插入失败,成功返回当前list数量
    • rpushx key value------------------为已存在的列表添加值,返回integer,0-插入失败,成功返回当前list数量
    • lset key index value--------------通过索引设置列表元素的值
    • linsert key BEFORE|AFTER pivot value----------------在列表的元素(pivot)前或者后插入元素,返回integer,-1-插入失败,成功返回当前list数量
    • brpoplpush source destination timeout---------------从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹
    • lindex key index------------------通过索引获取列表中的元素
    • llen key----------------获取列表长度
    • lrange key start stop-----------------获取列表指定范围内的元素,start、stop超出范围,只返回范围内存在的元素
    • blpop key1 [key2 ] timeout-----------------移出并获取列表的第一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
    • brpop key1 [key2 ] timeout------------------移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
    • rpoplpush source destination--------------移除列表的最后一个元素,并将该元素添加到另一个列表并返回
    • lpop key-------------------移出并获取列表的第一个元素
    • lrem key count value--------------移除列表中count个value元素,返回移除成功的数量
    • rpop key---------------移除并获取列表最后一个元素
    • ltrim key start stop---------------对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。

    3、数据结构

    • List 的数据结构为快速链表 quickList。
    • 首先在列表元素较少的情况下会使用一块连续的内存存储,这个结构是 ziplist,也即是压缩列表。它将所有的元素紧挨着一起存储,分配的是一块连续的内存。
    • 当数据量比较多的时候才会改成 quicklist。因为普通的链表需要的附加指针空间太大,会比较浪费空间。比如这个列表里存的只是 int 类型的数据,结构上还需要两个额外的指针 prev 和 next。

                               

    • Redis 将链表和 ziplist 结合起来组成了 quicklist。也就是将多个 ziplist 使用双向指针串起来使用。这样既满足了快速的插入删除性能,又不会出现太大的空间冗余。
  • 相关阅读:
    java.lang.NoClassDefFoundError异常处理
    CMS之promotion failed&concurrent mode failure
    jvm 内存,线程,gc分析
    spring 参数校验
    常用的正则表达式
    《深入理解java虚拟机-高效并发》读书笔记
    ConcurrentHashMap源码分析
    web前端性能调优(二)
    由自动装箱和拆箱引发我看Integer源码
    阅读《effective java-第17条》遇到的问题解决与分享
  • 原文地址:https://www.cnblogs.com/mango1997/p/16210273.html
Copyright © 2020-2023  润新知