前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深入Redis的List

深入Redis的List

作者头像
desperate633
发布2018-08-23 16:01:23
9890
发布2018-08-23 16:01:23
举报
文章被收录于专栏:desperate633desperate633

Redis的List

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)

一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。

因为Redis的List同时支持头和尾的操作,所以实际上我们直接理解为List为一个双向的链表,即可用作栈,也可以用作队列。

List的应用场景

我们假设要获得最新的10个用户的登录的信息,传统关系型数据库的话,我们可以如下操作:

代码语言:javascript
复制
select * from user order by logintime limit 10

我们可以很简单的用一个sql语句就完成这个查询操作。

但是问题在于,假设我们现在数据库的数据量很大,也就是用户的数量很多,那么我们遍历查询一次所需要的时间是很多的,也就是操作会变慢,而且对数据库的负载也增加了,同时如果我们对相应字段建立索引的话,那么对数据库的资源也是一种消耗。

这个时候就轮到nosql上场了,我们可以利用redis的list类型,在list中只保留最新的10个数据,每进来一个新数据,就删除一个旧数据,这样我们在list中维护的就永远是最新登录的十个用户。

Redis 列表命令

Lpush 命令

Redis Lpush 命令将一个或多个值插入到列表头部。 如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。 当 key 存在但不是列表类型时,返回一个错误。 redis Lpush 命令基本语法如下:

代码语言:javascript
复制
redis 127.0.0.1:6379> LPUSH KEY_NAME VALUE1.. VALUEN

Rpop 命令

Redis Rpop 命令用于移除并返回列表的最后一个元素。 语法 redis Rpop 命令基本语法如下:

代码语言:javascript
复制
redis 127.0.0.1:6379> RPOP KEY_NAME 

返回值: 列表的最后一个元素。 当列表不存在时,返回 nil 。

Lrange 命令

Redis Lrange 返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。 语法 redis Lrange 命令基本语法如下:

代码语言:javascript
复制
redis 127.0.0.1:6379> LRANGE KEY_NAME START END

返回值 一个列表,包含指定区间内的元素。

ltrim

Redis Ltrim 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。 下标 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。 语法 redis Ltrim 命令基本语法如下:

代码语言:javascript
复制
redis 127.0.0.1:6379> LTRIM KEY_NAME START STOP

返回值 命令执行成功时,返回 ok 。

Lrem 命令

Redis Lrem 根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。 COUNT 的值可以是以下几种:

  • count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。
  • count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。
  • count = 0 : 移除表中所有与 VALUE 相等的值。

语法 redis Lrem 命令基本语法如下:

代码语言:javascript
复制
redis 127.0.0.1:6379> LREM KEY_NAME COUNT VALUE

返回值 被移除元素的数量。 列表不存在时返回 0 。

Linsert 命令

Redis Linsert 命令用于在列表的元素前或者后插入元素。 当指定元素不存在于列表中时,不执行任何操作。 当列表不存在时,被视为空列表,不执行任何操作。 如果 key 不是列表类型,返回一个错误。 语法 redis Linsert 命令基本语法如下:

代码语言:javascript
复制
redis 127.0.0.1:6379> LINSERT KEY_NAME BEFORE EXISTING_VALUE NEW_VALUE 

返回值 如果命令执行成功,返回插入操作完成之后,列表的长度。 如果没有找到指定元素 ,返回 -1 。 如果 key 不存在或为空列表,返回 0 。

Lset 命令

Redis Lset 通过索引来设置元素的值。 当索引参数超出范围,或对一个空列表进行 LSET 时,返回一个错误。 关于列表下标的更多信息,请参考 LINDEX 命令。 语法 redis Lset 命令基本语法如下:

代码语言:javascript
复制
redis 127.0.0.1:6379> LSET KEY_NAME INDEX VALUE

返回值 操作成功返回 ok ,否则返回错误信息。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.08.27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Redis的List
  • List的应用场景
  • Redis 列表命令
    • Lpush 命令
      • Rpop 命令
        • Lrange 命令
          • ltrim
            • Lrem 命令
              • Linsert 命令
                • Lset 命令
                相关产品与服务
                云数据库 Redis
                腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档