文章目录

  • Redis基本类型之List类型
  • 一、概述
  • 1、简介
  • 2、特征
  • 二、List类型的常用命令
  • 三、操作案例
  • 1、lpush(左侧插入一个或多个)
  • 2、lpop(左侧移除)
  • 3、rpush(右侧插入一个或多个)
  • 4、rpop(右侧移除)
  • 5、lrange(获取角标元素)
  • 6、blpop (左侧移除)
  • 7、brpop(右侧移除)
  • 8、lpush 与 blpop 阻塞式获取
  • 四、问题
  • 1、如何利用List结构模拟一个栈?
  • 2、如何利用List结构模拟一个队列?
  • 3、如何利用List模拟一个阻塞队列?



Redis基本类型之List类型

一、概述

1、简介

  • Redis中的List类型与Java中的LinkedList类似,可以看做是一个双向链表结构。既可以支持正向检索和也可以支持反向检索
  • push:添加
  • pop:删除

2、特征

  • 有序
  • 元素可以重复
  • 插入和删除快
  • 查询速度一般

常用来存储一个有序数据,例如:朋友圈点赞列表,评论列表等。

二、List类型的常用命令

命令

作用

lpush

向列表左侧插入一个或多个元素

lpop

移除并返回列表左侧的第一个元素,没有则返回null

rpush

向列表右侧插入一个或多个元素

rpop

移除并返回列表右侧的第一个元素

lrange

返回一段角标范围内的所有元素

blpop

与 lpop 类似,只不过在没有元素时等待指定时间,而不是直接返回nil

brpop

与 rpop 类似,只不过在没有元素时等待指定时间,而不是直接返回nil

三、操作案例

1、lpush(左侧插入一个或多个)

  • lpush:向列表左侧插入一个或多个元素
192.168.8.137:6379> LPUSH users 1 2 
(integer) 2

redis插入list redis list_list

2、lpop(左侧移除)

  • lpop:移除并返回列表左侧的第一个元素,没有则返回null
# 会把2移除
192.168.8.137:6379> LPOP users 1
1) "2"

redis插入list redis list_List_02

3、rpush(右侧插入一个或多个)

  • rpush:向列表右侧插入一个或多个元素
192.168.8.137:6379> RPUSH users 4 5 6
(integer) 5

redis插入list redis list_list_03

4、rpop(右侧移除)

  • rpop:移除并返回列表右侧的第一个元素
192.168.246.128:6379> RPOP users 1
1) "6"

redis插入list redis list_list_04

5、lrange(获取角标元素)

  • lrange:返回一段角标范围内的所有元素
192.168.246.128:6379> LRANGE users 1 2
1) "4"
2) "5"

redis插入list redis list_redis_05

6、blpop (左侧移除)

  • blpop:与 lpop 类似,只不过在没有元素时等待指定时间,而不是直接返回nil
192.168.246.128:6379> BLPOP users 1
1) "users"
2) "1"

redis插入list redis list_数据库_06

7、brpop(右侧移除)

  • brpop:与 rpop 类似,只不过在没有元素时等待指定时间,而不是直接返回nil
192.168.246.128:6379> BRPOP users 2
1) "users"
2) "5"

redis插入list redis list_数据库_07

8、lpush 与 blpop 阻塞式获取

  • 多开一个命令窗口,阻塞式获取
192.168.8.137:6379> LPUSH users2 jack
(integer) 1
192.168.8.137:6379> BLPOP users2 2
1) "users2"
2) "jack"

redis插入list redis list_List_08

四、问题

1、如何利用List结构模拟一个栈?

  • 入口和出口在同一边

2、如何利用List结构模拟一个队列?

  • 入口和出口在不同边

3、如何利用List模拟一个阻塞队列?

  • 入口和出口在不同边
  • 出队时采用BLPOP或BRPOP