4、列表

列表(list)类型是用来存储多个有序的字符串,如图2-18所示,a、b、c、d、e五个元素从左到右组成一个有序列表,列表中的每个字符串称为元素,一个列表最大可以存储2^32-1个元素。在Redis中,可以对列表两端插入(push)和弹出(pop),还可以获取指定范围的元素列表、获取指定索引下标的元素等(如图2-18和图2-19所示)。列表是一种比较灵活的数据结构,它可充当栈和队列的角色,在实际开发中有很多应用场景。

列表类型有如下两个特点:

(1)列表中的元素是有序的。这就意味着可以通过索引下表获取某个元素或者某个范围内的元素列表,例如要获取图2-19的第5个元素,可以执行lindex user:1: message4 (索引从0开始)就可以得到元素e。

(2)列表中的元素可以是重复的。例如图2-20所示列表中包含两个字符串a。

4.1 命令

按照对列表的5种操作类型对命令进行介绍,命令如表2-4所示。

4.1.1 添加操作

(1)从右边插入元素

 rpush key value [value ...]

程序举例:

可以使用 lrange 0 -1 命令从左到右获取列表中的所有元素。

(2)从左边插入元素

 lpush key value [value ...]

使用方法和rpush相同,只不过从左侧插入。

(3)向某个元素前或者后插入元素

 linsert key before | after pivot value

linsert命令会从列表中找出等于pivot的元素,在其前(before)护着后(after)插入新的元素value,例如下面的操作会在列表的元素b前插入java:

返回结果为4,代表当前命令的长度,可使用lrange命令查看当前列表。

4.1.2 查找

(1)获取指定范围内的元素列表

 lrange key start end

lrange操作会获取列表指定索引范围所有的元素。索引下表有2个特点:

  • 索引下标从左到右分别是0到N-1,但是从右到左分别是-1和-N。
  • lrange中的end选项包含了自身,这和很多编程语言是不同的。

例如想获取列表的第2到第4个元素,可以执行下列操作:

(2)获取列表指定索引下表的元素

 lindex key index

例如当前列表最后一个元素为a:

(3)获取列表长度

 llen key

例如下面示例当前列表长度为4:

4.1.3 删除

(1)从列表左侧弹出元素

 lpop key

如下操作会将列表最左侧的元素a弹出,弹出后列表变为java、b、c

(2)从列表右侧弹出元素

 rpop key

(3)删除指定元素

 lrem key count value

lrem命令会从列表中找到等于value的元素并进行删除,根据count的不同分为3种情况:

  • count > 0 ,从左到右最多删除count个元素;
  • count < 0 ,从右到左最多删除count绝对值个元素;
  • count = 0 ,删除所有。

例如下述操作从列表左边开始删除4个为a的元素:

(4)按照索引范围修剪列表

 ltrim key start end

例如下述操作只保留了listkey列表中的第2到第4个元素:

4.1.4 修改

修改指定索引下标的元素:

 lset key index newValue

下面的操作会将列表listkey中的第3个元素设置为python:

4.1.5 阻塞操作

4.2 内部编码

列表类型的内部编码有2种:

  • ziplist(压缩列表):当列表的元素个数小于list-max-ziplist-entries配置(默认为512个),同时列表中每个元素的值都小于list-max-ziplist-value配置时(默认64字节),redis会选用ziplist来作为列表内部实现来减少内存的使用。
  • linkedlist(链表):当列表类型无法满足ziplist的条件时,redis会使用linkedlist作为列表的内部实现。

4.3 使用场景

4.3.1 消息队列

如图2-21所示,redis的lpush+brpop命令组合可以实现阻塞队列,生产者客户端使用lrpush从列表左侧插入元素,多个客户端使用brpop命令阻塞式的“抢”列表尾部的元素,多个客户端保证了消费者的负载均衡以及高可用性。

4.3.2 文章列表

