基本的数据类型,列表

在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)

分类: 技术 标签: 暂无标签

评论

暂无评论数据

暂无评论数据

目录