1. 为什么在 Web 开发中要用 Redis表格场景传统方案 (内存/数据库)Redis 方案优势验证码存储存在服务器内存 (HashMap)存在 Redis (String)集群共享多台服务器都能读到自动过期设置 TTL 自动删除不占内存。用户登录状态存在 Session (单机内存)Spring Session Redis分布式会话用户请求落到哪台服务器都能登录支持横向扩展。高频热点数据查数据库 (MySQL)查 Redis 缓存高性能内存操作QPS 可达 10万减轻数据库压力。防止重复提交数据库锁/标志位Redissetnx(原子操作)速度快利用原子性快速拦截重复请求。2. 核心数据结构与验证码/登录场景对应在 Java (RedisTemplate) 中主要使用以下 5 种结构表格数据类型对应方法 (opsFor...)典型应用场景String(字符串)opsForValue()验证码、计数器、分布式锁、简单的 KV 缓存。Hash(哈希)opsForHash()购物车、存储对象的部分字段如用户信息。List(列表)opsForList()消息队列、最新浏览记录。Set(集合)opsForSet()抽奖、共同好友、去重列表。ZSet(有序集合)opsForZSet()排行榜、带权重的任务队列。针对你的验证码场景主要使用String类型。Key:captcha:uuidValue:A7B9TTL:120秒3. 常用操作命令 (JavaRedisTemplate版)1. 字符串 (String) - 最常用用于缓存简单的键值对比如验证码、Token。// 存入数据 (设置过期时间为 10 分钟) redisTemplate.opsForValue().set(username, zhangsan, 10, TimeUnit.MINUTES); // 获取数据 String name (String) redisTemplate.opsForValue().get(username); // 计数器 (比如文章浏览量 1) redisTemplate.opsForValue().increment(view_count);2. 哈希 (Hash) - 存储对象适合存储对象比如用户信息。// 存入一个字段 redisTemplate.opsForHash().put(user:1001, name, 李四); redisTemplate.opsForHash().put(user:1001, age, 25); // 获取一个字段 String name (String) redisTemplate.opsForHash().get(user:1001, name); // 获取所有字段和值 MapObject, Object userMap redisTemplate.opsForHash().entries(user:1001);3. 列表 (List) - 消息队列类似于链表可以从左边进右边出。// 从左侧压入 (入队) redisTemplate.opsForList().leftPush(messages, msg1); redisTemplate.opsForList().leftPush(messages, msg2); // 从右侧弹出 (出队) String msg (String) redisTemplate.opsForList().rightPop(messages); // 获取所有元素 (范围 0 到 -1 表示全部) ListObject allMsg redisTemplate.opsForList().range(messages, 0, -1);4. 集合 (Set) - 去重无序且不重复适合做标签、共同好友等。// 添加元素 redisTemplate.opsForSet().add(tags, java, redis, spring); // 判断元素是否存在 Boolean isMember redisTemplate.opsForSet().isMember(tags, java); // 获取所有元素 SetObject allTags redisTemplate.opsForSet().members(tags);5. 有序集合 (ZSet) - 排行榜带分数的集合适合做排行榜。// 添加元素及分数 redisTemplate.opsForZSet().add(rank, player_a, 100); redisTemplate.opsForZSet().add(rank, player_b, 200); // 获取排名 (分数从低到高0 表示第一名) Long rank redisTemplate.opsForZSet().rank(rank, player_a); // 获取前 10 名 (倒序即分数从高到低) SetObject top10 redisTemplate.opsForZSet().reverseRange(rank, 0, 9); 核心方法速查表数据结构操作入口方法典型应用场景StringopsForValue()缓存、计数器、SessionHashopsForHash()购物车、用户信息对象ListopsForList()消息队列、最新列表SetopsForSet()抽奖、标签、共同关注ZSetopsForZSet()排行榜、带权重的任务️ 新手避坑指南类型转换因为RedisTemplate的泛型是String, Object当你从 Redis 取回数据时通常需要强制类型转换例如(String) redisTemplate.opsForValue().get(key)。空指针异常如果 Redis 中没有这个 Keyget方法会返回null直接调用方法可能会报错记得先判空。过期时间做缓存时一定要记得给 Key 设置过期时间TTL否则 Redis 内存满了会很麻烦。删除操作使用redisTemplate.delete(key)可以删除指定的键。