Redis学习日志【三】 --Redis做验证码过期(应用场景)

本篇内容涉及:

1、Redis存储验证码

2、阿里云短信服务

3、Attention:这个应用场景应该算是最最最普通的一种Redis的应用了。

 

我写的代码放在了:https://github.com/Crecendow/Sms-redis-SpringBoot

用一句话简述这个功能就是,UUID自动生成并且按照 key(电话号码)、value(验证码)的方式存在了redis中,redis会设置过期时间,每次发送验证码之前,会调用OpsForValue的get方法查看这条数据是否在redis存在,不在的话就自动生成一个验证码并发送给用户,同时存入redis当中,再次设置过期时间。

 

其中 发送短信的实现类是这样写的。

这块呢就是阿里云上面的写法,进入到阿里云的短信服务就自然而然的能看到的。

@Service
public class SendSmsImpl implements SendSms {

    @Override
    public boolean send(String phoneNumber, String templateCode, HashMap<String, Object> code) {
        // 连接阿里云
        DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "LTAI4Fy39w2k1Da2atVpew3z", "MYTMd0rPLVy3OsJsfo5FmvAMpQrGGt");
        IAcsClient client = new DefaultAcsClient(profile);

        //构建请求
        CommonRequest request = new CommonRequest();
        request.setSysMethod(MethodType.POST);
        request.setSysDomain("dysmsapi.aliyuncs.com"); //不要动
        request.setSysVersion("2017-05-25"); //不要动
        request.setSysAction("SendSms");

        //自定义的参数(手机号、验证码、签名、模板)
        request.putQueryParameter("PhoneNumbers", phoneNumber);
        request.putQueryParameter("SignName", "阿辉说");
        request.putQueryParameter("TemplateCode", templateCode);

        //构建一个短信的验证码
        String codeStr = JSONObject.toJSONString(code);
        request.putQueryParameter("TemplateParam", codeStr);


        try {
            CommonResponse response = client.getCommonResponse(request);
            System.out.println(response.getData());
            return response.getHttpResponse().isSuccess();
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }

        return false;
    }
}

 

而最重要的Redis的部分我是这样写的。

@RestController
@CrossOrigin  //跨域的支持
public class SmsApiController {

    @Autowired
    private SendSms sendSms;

    @Autowired
    private RedisTemplate<String,String> redisTemplate;

    @GetMapping("/send/{phone}")
    public String code(@PathVariable("phone")String phone){
        //调用方法发送(模拟真实业务)
        String code= redisTemplate.opsForValue().get(phone);
        if(!StringUtils.isEmpty(code)){
            return phone + ":" + code + "已存在,还没有过期";
        }

        //生成验证码并存储到redis中
        code = UUID.randomUUID().toString().substring(0, 4);
        HashMap<String, Object> param = new HashMap<>();
        param.put("code", code);

        boolean isSend = sendSms.send(phone, "SMS_194060228", param);
        if(isSend){
            redisTemplate.opsForValue().set(phone,code,5, TimeUnit.MINUTES);
            return phone + ":" + code + "发送成功";
        }else{
            return "发送失败";
        }

    }

}

 

连接Redis采用的是Spring-data-redis,连接设置写在了配置文件上了。

spring.redis.host=127.0.0.1
spring.redis.port=6379

 

总结:redis单机,没做集群,Spring-data-redis没做过多配置文件的设置,是一个非常简单的redis做缓存的一个应用了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值