亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Redis實現(xiàn)驗證碼發(fā)送并限制每日發(fā)送次數(shù)的示例代碼

 更新時間:2022年04月18日 12:29:56   作者:得過且過的勇者y  
本文主要介紹了Redis實現(xiàn)驗證碼發(fā)送并限制每日發(fā)送次數(shù)的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

1、功能

  • 輸入手機號,點擊發(fā)送后隨機生成六位數(shù)字碼,2分鐘有效
  • 輸入驗證碼,點擊驗證,返回成功或失敗
  • 每個手機號每天只能輸3次

2、分析

  • 每個手機每天只能輸3次:incr每次發(fā)送之后+1,當值為3時提示不能發(fā)送,過期時間為當天結束
  • 隨機生成6位數(shù)字驗證碼:RandomUtil(hutool)
  • 驗證碼2分鐘有效:放入redis里并設置過期時間2分鐘
  • 判斷驗證碼是否一致:從redis里獲取驗證碼和輸入的驗證碼進行比對

3、實現(xiàn)

package cn.ken.blog.controller.common;

import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.RandomUtil;
import cn.ken.blog.common.constant.Constants;
import cn.ken.blog.common.domain.Result;
import cn.ken.blog.common.enums.ErrorCodeEnum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;
import java.util.concurrent.TimeUnit;

/**
?* 驗證碼控制器
?* @author Ken-Chy129
?* @date 2022/4/17 20:28
?*/
@RestController
@SuppressWarnings(value = { "unchecked", "rawtypes" })
public class CaptureController {
? ??
? ? @Autowired
? ? private RedisTemplate redisTemplate;
? ??
? ? // 生成驗證碼
? ? @GetMapping("getNumCode")
? ? public Result<String> getNumCode(String phone) {
? ? ? ? String captureLimitKey = Constants.CAPTCHA_LIMIT_KEY + phone;
? ? ? ? Integer counts = (Integer) redisTemplate.opsForValue().get(captureLimitKey);
? ? ? ? if (ObjectUtils.isEmpty(counts)) {
? ? ? ? ? ? // 今天第一次驗證,故之前緩存中無該鍵
? ? ? ? ? ? // 距離今天結束剩下多少毫秒
? ? ? ? ? ? long expire = DateUtil.endOfDay(new Date()).between(new Date(), DateUnit.MS);
? ? ? ? ? ? redisTemplate.opsForValue().set(captureLimitKey, 1, expire, TimeUnit.MILLISECONDS);
? ? ? ? } else if (counts < 3) {
? ? ? ? ? ? // 沒有超過限制次數(shù)
? ? ? ? ? ? redisTemplate.opsForValue().increment(captureLimitKey);
? ? ? ? } else {
? ? ? ? ? ? // 超過限制次數(shù),不生成驗證碼,直接返回
? ? ? ? ? ? return new Result<String>().error(ErrorCodeEnum.OVER_LIMITS);
? ? ? ? }
? ? ? ? // 生成驗證碼
? ? ? ? String code = RandomUtil.randomNumbers(6); // 隨機生成六位數(shù)
? ? ? ? String captureCodeKey = Constants.CAPTCHA_CODE_KEY + phone;
? ? ? ? redisTemplate.opsForValue().set(captureCodeKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);
? ? ? ? return new Result<String>().success(captureCodeKey + ":" + code);
? ? }
? ??
? ? // 驗證驗證碼
? ? @GetMapping("verify")
? ? public Result<String> verify(String phone, String code) {
? ? ? ? String captureCodeKey = Constants.CAPTCHA_CODE_KEY + phone;
? ? ? ? String realCode = (String) redisTemplate.opsForValue().get(captureCodeKey);
? ? ? ? if (ObjectUtils.isEmpty(realCode)) {
? ? ? ? ? ? // redis中不存在該用戶生成的驗證碼,證明驗證碼以過期銷毀
? ? ? ? ? ? return new Result<String>().error(ErrorCodeEnum.OVERDUE_CODE);
? ? ? ? }
? ? ? ? if (realCode.equals(code)) {
? ? ? ? ? ? return new Result<String>().success("驗證成功");
? ? ? ? } else {
? ? ? ? ? ? return new Result<String>().error(ErrorCodeEnum.ERROR_CODE);
? ? ? ? }
? ? }
? ??
// ? ?@Scheduled(cron = "0 0 12 * * ?")
// ? ?private void clear() {
// ? ? ? ?redisTemplate.delete()
// ? ?}
}
// Constants類

