话外题:
在面试中必问的就是你在开发中用到过redis吗?这五种基本数据类型都是怎么用的具体场景是啥?等等这样的问题,下面就记录下五种基本数据类型的应用场景。
一、String类型:轻量级数据缓存
典型场景:短信验证码缓存
业务需求:用户登录时需要短信验证码验证,要求验证码5分钟内有效且每个手机号60秒内不能重复发送
方案设计:
-
存储结构:key=code:手机号,value=验证码
-
设置双重过期时间:EX 300(5分钟),NX(不存在时设置)
-
防重复发送:使用SETNX实现原子操作
Java实现:
public class SmsService {
private JedisPool jedisPool = new JedisPool("redis-server", 6379);
public String sendCode(String phone) {
try (Jedis jedis = jedisPool.getResource()) {
// 防重复发送检查
String lockKey = "lock:" + phone;
if (jedis.set(lockKey, "1", "NX", "EX", 60) == null) {
return "请求过于频繁";
}
// 生成验证码
String code = String.valueOf((int)(Math.random() * 9000 + 1000));
// 存储验证码(包含过期时间)
String codeKey = "code:" + phone;
jedis.setex(codeKey, 300, code);
// 调用短信发送API(模拟)
sendSms(phone, code);
return "验证码已发送";
}
}
public boolean verifyCode(String phone, String inputCode) {
try (Jedis jedis = jedisPool.getResource()) {
String codeKey = "code:" + phone;
String realCode = jedis.get(codeKey);
return inputCode != null && inputCode.equals(realCode);
}

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



