网站首页 > 技术教程 正文
一、常用命令详解
1. 元素操作
命令 | 描述 | 示例 | 时间复杂度 |
LPUSH key value | 从头部插入一个或多个值 | LPUSH mylist a b c → [c,b,a] | O(1) |
RPUSH key value | 从尾部插入一个或多个值 | RPUSH mylist x y z → [c,b,a,x,y,z] | O(1) |
`LINSERT key BEFORE | AFTER pivot value` | 在指定元素前后插入新值 | LINSERT mylist AFTER b new → [c,b,new,a,x,y,z] |
2. 查询与截取
命令 | 描述 | 示例 | 时间复杂度 |
LRANGE key start stop | 获取指定索引范围的元素(支持负数索引) | LRANGE mylist 0 -1 → 全量输出 | O(N) |
LINDEX key index | 获取指定索引的元素 | LINDEX mylist 2 → a | O(N) |
LLEN key | 返回列表长度 | LLEN mylist → 7 | O(1) |
3. 删除与修改
命令 | 描述 | 示例 | 时间复杂度 |
LPOP/RPOP key | 从头部/尾部弹出并返回元素 | LPOP mylist → c | O(1) |
LTRIM key start stop | 截断列表,仅保留指定区间元素 | LTRIM mylist 1 3 → [b,a,x] | O(N) |
LSET key index value | 设置指定索引的元素值 | LSET mylist 2 new_val | O(N) |
4. 阻塞式操作
命令 | 描述 | 示例 |
BLPOP key timeout | 阻塞式左端弹出,超时后返回空 | BLPOP mylist 5 → 等待5秒 |
BRPOP key timeout | 阻塞式右端弹出 | BRPOP mylist 5 |
二、高级应用场景
1. 消息队列(生产者-消费者模型)
bash
复制
# 生产者:LPUSH 入队
LPUSH task_queue "task1"
LPUSH task_queue "task2"
# 消费者:BRPOP 出队(阻塞等待)
BRPOP task_queue 0 # 0 表示无限等待
特点 :
● 支持多消费者并行处理
● 通过 BLPOP 避免轮询空队列5
6
2. 分页查询
bash
复制
# 获取第2页数据(每页3条)
LRANGE mylist 3 5
优化建议 :
● 使用 LTRIM 限制列表长度,防止内存膨胀
● 结合 SCAN 实现海量数据分页4
3. 最近访问记录
bash
复制
# 用户访问时 LPUSH 记录
LPUSH user:1001:history "2025-06-21 10:00:00"
# 保留最近10条记录
LTRIM user:1001:history 0 9
三、性能优化与注意事项
1. 内存优化
● 压缩列表(ziplist) :当列表元素较少且长度较短时,Redis 会使用压缩列表节省内存。
● QuickList :Redis 5.0+ 默认使用 QuickList(双向链表 + ziplist),平衡内存与性能6
。2. 原子操作
● 事务(MULTI/EXEC) :确保多个命令的原子性:bash
复制
MULTI
LPUSH list1 "a"
RPUSH list2 "b"
EXEC
● Lua 脚本 :复杂逻辑的原子执行:lua
复制
-- 将元素从 list1 移动到 list2
redis.call('RPOP', KEYS[1])
redis.call('LPUSH', KEYS[2], ARGV[1])
3. 阻塞操作注意事项
● 超时时间 :合理设置 timeout,避免长时间阻塞。
● 多键阻塞 :BLPOP key1 key2 timeout 会按顺序检查键是否存在元素5
。
四、与 Sorted Set 的对比
特性 | List | Sorted Set |
排序方式 | 插入顺序 | 分数(Score)排序 |
元素唯一性 | 允许重复 | 唯一 |
范围查询效率 | O(N) | O(log N) |
适用场景 | 消息队列、分页 | 排行榜、优先级队列 |
五、实战示例:秒杀库存控制
bash
复制
# 初始化库存
LPUSH stock:1001 100
# 下单时原子性操作(使用 Lua 脚本)
EVAL "
local stock = tonumber(redis.call('LPOP', KEYS[1]))
if stock > 0 then
redis.call('RPUSH', KEYS[1], stock - 1)
return stock
else
redis.call('LPUSH', KEYS[1], stock)
return 0
end
" 1 stock:1001
在呼叫系统中的应用
Redis List 顶顶通呼叫系统中可以进行应用取出通话信息
- 上一篇: 十年之重修Redis原理(redis重写机制)
- 下一篇: 每天一分钟时髦整个冬(每天一分钟英语)
猜你喜欢
- 2025-06-30 Spring Boot利用Redis实现分布式锁,如何来保证锁的公平性?
- 2025-06-30 超全Redis命令总结,墙裂建议收藏,说不定就用上了呢
- 2025-06-30 shell 编程-Expect(shell 编程 read)
- 2025-06-30 Redis 数据类型和命令大全(redis数据操作命令)
- 2025-06-30 redis的简单与集群搭建(redis的简单与集群搭建的区别)
- 2025-06-30 关于Redis的知识点,你都学会了吗?
- 2025-06-30 Redis中9种基本数据类型及常用操作命令和应用场景
- 2025-06-30 刷屏大牌广告 老奶奶也有春天!(广告老太太)
- 2025-06-30 Redis 讲解系列之 Redis的五大数据类型和配置文件解读
- 2025-06-30 一学就会 一做就废的Redis:对象底层实现原理的详解
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)