Redis的List类型
Redis 列表命令
下表列出了列表相关的基本命令:
序号 | 命令及描述 |
---|---|
1 | BLPOP key1 [key2 ] timeout 移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 |
2 | BRPOP key1 [key2 ] timeout 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 |
3 | BRPOPLPUSH source destination timeout 从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 |
4 | LINDEX key index 通过索引获取列表中的元素 |
5 | LINSERT key BEFORE|AFTER pivot value 在列表的元素前或者后插入元素 |
6 | LLEN key 获取列表长度 |
7 | LPOP key 移出并获取列表的第一个元素 |
8 | LPUSH key value1 [value2] 将一个或多个值插入到列表头部 |
9 | LPUSHX key value 将一个值插入到已存在的列表头部 |
10 | LRANGE key start stop 获取列表指定范围内的元素 |
11 | LREM key count value 移除列表元素 |
12 | LSET key index value 通过索引设置列表元素的值 |
13 | LTRIM key start stop 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。 |
14 | RPOP key 移除列表的最后一个元素,返回值为移除的元素。 |
15 | RPOPLPUSH source destination 移除列表的最后一个元素,并将该元素添加到另一个列表并返回 |
16 | RPUSH key value1 [value2] 在列表中添加一个或多个值 |
17 | RPUSHX key value 为已存在的列表添加值 |
示例如下:
[root@iZbp143t3oxhfc3ar7jey0Z ~]# redis-cli 127.0.0.1:6379> lpush list1 a b c d e (integer) 5 127.0.0.1:6379> LRANGE list1 0 5 1) "e" 2) "d" 3) "c" 4) "b" 5) "a" 127.0.0.1:6379> LRANGE list1 0 7 1) "e" 2) "d" 3) "c" 4) "b" 5) "a" 127.0.0.1:6379> RPUSH list2 1 2 3 4 5 (integer) 5 127.0.0.1:6379> LRANGE list2 0 7 1) "1" 2) "2" 3) "3" 4) "4" 5) "5" 127.0.0.1:6379> LRANGE list1 0 -1 1) "e" 2) "d" 3) "c" 4) "b" 5) "a" 127.0.0.1:6379> LINDEX list1 0 "e" 127.0.0.1:6379> LLEN list1 (integer) 5 127.0.0.1:6379> LPOP list1 "e" 127.0.0.1:6379> rpop list1 "a" 127.0.0.1:6379> LPOP list2 "1" 127.0.0.1:6379> rpop list2 "5" 127.0.0.1:6379> BLPOP list2 5 1) "list2" 2) "2" 127.0.0.1:6379> LRANGE list2 0 5 1) "3" 2) "4" 127.0.0.1:6379>
业务场景
list 类型数据扩展操作
微信朋友圈点赞,要求按照点赞顺序显示点赞好友信息
如果取消点赞,移除对应好友信息
演示如下:
[root@iZbp143t3oxhfc3ar7jey0Z ~]# redis-cli 127.0.0.1:6379> RPUSH 001 a b c d e f (integer) 6 127.0.0.1:6379> LRANGE 001 0 -1 1) "a" 2) "b" 3) "c" 4) "d" 5) "e" 6) "f" 127.0.0.1:6379> LREM 001 1 d (integer) 1 127.0.0.1:6379> LRANGE 001 0 -1 1) "a" 2) "b" 3) "c" 4) "e" 5) "f" 127.0.0.1:6379>
业务场景
twitter、新浪微博、腾讯微博中个人用户的关注列表需要按照用户的关注顺序进行展示,粉丝列表需要将最
近关注的粉丝列在前面
127.0.0.1:6379> lPUSH 001 o (integer) 8 127.0.0.1:6379> LRANGE 001 0 -1 1) "o" 2) "a" 3) "b" 4) "c" 5) "e" 6) "f" 7) "q" 8) "o" 127.0.0.1:6379>
list 类型应用场景
解决方案
- 依赖list的数据具有顺序的特征对信息进行管理
- 使用队列模型解决多路信息汇总合并的问题
- 使用栈模型解决最新消息的问题
list 类型数据操作注意事项
- list中保存的数据都是string类型的,数据总容量是有限的,最多2 32 - 1 个元素 (4294967295)。
- list具有索引的概念,但是操作数据时通常以队列的形式进行入队出队操作,或以栈的形式进行入栈出栈操作
- 获取全部数据操作结束索引设置为-1
- list可以对数据进行分页操作,通常第一页的信息来自于list,第2页及更多的信息通过数据库的形式加载