redis中的List命令的基础操作。
LPUSH key value1 [value2 ...]
:
LPUSH cities "Beijing" "Shanghai" "Guangzhou"
从左侧插入多个城市名称到名称为 cities 的列表中。
RPUSH key value1 [value2 ...]
:
RPUSH cities "Shenzhen" "Chengdu"
从右侧插入多个城市名称到名称为 cities 的列表中。
LPOP key
:
LPOP cities
移除并返回列表最左端的元素: “Beijing”。
RPOP key
:
RPOP cities
移除并返回列表最右端的元素: “Chengdu”。
LLEN key
:
LLEN cities
返回指定列表(cities)的长度: 4。
LRANGE key start stop
:
LRANGE cities 1 3
获取列表在给定范围内的所有元素: [“Shanghai”, “Guangzhou”, “Shenzhen”]。
LINDEX key index
:
LINDEX cities 0
返回列表中下标为 0 的元素: “Beijing”。
LINSERT key BEFORE|AFTER pivot value
:
LINSERT cities BEFORE "Guangzhou" "Nanjing"
在列表中值为 “Guangzhou” 的元素之前插入值为 “Nanjing” 的元素。
LSET key index value
:
LSET cities 2 "Hangzhou"
将列表中第三个元素的值设置为 “Hangzhou”。
LTRIM key start stop
:
LTRIM cities 1 3
对列表进行修剪,保留给定索引范围内的元素:[“Shanghai”, “Guangzhou”, “Shenzhen”]。
BLPOP key1 [key2...] timeout
:
BLPOP city_list 30
弹出(移除并获取)名称为 city_list 的列表的第一个元素,如果列表为空则阻塞等待 30 秒,直到有新元素插入或达到超时时间为止。
BRPOP key1 [key2...] timeout
:
BRPOP city_list 30
弹出(移除并获取)名称为 city_list 的列表的最后一个元素,如果列表为空则阻塞等待 30 秒,直到有新元素插入或达到超时时间为止。
BRPOPLPUSH source destination timeout
:
BRPOPLPUSH list1 list2 10
弹出名称为 list1 的列表的最后一个元素,将它插入名称为 list2 的列表的最左端,并返回这个元素的值,如果源列表为空则阻塞等待 10 秒,直到有新元素插入或达到超时时间为止。
RPOPLPUSH source destination
:
RPOPLPUSH source_list dest_list
弹出名称为 source_list 的列表的最后一个元素,将它插入名称为 dest_list 的列表的最左端,并返回这个元素的值。
假设某个在线商店需要处理用户提交的订单,每个订单包含以下信息:
为了方便管理,商店把所有订单都存在以用户 ID 为键名的列表中。每当有新订单创建,就把它添加到相应用户 ID 的列表中。
举个例子,在 Redis 中,可以通过以下命令将订单数据保存到列表中:
RPUSH user:1001:orders "{'order_id': '20180901', 'product_name': 'iPhone X', 'quantity': 2, 'price': 8488}"
其中,user:1001:orders
是列表的键名,它表示用户 ID 为 1001 的用户的所有订单。这个列表中包含多个元素,每个元素都是一个字符串,表示一个订单信息。
如果要获取用户 ID 为 1001 的所有订单信息,可以使用以下命令:
LRANGE user:1001:orders 0 -1
返回值为:
1) "{'order_id': '20180901', 'product_name': 'iPhone X', 'quantity': 2, 'price': 8488}"
2) "{'order_id': '20180905', 'product_name': 'MacBook Pro', 'quantity': 1, 'price': 15088}"
...
这样,商店就成功地利用 Redis 的 List 数据类型存储和检索了订单信息,方便快捷。