Redis-List(列表)

Redis-List(列表)

  • 前言
  • List(列表)概括
  • 1、Lpush和Lpush,Lrange
  • 2、Lpop和Lpop
  • 3、Lindex 索引取值,Llen
  • 4、Llen 长度,Lrem移除list集合中指定个数的value
  • 5、trim 截取(只剩下被截取的元素)
  • 6、rpoplpush 移除列表右边第一个元素,将他移动到新的列表中
  • 7、lset 将列表中指定下标的值替换为另外一个值
  • 8、Linsert 将某个具体的value插入到列表中某个元素的前面或者后面!

前言

提示:本文章是日常学习内容的总结,并非全部原创;仅供大家参考借鉴,并无其他商业用途。Bilibili搜索关注:狂神说
真正在公司中的实践:NoSQL + RDBMS 一起使用才是最强的,阿里巴巴的架构演进!
技术没有高低之分,就看你如何去使用!(提升内功,思维的提高!)
云计算的长征之路:阿里云的这群疯子

List(列表)概括

他实际上是一个链表,我们可以把list玩成 ,栈、队列、阻塞队列
为什么可以这样:因为它 before ,after , left,right 和 索引 都可以插入值
于是就有了 消息排队!消息队列 (Lpush Rpop), 栈( Lpush Lpop)
如果key 不存在,创建新的链表
如果key存在,新增内容
如果移除了所有值,空链表,也代表不存在!
在两边插入或者改动值,效率最高! 中间元素,相对来说效率会低一点~

1、Lpush和Lpush,Lrange

127.0.0.1:6379> LPUSH list one       # 将一个值或者多个值,插入到列表头部 (左)
(integer) 1 
127.0.0.1:6379> LPUSH list two 
(integer) 2 
127.0.0.1:6379> LPUSH list three 
(integer) 3 
127.0.0.1:6379> LRANGE list 0 -1     # 获取list中值! 
1) "three" 
2) "two" 
3) "one" 
127.0.0.1:6379> LRANGE list 0 1      # 通过区间获取具体的值! 
1) "three" 
2) "two" 
127.0.0.1:6379> Rpush list righr     # 将一个值或者多个值,插入到列表位部 (右) 
(integer) 4 
127.0.0.1:6379> LRANGE list 0 -1 
1) "three" 
2) "two" 
3) "one" 
4) "righr"

2、Lpop和Lpop

127.0.0.1:6379> Lpop list         # 移除list的左边第一个元素 
"three" 
127.0.0.1:6379> Rpop list         # 移除list的又边第一个元素  
"righr" 
127.0.0.1:6379> LRANGE list 0 -1 
1) "two" 
2) "one"

3、Lindex 索引取值,Llen

127.0.0.1:6379> LRANGE list 0 -1 
1) "two" 
2) "one" 
127.0.0.1:6379> lindex list 1       # 通过下标获得 list 中的某一个值! 
"one" 
127.0.0.1:6379> lindex list 0 
"two"
127.0.0.1:6379> Llen list           # 返回列表的长度 
(integer) 2  

4、Llen 长度,Lrem移除list集合中指定个数的value

127.0.0.1:6379> LRANGE list 0 -1 
1) "three" 
2) "three" 
3) "two" 
4) "one" 
127.0.0.1:6379> lrem list 1 one       # 移除list集合中第一个one的值,精确匹配 
(integer) 1 
127.0.0.1:6379> LRANGE list 0 -1 
1) "three" 
2) "three" 
3) "two" 
127.0.0.1:6379> lrem list 2 three     # 移除list集合中前两个three的值,精确匹配 
(integer) 2 
127.0.0.1:6379> LRANGE list 0 -1 
1) "two" 

5、trim 截取(只剩下被截取的元素)

127.0.0.1:6379> Rpush mylist "hello" 
(integer) 1 
127.0.0.1:6379> Rpush mylist "hello1" 
(integer) 2 
127.0.0.1:6379> Rpush mylist "hello2" 
(integer) 3 
127.0.0.1:6379> Rpush mylist "hello3" 
(integer) 4 
127.0.0.1:6379> ltrim mylist 1 2       # 通过下标截取指定的长度,这个list已经被改变了,截断了 只剩下截取的元素! 
OK
127.0.0.1:6379> LRANGE mylist 0 -1 
1) "hello1" 
2) "hello2"

6、rpoplpush 移除列表右边第一个元素,将他移动到新的列表中

127.0.0.1:6379> rpush mylist "hello"
(integer) 1 
127.0.0.1:6379> rpush mylist "hello1" 
(integer) 2 
127.0.0.1:6379> rpush mylist "hello2" 
(integer) 3 
127.0.0.1:6379> rpoplpush mylist myotherlist    # 移除列表右边第一个元素,将他移动到新的列表中! "hello2" 
127.0.0.1:6379> lrange mylist 0 -1              # 查看原来的列表 
1) "hello"
2) "hello1" 
127.0.0.1:6379> lrange myotherlist 0 -1         # 查看目标列表中,确实存在改值! 
1) "hello2"

7、lset 将列表中指定下标的值替换为另外一个值

127.0.0.1:6379> EXISTS list            # 判断这个列表是否存在 
(integer) 0 
127.0.0.1:6379> lset list 0 item       # 如果不存在列表我们去更新就会报错 
(error) ERR no such key 
127.0.0.1:6379> lpush list value1 
(integer) 1 
127.0.0.1:6379> LRANGE list 0 0 
1) "value1" 
127.0.0.1:6379> lset list 0 item       # 如果存在,更新当前下标的值 
OK
127.0.0.1:6379> LRANGE list 0 0 
1) "item" 
127.0.0.1:6379> lset list 1 other      # 如果该元素不存在,则会报错! 
(error) ERR index out of range

8、Linsert 将某个具体的value插入到列表中某个元素的前面或者后面!

127.0.0.1:6379> Rpush mylist "hello" 
(integer) 1 
127.0.0.1:6379> Rpush mylist "world" 
(integer) 2 
127.0.0.1:6379> LINSERT mylist before "world" "other"   # 在world前插入一个 other
(integer) 3 
127.0.0.1:6379> LRANGE mylist 0 -1 
1) "hello" 
2) "other" 
3) "world" 
127.0.0.1:6379> LINSERT mylist after world new          # 在world后插入一个 new
(integer) 4 
127.0.0.1:6379> LRANGE mylist 0 -1 
1) "hello" 
2) "other" 
3) "world" 
4) "new"

你可能感兴趣的:(redis,redis)