【redis 学习系列】API的理解与使用(三)的更多相关文章

  1. 分布式缓存技术redis学习系列(五)——redis实战(redis与spring整合,分布式锁实现)

    本文是redis学习系列的第五篇,点击下面链接可回看系列文章 <redis简介以及linux上的安装> <详细讲解redis数据结构(内存模型)以及常用命令> <redi ...

  2. 分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)

    本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...

  3. 分布式缓存技术redis学习系列

    分布式缓存技术redis学习系列(一)--redis简介以及linux上的安装以及操作redis问题整理 分布式缓存技术redis学习系列(二)--详细讲解redis数据结构(内存模型)以及常用命令 ...

  4. redis学习系列

    redis学习系列 基本看完 最近在看redis的代码,简单记录下自己认为重要的点,自己写比较费时间的,我会把查到的资料贴出来方便查看 淘宝的redis内存分析 http://www.searchtb ...

  5. C# Redis学习系列三:Redis配置主从

    Redis配置主从 主IP :端口      192.168.0.103 6666 从IP:端口       192.168.0.108 3333 配置从库 (1)安装服务: redis-server ...

  6. Python操作redis学习系列之(集合)set,redis set详解 (六)

    # -*- coding: utf-8 -*- import redis r = redis.Redis(host=") 1. Sadd 命令将一个或多个成员元素加入到集合中,已经存在于集合 ...

  7. C# Redis学习系列二:Redis基本设置

    上一篇:C# Redis学习系列一:Redis的认识.下载.安装.使用 一.redis 设置密码 使用下载好的 redis-cli.exe 指令: 1.设置密码: config set require ...

  8. Redis学习系列一Linux环境搭建

    1.简介 Redis是互联网技术架构中在存储系统中用的最广泛的中间件,是中高级后端工程师技术面试中面试官最喜欢问的工程技能之一.所以Redis是.Net技术开发必须掌握的技能之一.所以通过这个系列的随 ...

  9. 【redis 学习系列】API的理解与使用(一)

    Redis提供了5种数据结构,以下介绍一些预备知识以及Redis的5种数据结构 1.预备知识 1.1 全局命令 Redis的5种数据结构,它们是键值对中的值,对于键来说有一些通用的命令. (1)查看所 ...

  10. 【redis 学习系列】API的理解与使用(二)

    3.哈希 几乎所有的语言都支持了哈希(hash)类型.在Redis中,哈希类型是指键值本身又是一个键值对结构,形如:value = {{field, value} ... {field, value} ...

随机推荐

  1. Web API 自动生成接口文档

    1.添加NuGet程序包 Microsoft ASP.NET Web API 2.2 Help Page      (这是微软官方的) A Simple Test Client for ASP.NET ...

  2. js实现div转图片并保存

    最近工作中遇到的需求,将div转成图片并保存. 1.准备需要用到的js插件jquery-1.8.2.js,html2canvas.min.js(将div转换为canvas),bluebird.js(用 ...

  3. winfrom_动态添加按钮button(设置颜色,大小,按钮字体大小、颜色,位置,事件)

    List<string> strColor = new List<string>(); strColor.Add("#e67817"); strColor. ...

  4. Docker Registry搭建

    一.前言 Docker官方镜像仓库 访问速度很慢,Docker Registry允许搭建我们自己的镜像仓库,为实现镜像拉取.推送提供便利. 二.安装与启动 1.创建目录 mkdir /usr/loca ...

  5. 14.SpringMVC核心技术-类型转换器

    类型转换器 在前面的程序中,表单提交的无论是 int 还是 double 类型的请求参数,用于处理该请求 的处理器方法的形参, 均可直接接收到相应类型的相应数据,而非接收到 String 再手工转换. ...

  6. Django 开发相关知识 整理

    前言 前端ajax HTTP请求头 ajax上传文件 jsonp跨域 URL 设计 分发 url参数编码 反向生成url 视图 request对象 POST url信息 视图返回值 HttpRespo ...

  7. MPU6050应用

    @2019-08-07 [小记] MPU6050开发 -- 基本概念简介 MPU6050原理详解及实例应用 详解卡尔曼滤波原理 卡尔曼算法精讲与C++实现

  8. Hive的JDBC连接

    首相要安装好hive 1.首先修改配置文件文件为hive 路径下的  conf/hive-sit.xml 将内容增加 <property> <name>hive.server2 ...

  9. [codeforces792C][dp]

    https://codeforc.es/contest/792/problem/C C. Divide by Three time limit per test 1 second memory lim ...

  10. Spring Boot 跨域访问

    如何在 Spring Boot 中配置跨域访问呢? Spring Boot 提供了对 CORS 的支持,您可以实现WebMvcConfigurer 接口,重写addCorsMappings 方法来添加 ...