一. 列表对象概述

  Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。在第9篇中讲到了列表对象的编码可以是ziplist或者linkedlist。ziplist编码的列表对象使用压缩列表作为底层实现,每个压缩列表节点(entry)保存了一个列表元素。例如使用rpush命令将创建一个列表对象作为numbers键的值。

    127.0.0.1:> rpush numbers  "three"
(integer)
127.0.0.1:> object encoding numbers
"quicklist"

  通过上面查看底层数据结构并不是ziplist,而是quicklist结构。 该结构是在redis 3.2版本中新加的数据结构,用在列表的底层实现,由ziplist组成的双向链表。链表中的每一个节点都以压缩列表ziplist的结构保存着数据,而ziplist有多个entry节点,保存着数据。相当与一个quicklist节点保存的是一片数据,而不再是一个数据。

  例如:一个quicklist结构有4个quicklistNode节点,每个节点都保存着1个ziplist结构,每个ziplist的大小不超过8kb,ziplist的entry节点中的value成员保存着数据。以后在深入了解quicklist数据结构。

二. 列表对象命令

     -- rpush 命令可向list的右边(尾部)添加一个新元素,读出来就是(A,B,first)。
127.0.0.1:> rpush mylist A
(integer)
127.0.0.1:> rpush mylist B
(integer)
127.0.0.1:> rpush mylist first
(integer) -- lrange 命令获取列表指定范围内的元素,带有两个索引,一定范围的第一个和最后一个元素。-1表示最后一个元素,-2表示list中的倒数第二个元素,以此类推。下面是读出列表mylist。
127.0.0.1:> lrange mylist -
) "A"
) "B"
) "first" -- lpush命令可向list的左边(头部)添加一个新元素,读出来就是(first,B,A)。
127.0.0.1:> lpush mylist A
(integer)
127.0.0.1:> lpush mylist B
(integer)
127.0.0.1:> lpush mylist first
(integer)
127.0.0.1:> lrange mylist -
) "first"
) "B"
) "A" -- Blpop 命令移出第一个元素并返回列表的第一个元素. 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。下面是移除了每一个first元素。
127.0.0.1:> blpop mylist
) "mylist"
) "first"
127.0.0.1:> lrange mylist -
) "B"
) "A" -- Brpop 命令移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。下面二个元素,移除了最后一个。
127.0.0.1:> lrange mylist -
) "B"
) "A"
127.0.0.1:> brpop mylist
) "mylist"
) "A"
127.0.0.1:> lrange mylist -
) "B" -- Brpoplpush 命令从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
-- 下面mylist2列表获取了mylist列表的一个元素
127.0.0.1:> brpoplpush mylist mylist2
"B" --弹出一个值, 移到了mylist2中,设置超时时间
127.0.0.1:> lrange mylist -
(empty list or set) -- 空列表
127.0.0.1:> lrange mylist2 -
) "B"
) "C" -- Lindex 命令用于通过索引获取列表中的元素。你也可以使用负数下标,以 - 表示列表的最后一个元素, - 表示列表的倒数第二个元素,以此类推。下面获取mylist2的第一个元素。
127.0.0.1:> lrange mylist2 -
) "B"
) "C"
127.0.0.1:> lindex mylist2
"B"
-- Linsert 命令用于在列表的元素前或者后插入元素。格式: LINSERT key BEFORE|AFTER pivot value, 下面将A插入到已有C元素的前面。
127.0.0.1:> linsert mylist2 before "C" "A"
(integer)
127.0.0.1:> lrange mylist2 -
) "B"
) "A"
) "C"
    --Llen 命令用于返回列表的长度。
127.0.0.1:> llen mylist2
(integer)
--Lpop 命令用于移除并返回列表的第一个元素
127.0.0.1:> lpop mylist2
"B"
127.0.0.1:> lrange mylist2 -
) "A"
) "C" --Lpush 命令将一个或多个值插入到列表头部, 上面有单个元素添加,还可以是多个元素添加,这里不在演示。
  --Lpushx 将一个或多个值插入到已存在的列表头部。key的列表中必须要元素。
127.0.0.1:> lpushx mylist "A"
(integer) --添加失败,因为mylist是空列表
127.0.0.1:> lrange mylist -
(empty list or set)
127.0.0.1:> lpush mylist A B
(integer)
127.0.0.1:> lpushx mylist C
(integer) -- 添加成功。
127.0.0.1:> lrange mylist -
) "C"
) "B"
) "A" -- Lrem 根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。 意思是列表中元素与value相等的,移除count个。
127.0.0.1:> lpush my "one" "two" "three" "one"
(integer)
127.0.0.1:> lrange my -
) "one"
) "three"
) "two"
) "one"
127.0.0.1:> lrem my "one" --移除1个one元素
(integer)
127.0.0.1:> lrange my -
) "three"
) "two"
) "one" -- Lset 通过索引来设置元素的值。
127.0.0.1:> lrange my -
) "three"
) "two"
) "one"
127.0.0.1:> lset my "four"
OK -- 第三个元素的值从onw 改为了four
127.0.0.1:> lrange my -
) "three"
) "two"
) "four" --Ltrim 对一个列表只保留指定区间内的元素。不在指定区间之内的元素都将被删除。下标 表示列表的第一个元素,以 表示列表的第二个元素。 格式 LTRIM KEY_NAME START STOP
127.0.0.1:> lrange my -
) "three"
) "two"
) "four"
127.0.0.1:> ltrim my -
OK -- 第一个元素将被删除
127.0.0.1:> lrange my -
) "two"
) "four" -- Rpop 命令用于移除最后一个元素,并返回该元素.
127.0.0.1:> lrange my -
) "two"
) "four"
127.0.0.1:> rpop my
"four" -- 移除最后一个元素
127.0.0.1:> lrange my -
) "two" 其它:
--Rpoplpush 命令用于移除列表的最后一个元素,并将该元素添加到另一个列表并返回。
--Rpush 命令用于将一个或多个值插入到列表的尾部(最右边)。上面有单个元素添加,还可以是多个元素添加,这里不在演示。
--Rpushx 命令用于将一个或多个值插入到已存在的列表尾部(最右边)

  