/**
?* 驗證碼 redis key
?*/
public static final String CAPTCHA_CODE_KEY = "captcha_codes:";

/**
?* 每日限制 redis key
?*/
public static final String CAPTCHA_LIMIT_KEY = "captcha_limits:";
/**
?* 驗證碼有效期(分鐘)
?*/
public static final Integer CAPTCHA_EXPIRATION = 2;

到此這篇關于Redis實現(xiàn)驗證碼發(fā)送并限制每日發(fā)送次數(shù)的示例代碼的文章就介紹到這了,更多相關Redis驗證碼發(fā)送并限制次數(shù)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 詳解Centos7下配置Redis并開機自啟動

    詳解Centos7下配置Redis并開機自啟動

    本篇文章主要介紹了Centos7下配置Redis并開機自啟動,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2016-11-11
  • 基于redis實現(xiàn)的點贊功能設計思路詳解

    基于redis實現(xiàn)的點贊功能設計思路詳解

    點贊是我們現(xiàn)在經(jīng)常見到的一個效果,如朋友圈、微博都有點贊的效果,下面這篇文章主要跟大家分享了基于redis實現(xiàn)的點贊功能設計思路的相關資料,文中介紹的非常詳細,對大家實現(xiàn)點贊功能具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-05-05
  • Redis 8種基本數(shù)據(jù)類型及常用命令和數(shù)據(jù)類型的應用場景小結

    Redis 8種基本數(shù)據(jù)類型及常用命令和數(shù)據(jù)類型的應用場景小結

    Redis是一種基于內存操作的數(shù)據(jù)庫,其中多虧于高效的數(shù)據(jù)結構,本文主要介紹了Redis 8種基本數(shù)據(jù)類型及常用命令和數(shù)據(jù)類型的應用場景小結,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • Go語言操作RediSearch進行搜索方法示例詳解

    Go語言操作RediSearch進行搜索方法示例詳解

    這篇文章主要為大家介紹了Go語言操作RediSearch進行搜索方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • Redis分布式鎖python-redis-lock使用方法

    Redis分布式鎖python-redis-lock使用方法

    這篇文章主要介紹了Redis分布式鎖python-redis-lock使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • Redis?HyperLogLog數(shù)據(jù)統(tǒng)計輕量級解決方案詳解

    Redis?HyperLogLog數(shù)據(jù)統(tǒng)計輕量級解決方案詳解

    這篇文章主要為大家介紹了Redis?HyperLogLog數(shù)據(jù)統(tǒng)計輕量級解決方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • 高并發(fā)場景分析之redis+lua防重校驗

    高并發(fā)場景分析之redis+lua防重校驗

    這篇文章主要介紹了高并發(fā)場景分析之redis+lua防重校驗,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • 詳解Redis 分布式鎖遇到的序列化問題

    詳解Redis 分布式鎖遇到的序列化問題

    這篇文章主要介紹了Redis 分布式鎖遇到的序列化問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • 一文帶你了解Redis中RDB與AOF的區(qū)別

    一文帶你了解Redis中RDB與AOF的區(qū)別

    Redis 在持久化時,給我們提供了兩種方式,這兩種方式就是 RDB 與 AOF,那這兩種方式有什么區(qū)別呢,本文就帶大家詳細的了解一下二者的區(qū)別,需要的朋友可以參考下
    2023-06-06
  • redis集群實現(xiàn)清理前綴相同的key

    redis集群實現(xiàn)清理前綴相同的key

    這篇文章主要介紹了redis集群實現(xiàn)清理前綴相同的key,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10

最新評論