redis数据类型-List

Redis的value数据类型-List

k当中有两个东西在k身上,一个是head,一个是tail,有两个指针,head头指针,tail尾指针。那么在k当中有这两个头尾指针属性有什么好处?
head的话可以指到你value的链表的第一个元素,tail的话可以指到他最后一个元素,那
么这样一个好处就是,你访问一个key,然后它的类型是list的时候,你可以通过它的两个
属性快速的访问 value链表当中的第一个元素和最后一个元素

list
List常用命令

help @list

  BLPOP key [key ...] timeout
  summary: Remove and get the first element in a list, or block until one is available
  since: 2.0.0

  BRPOP key [key ...] timeout
  summary: Remove and get the last element in a list, or block until one is available
  since: 2.0.0

  BRPOPLPUSH source destination timeout
  summary: Pop a value from a list, push it to another list and return it; or block until one is available
  since: 2.2.0

  LINDEX key index
  summary: Get an element from a list by its index
  since: 1.0.0

  LINSERT key BEFORE|AFTER pivot value
  summary: Insert an element before or after another element in a list
  since: 2.2.0

  LLEN key
  summary: Get the length of a list
  since: 1.0.0

  LPOP key
  summary: Remove and get the first element in a list
  since: 1.0.0

  LPUSH key value [value ...]
  summary: Prepend one or multiple values to a list
  since: 1.0.0

  LPUSHX key value
  summary: Prepend a value to a list, only if the list exists
  since: 2.2.0

  LRANGE key start stop
  summary: Get a range of elements from a list
  since: 1.0.0

  LREM key count value
  summary: Remove elements from a list
  since: 1.0.0

  LSET key index value
  summary: Set the value of an element in a list by its index
  since: 1.0.0

  LTRIM key start stop
  summary: Trim a list to the specified range
  since: 1.0.0

  RPOP key
  summary: Remove and get the last element in a list
  since: 1.0.0

  RPOPLPUSH source destination
  summary: Remove the last element in a list, prepend it to another list and return it
  since: 1.2.0

  RPUSH key value [value ...]
  summary: Append one or multiple values to a list
  since: 1.0.0

  RPUSHX key value
  summary: Append a value to a list, only if the list exists
  since: 2.2.0

127.0.0.1:6379> 

从左边操作List:

从左边插入 顺序是 fedcba
127.0.0.1:6379> LPUSH k1 a b c d e f
(integer) 6
127.0.0.1:6379> RPOP k1   从右边取出来 先进先出 像队列
"a"
127.0.0.1:6379> RPOP k1
"b"
127.0.0.1:6379> RPOP k1
"c"
127.0.0.1:6379> RPOP k1
"d"
127.0.0.1:6379> RPOP k1
"e"
127.0.0.1:6379> RPOP k1
"f"
127.0.0.1:6379> RPOP k1
(nil)
127.0.0.1:6379> LPUSH k1 a b c d e f
(integer) 6
127.0.0.1:6379> LPOP k1    从左边取出来 先进后出 像栈
"f"
127.0.0.1:6379> LPOP k1
"e"
127.0.0.1:6379> LPOP k1
"d"
127.0.0.1:6379> LPOP k1
"c"
127.0.0.1:6379> LPOP k1
"b"
127.0.0.1:6379> LPOP k1
"a"
127.0.0.1:6379> LPOP k1
(nil)
127.0.0.1:6379> 
127.0.0.1:6379> LPUSH k1 a b c d e f
(integer) 6
127.0.0.1:6379> LRANGE k1 0 -1  从0到-1  左边插入 左是0右边-1  反向索引
1) "f"
2) "e"
3) "d"
4) "c"
5) "b"
6) "a"
-6 -5 -4 -3 -2 -1
f e d c b a
0 1 2 3 4 5

从右边操作List


127.0.0.1:6379> RPUSH k1 a b c d e f  右边开始插入
(integer) 6 
127.0.0.1:6379> LPOP k1   从左边取出来 先进先出 像队列
"a"
127.0.0.1:6379> LPOP k1
"b"
127.0.0.1:6379> LPOP k1
"c"
127.0.0.1:6379> LPOP k1
"d"
127.0.0.1:6379> LPOP k1
"e"
127.0.0.1:6379> LPOP k1
"f"
127.0.0.1:6379> LPOP k1
(nil)
127.0.0.1:6379> RPUSH k1 a b c d e f
(integer) 6
127.0.0.1:6379> RPOP k1   从右边取出来 先进后出 像栈
"f"
127.0.0.1:6379> RPOP k1
"e"
127.0.0.1:6379> RPOP k1
"d"
127.0.0.1:6379> RPOP k1
"c"
127.0.0.1:6379> RPOP k1
"b"
127.0.0.1:6379> RPOP k1
"a"
127.0.0.1:6379> RPOP k1
(nil)
127.0.0.1:6379> RPUSH k1 a b c d e f
(integer) 6
127.0.0.1:6379> LRANGE k1 0 -1  
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
6) "f"
127.0.0.1:6379> 
-6 -5 -4 -3 -2 -1
a b c d e f
0 1 2 3 4 5


127.0.0.1:6379> RPUSH K1 A B C D E F
(integer) 6
127.0.0.1:6379> LINDEX K1 0  根据下标查询
"A"
127.0.0.1:6379> LINDEX K1 -1
"F"
127.0.0.1:6379> LSET K1 -1 9  根据下标赋值
OK
127.0.0.1:6379> LINDEX K1 -1
"9"
127.0.0.1:6379>

127.0.0.1:6379> RPUSH k1 a a a c c
(integer) 5
127.0.0.1:6379> LRANGE k1 0 -1
1) "a"
2) "a"
3) "a"
4) "c"
5) "c"
List不会去重

