Redis五大数据类型-List
基本的数据类型,列表
在Redis里面 可以把list 玩成 栈、队列、阻塞队列!
47.107.74.202:9807> LPUSH list one # 创建一个列表 添加值 one
(integer) 1
47.107.74.202:9807> LPUSH list two
(integer) 2
47.107.74.202:9807> LPUSH list three
(integer) 3
47.107.74.202:9807> keys *
1) "list"
47.107.74.202:9807> LRANGE list 0 -1 # 获取list的值
1) "three" # 指的注意的是 先添加的在list后面 相应的index就越大 最后插入的值 index 为0
2) "two"
3) "one"
47.107.74.202:9807> LRANGE list 0 1
1) "three"
2) "two"
-----------------------------------------------------------------
rpush 在list的尾部插入一个值
LPUSH 在list的头部插入一个值
47.107.74.202:9807> LRANGE list 0 -1
1) "three"
2) "two"
3) "one"
47.107.74.202:9807> rpush list right # 在list的尾部插入一个值 right
(integer) 4
47.107.74.202:9807> LRANGE list 0 -1 # 查询出 right在list最后
1) "three"
2) "two"
3) "one"
4) "right"
47.107.74.202:9807> LPUSH list four # 在list的头部插入一个值
(integer) 5
47.107.74.202:9807> LRANGE list 0 -1
1) "four"
2) "three"
3) "two"
4) "one"
5) "right"
-----------------------------------------------------------------
RPOP 移除list的最后一个元素
LPOP 移除list的第一个元素
47.107.74.202:9807> LRANGE list 0 -1
1) "four"
2) "three"
3) "two"
4) "one"
5) "right"
47.107.74.202:9807> LPOP list # 移除list的第一个元素
"four"
47.107.74.202:9807> LRANGE list 0 -1
1) "three"
2) "two"
3) "one"
4) "right"
47.107.74.202:9807>
47.107.74.202:9807> RPOP list # 移除list的最后一个元素
"right"
47.107.74.202:9807> LRANGE list 0 -1
1) "three"
2) "two"
3) "one"
-----------------------------------------------------------------
LINDEX 通过下标获取list中的值
47.107.74.202:9807> LRANGE list 0 -1
1) "three"
2) "two"
3) "one"
47.107.74.202:9807> LRANGE list 0 -1
1) "three"
2) "two"
3) "one"
47.107.74.202:9807> LINDEX list 1 # 获取下标 1 的元素的值
"two"
47.107.74.202:9807> LINDEX list 2
"one"
-----------------------------------------------------------------
LLEN 获得list的长度
47.107.74.202:9807> LRANGE list 0 -1
1) "three"
2) "two"
3) "one"
47.107.74.202:9807> LPUSH list four # 在list的头部添加一个值
(integer) 4
47.107.74.202:9807> LRANGE list 0 -1 # 获取list的所有值
1) "four"
2) "three"
3) "two"
4) "one"
47.107.74.202:9807> LLEN list # 获取list的长度
(integer) 4
-----------------------------------------------------------------
LREM 移除list集合中指定个数的value 精确指定
47.107.74.202:9807> LPUSH list four # list头部添加一个值
(integer) 5
47.107.74.202:9807> LRANGE list 0 -1 # 获得list的所有值
1) "four"
2) "four"
3) "three"
4) "two"
5) "one"
47.107.74.202:9807> LREM list 1 one # 移除list中的一个one元素
(integer) 1
47.107.74.202:9807> LRANGE list 0 -1
1) "four"
2) "four"
3) "three"
4) "two"
47.107.74.202:9807> LREM list 1 four # 移除list中的一个four元素
(integer) 1
47.107.74.202:9807> LRANGE list 0 -1
1) "four"
2) "three"
3) "two"
-----------------------------------------------------------------
java中的trim(修剪) LTRIM 截断 list
47.107.74.202:9807> clear
47.107.74.202:9807> LRANGE list 0 -1
1) "four"
2) "three"
3) "two"
47.107.74.202:9807> RPUSH list one
(integer) 4
47.107.74.202:9807> LRANGE list 0 -1
1) "four"
2) "three"
3) "two"
4) "one"
47.107.74.202:9807> LPUSH list five
(integer) 5
47.107.74.202:9807> LRANGE list 0 -1
1) "five"
2) "four"
3) "three"
4) "two"
5) "one"
47.107.74.202:9807> LTRIM list 1 3 # 通过下标截取置顶的长度,这个list已经被改变了,截断了剩下截取的元素!
OK
47.107.74.202:9807> LRANGE list 0 -1
1) "four"
2) "three"
3) "two"
-----------------------------------------------------------------
RPOPLPUSH # 移除列表的最后一个元素,并将它一定到一个新的list列表中!
47.107.74.202:9807> LRANGE list 0 -1
1) "four"
2) "three"
3) "two"
47.107.74.202:9807> RPOPLPUSH list mylist # 将list中的最后一个元素 two 移动到新的列表 mylist中
"two"
47.107.74.202:9807> LRANGE mylist 0 -1 # 查询新列表的元素
1) "two"
47.107.74.202:9807> LRANGE list 0 -1
1) "four"
2) "three"
-----------------------------------------------------------------
EXISTS 判断列表是否存在 存在则返回 (integer) 1 不存在则返回 (integer) 0
LSET 将列表中指定下标的值替换为另外一个值,更新操作
47.107.74.202:9807> EXISTS LIST
(integer) 0
47.107.74.202:9807> EXISTS list
(integer) 1
47.107.74.202:9807> keys *
1) "mylist"
2) "list"
47.107.74.202:9807> LSET LIST 0 one # 如果不存在列表 我们去更新就会报错
(error) ERR no such key
47.107.74.202:9807> LPUSH LIST one
(integer) 1
47.107.74.202:9807> lrange LIST 0 -1
1) "one"
47.107.74.202:9807> keys *
1) "mylist"
2) "LIST"
3) "list"
47.107.74.202:9807> lset LIST 0 first # 如果存在,更新当前下标的值
OK
47.107.74.202:9807> lrange LIST 0 -1
1) "first"
47.107.74.202:9807> lset LIST 1 two # 如果不存在指定的下标,则会报错!
(error) ERR index out of range
-----------------------------------------------------------------
LINSERT 将某个具体的value插入到列表中的某个元素的前面或者后面
47.107.74.202:9807> LRANGE list 0 -1
1) "four"
2) "three"
47.107.74.202:9807> LINSERT list before four five
(integer) 3
47.107.74.202:9807> LRANGE list 0 -1
1) "five"
2) "four"
3) "three"
47.107.74.202:9807> LINSERT list after three two
(integer) 4
47.107.74.202:9807> LRANGE list 0 -1
1) "five"
2) "four"
3) "three"
4) "two"
小结
- list实际是一个链表,before node after,left,right都可以插入值
- 如果key不存在,则创建新的链表
- 如果key存在,新增内容
- 如果移除了所有的值,空链表,也代表不存在
- 在两边插入或者修改值,效率最高,操作中间元素,相对来说效率会低一点
消息队列(LPUSH RPOP) 栈(LPUSH LPOP)
版权申明
本文系作者 @WangJun 原创发布在wangjun's blog站点。未经许可,禁止转载。
暂无评论数据