版权声明: 转载请注明出处!本文采用 知识共享 署名-非商业性使用-禁止演绎 4.0 国际许可协议
前言
前两篇笔记学习了列表分别从两端添加元素和弹出元素,实际上这个列表类型还可以实现随机存取,貌似一转身又从 list 变成了 vector,可以按照索引来获取元素和设置元素。
这篇笔记中的2个命令分别是 LSET 、 LINDEX ,可以参考:
- 《Redis每日一练(01):GET和SET命令》 中的 SET 和 GET 命令
LSET
- 最早出现版本:1.0.0
- 时间复杂度:O(N)
- 命令参数:LSET key index element
- 操作类型:lists
- 官方文档
作用
设置指定索引位置的元素,如果索引在列表中不存在,那么 Redis 会给出报错信息。
看到这个命令的时间复杂度,可以想象,还是在首尾添加元素快,如果通过索引设置指定位置的元素的值,貌似是通过遍历实现。
练习
使用 LPUSH 命令插入几个元素后,再通过 LSET 命令设置元素的值:
127.0.0.1:6379> LPUSH cache a 3 now test (integer) 4 127.0.0.1:6379> LPUSH cache bg (integer) 5 127.0.0.1:6379> LRANGE cache 0 -1 1) "bg" 2) "test" 3) "now" 4) "3" 5) "a" 127.0.0.1:6379> LSET cache 0 zz OK 127.0.0.1:6379> LSET cache 4 end OK 127.0.0.1:6379> LRANGE cache 0 -1 1) "zz" 2) "test" 3) "now" 4) "3" 5) "end" 127.0.0.1:6379>
复制
测试当指定的列表不存在或者指定的索引不存在时:
127.0.0.1:6379> LSET cachelist 0 zz (error) ERR no such key 127.0.0.1:6379> LRANGE cache 0 -1 1) "zz" 2) "test" 3) "now" 4) "3" 5) "end" 127.0.0.1:6379> LSET cache 6 go (error) ERR index out of range 127.0.0.1:6379>
复制
通过上面的测试发现,当指定的键不存在时报错ERR no such key
,当指定的索引超过范围时报错ERR index out of range
。
LINDEX
- 最早出现版本:1.0.0
- 时间复杂度:O(N)
- 命令参数:LINDEX key index
- 操作类型:lists
- 官方文档
作用
这个命令就是返回指定索引的元素,第一个元素的索引是0,第二个是1,依次类推,也可以使用负数索引,-1表示最后一个元素索引,-2表示倒数第二个元素的索引。
当指定的索引不存在或者指定的键不存在时返回nil,当指定的键不是list时会给出报错信息。
这个命令的名字感觉起的很奇怪,为什么叫 LINDEX 而不叫 LGET 呢? 我感觉 LGET 更符合他的含义,虽然是通过 index 获取元素,但是本质上是get啊!
练习
使用 RPUSH 命令创建列表并插入元素,然后使用 LINDEX 命令指定索引的元素:
127.0.0.1:6379> RPUSH cache z x c v (integer) 4 127.0.0.1:6379> RPUSH cache 2 d 4 (integer) 7 127.0.0.1:6379> LRANGE cache 0 -1 1) "z" 2) "x" 3) "c" 4) "v" 5) "2" 6) "d" 7) "4" 127.0.0.1:6379> LINDEX cache 3 "v" 127.0.0.1:6379> LINDEX cache 5 "d" 127.0.0.1:6379>
复制
当指定的索引不存在或者键不存在或者键不是一个list时:
127.0.0.1:6379> LRANGE cache 0 -1 1) "z" 2) "x" 3) "c" 4) "v" 5) "2" 6) "d" 7) "4" 127.0.0.1:6379> LINDEX cache 10 (nil) 127.0.0.1:6379> DEL cache (integer) 1 127.0.0.1:6379> LINDEX cache 0 (nil) 127.0.0.1:6379> SET cache test OK 127.0.0.1:6379> LINDEX cache test (error) WRONGTYPE Operation against a key holding the wrong kind of value 127.0.0.1:6379>
复制
总结
- LSET 命令可以修改列表中指定索引位置的元素,若索引不存在会报错。
- LINDEX 命令可以获取指定索引位置的元素,当索引不存在或者键不存在会返回nil。
2019-12-9 20:32:46
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
国产非关系型数据库 Eloqkv 初体验
JiekeXu
128次阅读
2025-04-10 23:51:35
融合Redis缓存的PostgreSQL高可用架构
梧桐
85次阅读
2025-04-08 06:35:40
Redis概要
听溪
38次阅读
2025-04-11 10:23:10
安装与配置Redis
鲁鲁
32次阅读
2025-04-11 10:26:10
Redis数据库——Cluster集群模式
编程Cookbook
28次阅读
2025-04-16 15:34:44
使用Jedis访问Redis数据库
怀念和想念
27次阅读
2025-04-11 15:08:30
Redis geo 实战:“附近的人”实现,打造社交的新维度
老王两点中
25次阅读
2025-04-11 09:02:30
Redis改协议内幕曝光!核心开发者亲述被“踢出局”,外部贡献者几乎全跑光了!
老鱼笔记
24次阅读
2025-04-17 10:41:56
Redis提供的持久化机制
luyingjun
22次阅读
2025-04-11 15:11:05
Redis
鲁鲁
21次阅读
2025-04-07 20:14:35