下标操作像数组

127.0.0.1:6379> lpush k1 1 a 2 b 3 a 4 c 5 a 6 d
(integer) 12
127.0.0.1:6379> LREM k1 2 a
(integer) 2
127.0.0.1:6379> LINDEX k1 2
"5"
127.0.0.1:6379> LINDEX k1 6
"b"
127.0.0.1:6379> LRANGE k1 0 -1
 1) "d"
 2) "6"
 3) "5"
 4) "c"
 5) "4"
 6) "3"
 7) "b"
 8) "2"
 9) "a"
10) "1"
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> lpush k1 1 a 2 b 3 a 4 c 5 a 6 d
(integer) 12
127.0.0.1:6379> LREM k1 -2 a
(integer) 2
127.0.0.1:6379> LRANGE k1 0 -1
 1) "d"
 2) "6"
 3) "a"
 4) "5"
 5) "c"
 6) "4"
 7) "3"
 8) "b"
 9) "2"
10) "1"
127.0.0.1:6379> FLUSHALL 
OK
127.0.0.1:6379> lpush k1 1 a 2 b 3 a 4 c 5 a 6 d
(integer) 12
127.0.0.1:6379> LREM k1 0 a
(integer) 3
127.0.0.1:6379> LRANGE k1 0 -1
1) "d"
2) "6"
3) "5"
4) "c"
5) "4"
6) "3"
7) "b"
8) "2"
9) "1"
127.0.0.1:6379> help LREM

  LREM key count value
  summary: Remove elements from a list
  since: 1.0.0
  group: list

127.0.0.1:6379> 

LREM key count value count大于0从左向右删除 小于0 从右向左 等于0 删除全部value

127.0.0.1:6379> lpush k1 1 a 2 b 3 a 4 c 5 a 6 d
(integer) 12
127.0.0.1:6379> RPUSHX k1 o 追加list
(integer) 13
127.0.0.1:6379> LRANGE k1 0 -1
 1) "d"
 2) "6"
 3) "a"
 4) "5"
 5) "c"
 6) "4"
 7) "a"
 8) "3"
 9) "b"
10) "2"
11) "a"
12) "1"
13) "o"
1
127.0.0.1:6379> BLPOP k1 0
1) "k1"
2) "a"
(130.26s)
127.0.0.1:6379> brpop k1 0
1) "k1"
2) "a"
(24.42s)
127.0.0.1:6379> brpop k1 0
1) "k1"
2) "3"
(20.43s)
127.0.0.1:6379> 

2
127.0.0.1:6379> BLPOP k1 0
1) "k1"
2) "aaaa"
(130.00s)
127.0.0.1:6379> brpop k1 0
1) "k1"
2) "a1"
(36.56s)
127.0.0.1:6379> brpop k1 0
1) "k1"
2) "3"
(59.34s)
127.0.0.1:6379> 


3
127.0.0.1:6379> RPUSH k1 a
(integer) 1
127.0.0.1:6379> RPUSH k1 aaaa
(integer) 1
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> LPUSH k1 a
(integer) 1
127.0.0.1:6379> LPUSH k1 a1
(integer) 1
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> rpush k1 3
(integer) 1
127.0.0.1:6379> rpush k1 3
(integer) 1
127.0.0.1:6379> 


blpop、brpop 阻塞获取 当阻塞时间为0 会一直阻塞直到获取到
什么叫阻塞的单播队列,因为如果消息订阅的话,有可能我1个人的消息可以被10个人
订阅,100人订阅,我发的这10个人同时都拿到,但是刚才你会发现,我发1个hello到这个
list里边,谁第一个阻塞的,他拿走了,第二个根本不知道有这个东西出现,但这个人还在
这等着。而且这边得出一个结论,他是变first in first out先进先出对不对?我阻塞了,有了,
我拿到了,我走,这是一个简单的,为什么先埋它一笔,因为后边redis有一个特征,他是
支持消息订阅的。


127.0.0.1:6379> rpush k1 a b c d e f g h a b c d 
(integer) 12
127.0.0.1:6379> LLEN k1  统计长度
(integer) 12
127.0.0.1:6379> LTRIM k1 0 -1  删除两端元素 如果下标是最两端则没有数据可删除
OK
127.0.0.1:6379> LLEN k1
(integer) 12
127.0.0.1:6379> LTRIM k1 0 -2
OK
127.0.0.1:6379> LLEN k1
(integer) 11
127.0.0.1:6379> LTRIM k1 1 -2
OK
127.0.0.1:6379> LLEN k1
(integer) 9
127.0.0.1:6379> 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis支持多种数据类型,包括string、hash、list、set和sorted set等。其中,string是最基本、最简单的数据类型,用于存储字符串。 Hash是用于存储键值对的数据结构,其中的value只能存储字符串,不允许存储其他数据类型,也不存在嵌套现象。每个hash可以存储232 - 1个键值对,并可以灵活添加或删除对象属性。但需要注意的是,hash类型并不适合存储大量对象,也不应该将hash作为对象列表使用,因为遍历整体数据的效率可能会较低。 除了string和hash类型,Redis还支持list、set和sorted set等数据类型List是一个有序的字符串列表,可以进行插入、删除和查找等操作。Set是一个无序的字符串集合,可以进行元素的添加、删除和查找操作,并且不允许重复元素的存在。Sorted Set是一个有序的字符串集合,每个元素都有一个对应的score,可以根据score进行排序和范围查找。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Redis 数据类型](https://blog.csdn.net/weixin_52851967/article/details/122670564)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值