Redis SCAN 命令学习

Redis scan 命令官方文档:https://redis.io/commands/scan/

由于keys 命令可能会阻塞Redis,一般情况下生产环境都会禁止使用。所以可以采用 scan 命令遍历一些需要模糊匹配key的场景。

在 spring-boot-starter-data-redis 中使用的 scan 命令的简单demo如下:

ScanOptions options = ScanOptions.scanOptions().match(keyPattern).count(2).build();
        Cursor<byte[]> cursor = (Cursor<byte[]>) redisTemplate.execute(
                (RedisCallback<Cursor<byte[]>>) connection -> connection.scan(options));
        while(cursor.hasNext()) {
          String key = new String(cursor.next());
          log.info("key:{}",key);
        }

<think>好的,用户现在问的是关于Redis命令学习的内容。我需要先回顾之前的对话历史,确保回答符合用户的需求。之前用户询问过高并发测试,现在转向Redis,可能是因为他们需要优化高并发场景下的数据存储和缓存,而Redis在这方面很常用。 首先,我应该确定用户的学习层次。用户可能刚开始接触Redis,需要基础命令的介绍,但也不排除他们已经有基础,想深入一些高级命令。不过根据问题“redis命令学习”,推测用户可能希望从基础到进阶的系统性介绍。 接下来要考虑的是如何组织内容。用户之前的高并发测试回答结构清晰,分点说明,所以这次也应该保持类似的格式。可能需要分基础命令、数据结构相关命令、进阶功能、学习建议等部分。 需要注意Redis的版本,不同版本支持的命令可能不同,但用户可能使用的是较新版本,所以可以默认介绍常用且广泛支持的命令,必要时指出版本差异。比如Streams是在5.0引入的,如果用户用的是旧版本可能需要注意。 还要考虑用户的实际应用场景。比如在高并发下,事务、管道、Lua脚本这些功能对于性能优化很重要,应该重点介绍。同时,数据持久化和集群管理命令也是运维中常遇到的,需要提及。 用户可能想知道如何高效学习这些命令,所以学习建议部分可以推荐官方文档、在线实验环境,以及常用场景的命令应用,比如缓存、排行榜等。 另外,用户可能对某些命令的具体使用例子感兴趣,比如如何使用ZSET实现排行榜,或者如何使用PUB/SUB实现消息队列。因此,在数据结构部分给出具体例子会更有帮助。 需要检查是否覆盖了Redis的主要数据结构:字符串、哈希、列表、集合、有序集合,以及新增的Streams。同时,事务、持久化、集群管理等重要模块也不能遗漏。 最后,确保使用正确的中文术语,避免直译英文带来的理解困难。例如,解释“EXPIRE”命令时,用“设置键的过期时间”更易懂。 总结,回答结构大致分为基础命令、数据结构命令、进阶功能、学习建议,每部分用清晰的标题和示例代码,保持与之前回答一致的格式,帮助用户逐步学习和应用Redis命令。</think>以下是关于Redis命令学习的系统性介绍,采用分层结构帮助您从基础到进阶逐步掌握: --- ### 一、Redis命令基础特性 1. **命令格式** `COMMAND KEY [参数]` 例如:`SET user:001 "Alice" EX 60`(设置键值,并60秒后过期) 2. **通用规则** - 所有操作基于**键值对**,键名需唯一(如`user:001`) - 多数命令时间复杂度为$O(1)$,部分复杂操作如`SORT`为$O(n)$ - 支持批量操作(`MSET`/`MGET`)和管道(Pipeline)优化性能 --- ### 二、核心数据结构与对应命令 #### 1. **字符串(String)** - `SET key value [EX seconds]`:存储值(带过期时间) - `GET key`:获取值 - `INCR key`:原子性增加数值(适用于计数器) **示例**: ```bash SET page_views 0 INCR page_views # 结果:1 ``` #### 2. **哈希(Hash)** - `HSET key field value`:存储字段值(适合对象存储) - `HGETALL key`:获取所有字段和值 - `HINCRBY key field increment`:字段数值增减 **示例**: ```bash HSET user:001 name "Alice" age 30 HGET user:001 name # 输出:"Alice" ``` #### 3. **列表(List)** - `LPUSH key value`:左侧插入元素(实现队列/栈) - `LRANGE key start end`:范围查询 - `BLPOP key timeout`:阻塞式弹出元素(消息队列) #### 4. **集合(Set)** - `SADD key member`:添加元素(去重) - `SINTER key1 key2`:求交集(共同好友功能) - `SMEMBERS key`:获取所有成员 #### 5. **有序集合(Sorted Set)** - `ZADD key score member`:按分数排序(排行榜实现) - `ZRANGE key start end [WITHSCORES]`:按范围获取成员 - `ZREVRANK key member`:获取逆序排名 **应用场景**: ```bash ZADD leaderboard 100 "PlayerA" 85 "PlayerB" ZREVRANGE leaderboard 0 2 WITHSCORES # 显示前三名 ``` #### 6. **流(Stream,Redis 5.0+)** - `XADD stream * field value`:添加事件(日志系统) - `XREAD COUNT 10 STREAMS stream 0`:读取最新事件 --- ### 三、进阶功能命令 #### 1. **事务控制** - `MULTI`:开启事务 - `EXEC`:执行事务块 - `WATCH key`:监控键变化(乐观锁) **示例**: ```bash WATCH balance MULTI DECRBY balance 50 EXEC # 若balance未被修改则执行 ``` #### 2. **持久化与备份** - `SAVE`:同步保存数据到磁盘(阻塞式) - `BGSAVE`:后台异步保存 - `LASTSAVE`:获取最后一次保存时间戳 #### 3. **集群管理** - `CLUSTER SLOTS`:查看集群分片信息 - `CLUSTER FAILOVER`:手动触发故障转移 --- ### 四、学习建议与资源 1. **学习路径** - **Step 1**:掌握基础数据结构的增删改查命令 - **Step 2**:学习事务、管道、Lua脚本等进阶操作 - **Step 3**:实践组合命令解决实际问题(如分布式锁) 2. **推荐工具** - **`redis-cli`**:官方命令行工具(支持`--stat`实时监控) - **RedisInsight**:图形化管理工具(可视化命令执行) 3. **常用场景命令速查** | 场景 | 关键命令 | |-----------------|-----------------------------------| | 缓存 | `SETEX`/`GET`/`DEL` | | 分布式锁 | `SET key value NX EX 30` | | 限流 | `INCR` + `EXPIRE` | 4. **官方文档** - 访问 [Redis Commands](https://redis.io/commands/) 获取完整命令列表与示例 --- ### 五、注意事项 1. **危险命令慎用** - `FLUSHALL`:清空所有数据库 - `KEYS *`:生产环境避免使用(改用`SCAN`分批次查询) 2. **性能优化** - 使用`PIPELINE`减少网络往返时间 - 高频读取场景优先选择`HGET`替代`HGETALL` 通过系统化学习与实践,可快速掌握Redis命令体系,灵活应用于缓存、队列、实时统计等场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值