暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Redis每日一练(21):LPUSH和LRANGE命令

原创 AlbertS 2019-12-22
3244

版权声明: 转载请注明出处!本文采用 知识共享 署名-非商业性使用-禁止演绎 4.0 国际许可协议

前言

从这篇笔记开始学习操作 list 类型的命令,这个list就是一个列表,很像C++的中的 list 或者 vector,它有很大的作用,有在两端插入和取出的多种命令,所以可以作为栈或者队列使用,能用来缓存数据,实现LRU队列,消息缓存等等,接下来看一下最基础的插入和查询操作。

这篇笔记中的2个命令分别是 LPUSH 、 LRANGE ,可以参考:

LPUSH

  • 最早出现版本:1.0.0
  • 时间复杂度:O(1) (对于每个元素来说)
  • 命令参数:LPUSH key element [element …]
  • 操作类型:lists
  • 官方文档

作用

这个命令是学习 Redis 以来第一个插入命令,没有之前的命令可以借鉴,其实的它的作用也很简单,就是将插入的数据放在列表的开头,假设列表是从左往右放置的,每次使用 LPUSH 命令插入元素就是把这个元素放在最左侧,所以 LPUSH 这个命令可以理解为 list push,也可以理解为 left push,都符合使用场景的

这个命令的第一个参数应该是一个表示列表的键,如果指定的键不存在则会先初始化一个空列表,然后再进行插入操作,如果指定的键不是列表类型,则使用这个 LPUSH 命令插入时会报错,成功插入后返回列表中元素个数。

自从2.4版本之后,这个命令可以一次性插入多个元素,就像按顺序多次插入一个元素一样,所以插入后的元素顺序与插入命令后面跟着的元素顺序是反着的。

练习

先尝试插入一个元素,再插入多个元素,查看一下返回值:

127.0.0.1:6379> LPUSH cachelist start
(integer) 1
127.0.0.1:6379> LPUSH cache list a b c test
(integer) 5
127.0.0.1:6379>

对一个不是 list 类型的键使用插入命令会报错:

127.0.0.1:6379> HSET users:101 name albert
(integer) 0
127.0.0.1:6379> LPUSH users:101 test
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379>

LRANGE

  • 最早出现版本:1.0.0
  • 时间复杂度:O(S+N)(S是起始位置的偏移量,N是查询的元素个数)
  • 命令参数:LRANGE key start stop
  • 操作类型:lists
  • 官方文档

作用

返回指定索引范围的元素,上面学习了 LPUSH 命令可以在一个列表中插入元素,如果想查看元素就可以使用 LRANGE 命令,这个命令可以指定 list 类型的键,还可以指定起始元素索引和结束元素索引。

列表的第一个元素索引是0,第二个元素索引是1,依次类推,也可以使用负数索引,-1表示最后一个元素索引,-2表示倒数第二个元素的索引。

如果指定的起始索引超过了列表的长度,那么会返回一个空的列表,如果结束索引超过了列表的长度,那么查询到列表结尾就结束了。

还有一点需要注意的就是这个指定的列表索引是包含两个端点的,比如 LRANGE cachelist 0 3,一共最多可以返回4个元素,是包含索引0和索引3制度应的元素的,这和很多语言是不同的,比如 Python 中的 range(3) 只会返回0, 1, 2。

练习

查询列表的第2个到第5个一共4个元素:

127.0.0.1:6379> LPUSH cache a b c d 2 4 g test 5
(integer) 9
127.0.0.1:6379> LRANGE cache 1 4
1) "test"
2) "g"
3) "4"
4) "2"
127.0.0.1:6379>

获取整个列表数据:

127.0.0.1:6379> LRANGE cache 0 -1
1) "5"
2) "test"
3) "g"
4) "4"
5) "2"
6) "d"
7) "c"
8) "b"
9) "a"

总结

  1. LPUSH 命令可以一次性在列表的左侧插入多个元素,返回成功插入后列表的元素总个数。
  2. LRANGE 命令可以根据参数指定的索引返回列表中对应位置的元素。

2019-12-8 21:21:04

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
1人已赞赏
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论