本文章包含了五大基本类型的常见操作以及其应用场景。
简介
Redis五大基本类型有String、List、Set、ZSet、Hash,在昨天我浅浅谈了下String的常见操作,感兴趣的朋友可以看一下,Redis五大基本数据类型之String,下面我们从List开始。
List
List底层是双端链表,我们可以通过POP和PUSH对它的左端和右端进行操作
lpush、rpush、lpop、rpop
lpush为左插入操作,rpush为右插入操作,lpop为左移除操作,rpop为右移除操作,这是List最基础的操作。
127.0.0.1:6379> lpush list1 1 2 3 4 5
(integer) 5
127.0.0.1:6379> rpush list2 1 2 3 4 5
(integer) 5
127.0.0.1:6379> lrange list1 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> lrange list2 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
可见右插入的顺序和遍历顺序一致,左插入则相反。
补充:lrang用于遍历,可以指定遍历起始位置和结束位置,若为0 -1则遍历所有元素。
lindex
用于查询指定下标元素(从0开始)
127.0.0.1:6379> lindex list2 0
"1"
127.0.0.1:6379> lindex list2 3
"4"
llen
用于获取集合长度。
127.0.0.1:6379> llen list1
(integer) 5
lrem
用于移除list中的值,有两个参数,第一个参数指移除该参数的个数,第二个参数为移除的值。
127.0.0.1:6379> lrange listRem 0 -1
1) "5"
2) "4"
3) "4"
4) "3"
5) "3"
6) "3"
7) "2"
8) "1"
127.0.0.1:6379> lrem listRem 2 3
(integer) 2
127.0.0.1:6379> lrange listRem 0 -1
1) "5"
2) "4"
3) "4"
4) "3"
5) "2"
6) "1"
可见移除了listRem中2个值为3的数据(list为有序可重复,这与后面的set无序不可重复相反)
这里第一个参数无论设置0/1,移除的个数都为1,并且如果实际中集合元素数量不够,不会报错,全部移除后返回成功移除后的数量。
lset
lset list n x,更新list集合中下标为n的元素为"x"
127.0.0.1:6379> lrange listRem 0 -1
1) "5"
2) "4"
3) "4"
4) "3"
5) "2"
6) "1"
127.0.0.1:6379> lset listRem 0 test1
OK
127.0.0.1:6379> lrange listRem 0 -1
1) "test1"
2) "4"
3) "4"
4) "3"
5) "2"
6) "1"
LINSERT
LINSERT list after x xx,在list中的"x"元素之后插入"xx"
LINSERT list before x xx,在list中的"x"元素之前插入"xx"
127.0.0.1:6379> rpush listInsert aa bb cc
(integer) 3
127.0.0.1:6379> linsert listInsert after aa xxx
(integer) 4
127.0.0.1:6379> linsert listInsert before cc yyy
(integer) 5
127.0.0.1:6379> lrange listInsert 0 -1
1) "aa"
2) "xxx"
3) "bb"
4) "yyy"
5) "cc"
应用
我觉得list非常适用于发布订阅的设计模式。在发布者更新新消息时,往该订阅该发布者的众多订阅者向list中插入更新的消息id,然后在遍历每一个订阅者的list,通过消息id查出消息内容,就能显示出订阅的内容了。
明天更新...