队列类型内部是使用双向链表(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//被阻塞直到有元素为止
相关推荐
3. Redis 的功能 Redis的功能包括: - 缓存:用于高并发场景下的数据缓存,减少数据库压力。 - 消息队列:通过发布/订阅模式和列表数据结构实现消息传递。 - 分布式锁:利用SETNX或REDLOCK实现分布式环境下的锁机制...
- List:列表数据类型,底层基于双端链表实现,支持LIFO(后进先出,如栈)和FIFO(先进先出,如队列)操作。`rpush`和`lpush`分别在尾部和头部添加元素,`rpop`和`lpop`则分别从尾部和头部移除元素。` llen`获取...
- **List类型**:支持双端队列操作。 - **Set类型**:存储唯一元素的集合。 - **ZSet类型**:有序集合,元素可以附加分数进行排序。 - **Hash类型**:存储键值对的哈希表。 #### 十、Redis的Master-Slave模式与虚拟...
- **列表(List)**:基于双端队列,可以添加、删除两端元素,常用于实现发布/订阅、消息队列等功能。 - **集合(Set)**:无序且不重复的元素集合,支持集合运算(交集、并集、差集)。 - **有序集合(Sorted Set)**...
- **列表(List)**:双端队列,允许在两端插入和删除元素,支持范围查询,可用于消息队列。 - **集合(Set)**:不允许重复元素的集合,支持添加、删除、成员检测及集合运算(交集、并集、差集)。 - **哈希(Hash)**...
Redis的列表是通过链表或者双端队列实现的,提供了丰富的列表操作命令,如`lpush`和`rpush`用于在列表的头部和尾部插入元素,`lrange`用于获取列表中指定范围的元素。 #### 集合(Set) 集合是一个无序的字符串集合...
- **List(链表)**: 双端链表,可以从两端插入或删除元素,适用于消息队列等场景,常用命令有`LPUSH`和`RPUSH`等。 - **Set(集合)**: 存储不重复的字符串集合,支持`SADD`和`SREM`等命令。 - **Sorted Set(有序集合)*...
- **命令的类型检查和多态**:Redis通过类型检查机制,确保命令正确应用于对应的数据类型,并利用多态性简化命令的实现。 - **对象共享**:Redis允许在不同的键之间共享相同的对象,减少了内存消耗。 - **引用计数...
- **列表(Lists)**:按照插入顺序排序的字符串元素的集合,可以被当作栈、队列或是双端队列使用。 - **集合(Sets)**:不重复的元素集合,可用于交集、并集、差集等操作。 - **有序集合(Sorted Sets)**:类似于集合,...
- **用途:** 双端链表在 Redis 中主要用于实现列表键,以及实现诸如 LPOP 和 RPOP 等命令所需的快速插入和删除操作。 - **优势:** 双端链表允许从两端进行高效的插入和删除操作,非常适合实现列表类型的数据结构。 ...
1. **Redis List作为消息队列**:Redis的List数据结构可以看作是一个双端队列,支持lpush(左推)和rpop(右弹)操作,非常适合实现FIFO(先进先出)的消息队列。通过客户端将任务作为元素推入List,消费者则从List...
Redis 基础数据类型有很多应用场景,例如用于缓存用户信息、统计网站访问次数、实现消息队列等等。 总结 Redis 基础数据类型包括 String、Hash、List、Set 和 Zset 五种,今天我们学习了 String 和 List 两种类型...
- **列表(List)**: 双端队列,支持两端的插入和删除,常用于消息队列。 - **集合(Set)**: 不重复元素的集合,支持并集、交集、差集操作。 - **有序集合(Sorted Set)**: 带分数的集合,根据分数对元素进行...
Redis支持命令的类型检查,即在执行命令之前,Redis会检查键对应的值类型是否符合该命令的要求。此外,通过`redisObject`结构体的类型字段,Redis实现了多态,即同一个命令可以根据不同的数据类型表现出不同的行为。...
4. **事务(Transaction)**:Redis支持多条命令的原子执行,通过MULTI、EXEC命令开启和结束一个事务。 5. **持久化策略**: - **RDB(快照)**:定期或达到一定数量的写操作后,将内存中的数据生成一个二进制文件...
Redisson提供了多种分布式集合,如映射(Map)、多值映射(Multimap)、集(Set)、有序集(SortedSet)、计分排序集(ScoredSortedSet)、字典排序集(LexSortedSet)、列表(List)、队列(Queue)、双端队列...