redis 系列11 列表对象的更多相关文章

  1. Python操作redis系列之 列表(list) (四)

    # -*- coding: utf- -*- import redis r =redis.Redis(host=,password="ZBHRwlb1608") 1. Lpush ...

  2. Python操作redis系列之 列表(list) (五)(转)

    # -*- coding: utf-8 -*- import redis r =redis.Redis(host=") 1. Lpush 命令将一个或多个值插入到列表头部. 如果 key 不 ...

  3. Python操作redis系列之 列表(list) (五)

    # -*- coding: utf- -*- import redis r =redis.Redis(host=,password=") 1. Lpush 命令将一个或多个值插入到列表头部. ...

  4. redis 系列15 数据对象的(类型检查,内存回收,对象共享)和数据库切换

    一.  概述 对于前面的五章中,已清楚了数据对象的类型以及命令实现,其实还有一种数据对象为HyperLogLog,以后需要用到再了解.下面再了解类型检查,内存回收,对象共享,对象的空转时长. 1.1 ...

  5. redis 系列10 字符串对象

    一. 字符串对象编码 Redis中字符串可以存储3种类型,分别是字节串(byte string).整数.浮点数.在上章节中讲到字符串对象的编码可以是int, raw,embstr. 如果一个字符串对象 ...

  6. redis 系列13 集合对象

    一. 集合对象概述 这里的集合是string类型的无序集合,在集合对象中集合成员是唯一的,这就意味着集合中不能出现重复的数据.集合是通过哈希表实现的,集合中最大的成员数为 232-1 (4294967 ...

  7. python基础:11.列表对象属性排序

    def __lt__ def __gt__ def __repr__

  8. 【目录】redis 系列篇

    随笔分类 - redis 系列篇 redis 系列27 Cluster高可用 (2) 摘要: 一. ASK错误 集群上篇最后讲到,对于重新分片由redis-trib负责执行,关于该工具以后再介绍.在进 ...

  9. Python操作redis系列以 哈希(Hash)命令详解(四)

    # -*- coding: utf-8 -*- import redis #这个redis不能用,请根据自己的需要修改 r =redis.Redis(host=") 1. Hset 命令用于 ...

随机推荐

  1. 关于二进制枚举-计蒜客-得到整数X

    某君有 n个互不相同的正整数,现在他要从这 n 个正整数之中无重复地选取任意个数,并仅通过加法凑出整数 X.求某君有多少种不同的方案来凑出整数 X. 输入格式 第一行,输入两个整数 n,X(1≤n≤2 ...

  2. python kafka权限校验client.id

    kafka集群有权限校验,在连接时需要加入client.id.但pykafka不能配置该选项.搜索了一下,需要使用confluent-kafka 链接: https://blog.csdn.net/l ...

  3. Java实现杨辉三角

    杨辉三角用了两种方法解决 二维数组/递归方法 +—————————————————————————— import java.util.Scanner; public class YangHui02 ...

  4. 【QT】QApplication简介

    1.QApplication QApplication类管理GUI程序的控制流和主要设置,是基于QWidget的,为此特化了QGuiApplication的一些功能,处理QWidget特有的初始化和结 ...

  5. Java中的异步通知

    在我们的日常开发中,经常会遇到这样的问题--"我让你做一件事情,但是你做得很慢,并不能够立马返回给我结果,害我一直在那儿等着你给我返回结果,什么都做不了". 程序是自上而下顺序执行 ...

  6. Django合集

    Django基础 Django--简介 Django--web框架简介 浅析uWSGI.uwsgi.wsgi Django--url(路由)配置 Django--模板层 Django--视图层 Dja ...

  7. 通配符的匹配很全面, 但无法找到元素 'context:property-placeholder' 的声明。

    在Spring相应包导入正确的前提下,出现这个异常,是因为我们在引入命名空间的时候,没有正确引入它的DTD解析文件,以上面的context为例,解决办法如下: 在引入 xmlns:context=&q ...

  8. JDK各个版本的新特性

    对于很多刚接触java语言的初学者来说,要了解一门语言,最好的方式就是要能从基础的版本进行了解,升级的过程,以及升级的新特性,这样才能循序渐进的学好一门语言.今天先为大家介绍一下JDK1.5版本到JD ...

  9. React(八)样式及CSS模块化

    (1)内联样式 注:样式要采用驼峰命令发,如果非要使用原生css样式写法,需加引号 缺点:一些动画,伪类不能使用 class App extends Component { constructor(p ...

  10. rest_framework之认证源码剖析

    如果我们写API有人能访问,有人不能访问,则需要些认证. 如何知道该用户是否已登入? 如果用户登入成功,则给用户一个随机字符串,去访问另一个页面. 以前写session的时候,都是把session写c ...