`

redis命令(3)--双端队列类型

 
阅读更多

队列类型内部是使用双向链表(double linked list)实现的,所以向列表两端添加元素的时

间复杂度为0(1),获取越接近两端的元素速度就越快。

 

 

以下命令中 key 代表列表

1.向队列左侧加入元素,返回增加后队列的长度

 lpush key value1 value2 value...

 

 

localhost:6379> lpush students a b c
(integer) 3
添加后队列中的元素顺序为 【c,b,a】

 

2.向队列右侧加入元素,返回增加后队列的长度

 

rpush key value1 value2 value....

 

localhost:6379> rpush students o p q
(integer) 6
添加后的元素顺序为【c,b,a,o,p,q】

 3.从队列左侧弹出元素(相当于移出元素)

 

   lpop key 

 

localhost:6379> lpop students
"c"
localhost:6379>  lpop students
"b"

 4.从队列右侧弹出元素(相当于移出元素)

rpop key 

 

localhost:6379> rpop students
"q"
localhost:6379> rpop students
"p"

 

5.获取队列中元素的个数

llen key 

localhost:6379> llen students
(integer) 4

 6.获取按索引范围获取队列中的元素(但不从队列中移出)

 lrange key startIndex endIndex

   startIndex :开始元素序号 

   endIndex :截止元素序号(获取的元素中含有该元素)

  元素序号值:队列最左侧元素序号为0,之后元素序号依次+1,最右侧元素为序号最大的元素

  另一种元素序号值:最右侧元率序号为-1,之前的元素序号依次-1,最左侧 元素为序号最小的元素

 

localhost:6379> del students
localhost:6379> lpush students a b c
(integer) 3
localhost:6379> rpush students o p q
(integer) 6
localhost:6379> lrange students 1 4
1) "b"
2) "a"
3) "o"
4) "p"
localhost:6379> lrange students 1 -2
1) "b"
2) "a"
3) "o"
4) "p"

 7.删除队列中指定的值(返回实际删除元素的个数)

 lrem key count value

从队列中删除count个值等于value的元素。

count 为正数时:则从左向右 开始删除,直至达到count个元素或队列中没有元素值==value的元素为止

count 为负时:则从右向左开始删除,直至达到count个元素或队列中没有元素值==value的元素为止

count ==0 时:表示删除队列中所有元素值==value的元素

 

localhost:6379> del students
localhost:6379> lpush students c b a c b a c b a
(integer) 9
localhost:6379> lrange students 0 -1
1) "a"
2) "b"
3) "c"
4) "a"
5) "b"
6) "c"
7) "a"
8) "b"
9) "c"
localhost:6379> lrem students -2 c//从右侧删除2个元素值==c的元素
(integer) 2
localhost:6379> lrange students 0 -1
1) "a"
2) "b"
3) "c"
4) "a"
5) "b"
6) "a"
7) "b"
localhost:6379> lrem students 2 a//从左侧删除2个元素值==a的元素
(integer) 2
localhost:6379> lrange students 0 -1
1) "b"
2) "c"
3) "b"
4) "a"
5) "b"

 8.按索引序号获取队列中的元素

lindex key index

  元素序号值:队列最左侧元素序号为0,之后元素序号依次+1,最右侧元素为序号最大的元素

  另一种元素序号值:最右侧元率序号为-1,之前的元素序号依次-1,最左侧 元素为序号最小的元素

localhost:6379> del students
localhost:6379> lpush students a b c d e f
(integer) 6
localhost:6379> lindex students 0
"f"
localhost:6379> lindex students -1
"a"
localhost:6379> lindex students 2
"d"

 9,修改队列中的元素值

lset key index value 

指定索引位置的元素值被value覆盖

localhost:6379> del students
(integer) 1
localhost:6379> lpush students a b c d e f g
(integer) 7
localhost:6379> lset students -2 x
OK
localhost:6379> lrange students 0 -1
1) "g"
2) "f"
3) "e"
4) "d"
5) "c"
6) "x"
7) "a"
localhost:6379> lset students 0 z
OK
localhost:6379> lrange students 0 -1
1) "z"
2) "f"
3) "e"
4) "d"
5) "c"
6) "x"
7) "a"

 10.删除指定索引范围之外的所有元素

ltrim key startIndex endIndex 

删除索引值<startIndex 且>endIndex的所有元素

localhost:6379> del students
(integer) 1
localhost:6379> rpush students a b c d e f
(integer) 6
localhost:6379> lrange students 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
6) "f"
localhost:6379> ltrim students 1 -2
OK
localhost:6379> lrange students 0 -1
1) "b"
2) "c"
3) "d"
4) "e"

11.向队列中插入新元素,并返回插入之后的队列长度

linsert key before|after oldValue newValue

在列表中查找oldValue,找到后在它的之前(before) 或之后 (after)位置插入新的元素 newValue

localhost:6379> del students
(integer) 1
localhost:6379>  rpush students a b c d e f
(integer) 6
localhost:6379> lrange students 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
6) "f"
localhost:6379> linsert students before b x
(integer) 7
localhost:6379> lrange students 0 -1
1) "a"
2) "x"
3) "b"
4) "c"
5) "d"
6) "e"
7) "f"
localhost:6379> linsert students after e z
(integer) 8
localhost:6379> lrange students 0 -1
1) "a"
2) "x"
3) "b"
4) "c"
5) "d"
6) "e"
7) "z"
8) "f"

 12.把A队列最右侧元素移除并添加到B队列左侧 ,并返回被移动的元素值

rpoplpush sourceKey destKey

localhost:6379> rpush A 1 2 3
(integer) 3
localhost:6379> rpush B 7 8 9
(integer) 3
localhost:6379> rpoplpush A  B
"3"
localhost:6379> lrange A 0 -1
1) "1"
2) "2"
localhost:6379> lrange B 0 -1
1) "3"
2) "7"
3) "8"
4) "9"

 

 13.BRPOP 

  从队列右侧弹出元素,如果没有元素则阻塞。 

BRPOP  key [key …]timeout

 参数:key [key] 为一个或多个队列的KEY,redis从左向右检测是否队列中有元素,如果有则直接取出返回,即N个队列都有元素的情况下,左侧队列元素优先取出,都没有元素时,阻塞直至某个队列最先有元素。

           timeout:超时时间,单位是秒。当超过了此时间仍然没有获得新元素的话就会返回nil。如果超时时间==0,表示不限制等待的时间,即如果没有新元素加入列表就会永远阻塞下去。

 

localhost:6379> del commandList
(integer) 0
localhost:6379> lpush commandList mkdir cd touch
(integer) 3
localhost:6379> brpop commandList 0
1) "commandList"
2) "mkdir"
localhost:6379> brpop commandList 0
1) "commandList"
2) "cd"
localhost:6379> brpop commandList 0
1) "commandList"
2) "touch"
localhost:6379> brpop commandList 0//被阻塞直到有元素为止

 

 

 

分享到:
评论

相关推荐

    Redis 教程合集(2019版).pdf

    3. Redis 的功能 Redis的功能包括: - 缓存:用于高并发场景下的数据缓存,减少数据库压力。 - 消息队列:通过发布/订阅模式和列表数据结构实现消息传递。 - 分布式锁:利用SETNX或REDLOCK实现分布式环境下的锁机制...

    Redis学习 - Nyima's Blog.pdf

    - List:列表数据类型,底层基于双端链表实现,支持LIFO(后进先出,如栈)和FIFO(先进先出,如队列)操作。`rpush`和`lpush`分别在尾部和头部添加元素,`rpop`和`lpop`则分别从尾部和头部移除元素。` llen`获取...

    NoSQL数据库-MongoDB和Redis

    - **List类型**:支持双端队列操作。 - **Set类型**:存储唯一元素的集合。 - **ZSet类型**:有序集合,元素可以附加分数进行排序。 - **Hash类型**:存储键值对的哈希表。 #### 十、Redis的Master-Slave模式与虚拟...

    Redis参考手册.zip

    - **列表(List)**:基于双端队列,可以添加、删除两端元素,常用于实现发布/订阅、消息队列等功能。 - **集合(Set)**:无序且不重复的元素集合,支持集合运算(交集、并集、差集)。 - **有序集合(Sorted Set)**...

    Redis全套学习笔记

    - **列表(List)**:双端队列,允许在两端插入和删除元素,支持范围查询,可用于消息队列。 - **集合(Set)**:不允许重复元素的集合,支持添加、删除、成员检测及集合运算(交集、并集、差集)。 - **哈希(Hash)**...

    1基础:万丈高楼平地起 —— Redis 基础数据结构(1).md

    Redis的列表是通过链表或者双端队列实现的,提供了丰富的列表操作命令,如`lpush`和`rpush`用于在列表的头部和尾部插入元素,`lrange`用于获取列表中指定范围的元素。 #### 集合(Set) 集合是一个无序的字符串集合...

    redis技术实践

    - **List(链表)**: 双端链表,可以从两端插入或删除元素,适用于消息队列等场景,常用命令有`LPUSH`和`RPUSH`等。 - **Set(集合)**: 存储不重复的字符串集合,支持`SADD`和`SREM`等命令。 - **Sorted Set(有序集合)*...

    Redis中文手册

    - **命令的类型检查和多态**:Redis通过类型检查机制,确保命令正确应用于对应的数据类型,并利用多态性简化命令的实现。 - **对象共享**:Redis允许在不同的键之间共享相同的对象,减少了内存消耗。 - **引用计数...

    Redis实战中文版命令行整理

    - **列表(Lists)**:按照插入顺序排序的字符串元素的集合,可以被当作栈、队列或是双端队列使用。 - **集合(Sets)**:不重复的元素集合,可用于交集、并集、差集等操作。 - **有序集合(Sorted Sets)**:类似于集合,...

    redis必备书籍

    - **用途:** 双端链表在 Redis 中主要用于实现列表键,以及实现诸如 LPOP 和 RPOP 等命令所需的快速插入和删除操作。 - **优势:** 双端链表允许从两端进行高效的插入和删除操作,非常适合实现列表类型的数据结构。 ...

    redis lits queue 和 ThreadPoolExecutor 结合

    1. **Redis List作为消息队列**:Redis的List数据结构可以看作是一个双端队列,支持lpush(左推)和rpop(右弹)操作,非常适合实现FIFO(先进先出)的消息队列。通过客户端将任务作为元素推入List,消费者则从List...

    Redis基础数据库类型

    Redis 基础数据类型有很多应用场景,例如用于缓存用户信息、统计网站访问次数、实现消息队列等等。 总结 Redis 基础数据类型包括 String、Hash、List、Set 和 Zset 五种,今天我们学习了 String 和 List 两种类型...

    数据库redis

    - **列表(List)**: 双端队列,支持两端的插入和删除,常用于消息队列。 - **集合(Set)**: 不重复元素的集合,支持并集、交集、差集操作。 - **有序集合(Sorted Set)**: 带分数的集合,根据分数对元素进行...

    redis设计与实现原理及运作机制

    Redis支持命令的类型检查,即在执行命令之前,Redis会检查键对应的值类型是否符合该命令的要求。此外,通过`redisObject`结构体的类型字段,Redis实现了多态,即同一个命令可以根据不同的数据类型表现出不同的行为。...

    Redis 实战

    4. **事务(Transaction)**:Redis支持多条命令的原子执行,通过MULTI、EXEC命令开启和结束一个事务。 5. **持久化策略**: - **RDB(快照)**:定期或达到一定数量的写操作后,将内存中的数据生成一个二进制文件...

    Redisson 使用手册.pdf

    Redisson提供了多种分布式集合,如映射(Map)、多值映射(Multimap)、集(Set)、有序集(SortedSet)、计分排序集(ScoredSortedSet)、字典排序集(LexSortedSet)、列表(List)、队列(Queue)、双端队列...

Global site tag (gtag.js) - Google Analytics