package com.linfenpeng.jedis.Jedis;import redis.clients.jedis.Jedis;import java.util.Random;/*** @Author linfenpeng* @Description //TODO $* @Date $ $* @Param $* @return $**/
public class PhoneCode {public static void main(String[] args) {//模拟验证码发送verifyCode("13417652100");//getRedisCode("13417652100","455775");}//1.生成6位数数字验证码public static String getCode(){Random random = new Random();String code = "";for (int i = 0; i < 6; i++) {int rand = random.nextInt(10);code += rand;}return code;}//2.每个手机每天只能发送三次,验证码放到redis中,设置过期时间public static void verifyCode(String phone){Jedis jedis = new Jedis("127.0.0.1",6379);//拼接key//手机发送次数keyString countKey = "verifyCode"+phone+":count";//验证码keyString codeKey = "verifyCode"+phone+":code";//每个手机每天只能发送三次String count = jedis.get(countKey);if (count == null){//没有发送次数,第一次发送//设置发送次数是1jedis.setex(countKey,24*60*60,"1");}else if (Integer.parseInt(count) <= 2){//发送次数+1jedis.incr(countKey);}else if (Integer.parseInt(count) > 2){//发送三次,不能再发送System.out.println("今天发送次数已经超过三次!");jedis.close();return;}//发送的验证码放到reidsString vcode = getCode();jedis.setex(codeKey,120,vcode);jedis.close();}//3.验证码校验public static void getRedisCode(String phone,String code){Jedis jedis = new Jedis("127.0.0.1",6379);//验证码keyString codeKey = "verifyCode"+phone+":code";String redisCode = jedis.get(codeKey);if (redisCode.equals(code)){System.out.println("成功!");}else {System.out.println("失败!");}jedis.close();}}

Springboot 整合redis、config 配置


import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.hash.ObjectHashMapper;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;import java.time.Duration;/*** @Author linfenpeng* @Description reids 配置* @Date $ $* @Param $* @return $**/@EnableCaching
@Configuration
public class RedisConfig extends CachingConfigurerSupport {@Beanpublic RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory){RedisTemplate<String,Object> template = new RedisTemplate<>();RedisSerializer<String> redisSerializer = new StringRedisSerializer();Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);ObjectMapper om  = new ObjectMapper();om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(om);template.setConnectionFactory(factory);//key序列化方式template.setKeySerializer(redisSerializer);//value序列化方式template.setHashValueSerializer(jackson2JsonRedisSerializer);return template;}@Beanpublic CacheManager cacheManager(RedisConnectionFactory factory){RedisSerializer<String> redisSerializer = new StringRedisSerializer();Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);//解决查询缓存异常问题ObjectMapper om = new ObjectMapper();om.setVisibility(PropertyAccessor.ALL,JsonAutoDetect.Visibility.ANY);om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(om);//配置序列化,过期时间600秒RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofSeconds(600)).serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer)).serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer)).disableCachingNullValues();RedisCacheManager cacheManager = RedisCacheManager.builder(factory).cacheDefaults(config).build();return cacheManager;}}

短信发送验证码,每天只限三次相关推荐

  1. 阿里云短信服务——短信发送验证码

    引言 短信服务现在在很多地方都用的到,我们最多接触到的可能就是验证码的发送了:现在很多大厂都提供由短信服务对应的api,直接调用就可以轻松实现短信发送:下面我以阿里云为例,演示一下如何短信发送验证码: ...

  2. jeecg 手机注册 阿里云短信API 【 阿里云短信发送验证码 平台配置和项目中使用】

    文章目录 jeecg 项目效果展示 短息通知页面入口 代码中调用短信api 配置和代码 API中的重要参数配置项: 阿里控制台注册 注册签名 注册短信模板  阿里云短信发送验证码配置和项目使用 je ...

  3. 邮箱发送验证码和短信发送验证码的学习笔记

    邮箱发送验证码 //邮箱验证码public static boolean sendEmail(String emailaddress,String code) {try {HtmlEmail emai ...

  4. PHP 手机短信发送验证码

    点击链接加入群[php/web 学习课堂]:https://jq.qq.com/?_wv=1027&k=5645xiw 欢迎大家加入,一起讨论学习 本篇设计的知识点有点多,我会分类将,同学们可 ...

  5. thinkphp5+阿里短信发送验证码

    一.申请阿里短信接口,开通服务,申请AccessKey ID和Access Key Secret 二.申请短信发送模板 三.在thinkphp5中的config文件中添加一下配置 //短信配置'SMS ...

  6. 短信发送验证码实现验证

    写在前面   你们好,我是小庄.很高兴能和你们一起学习短信发送功能.如果您对Java感兴趣的话可关注我的动态.   写博文是一种习惯,在这过程中能够梳理和巩固知识点. 实现思路:前台将手机号码发送到后 ...

  7. laravel中实现短信发送验证码

    前段时间想实现一个短信验证码的功能,但是卡了很长时间. 首先我用的是阿里云的短信服务业务,其首次接入流程如下: 在阿里云上开通短信服务后需要做的: 1,申请签名  2,申请模板   3,创建Acces ...

  8. 阿里云短信发送验证码使用记录

    官网:https://www.aliyun.com/product/sms 0.首先需要注册阿里云账号,可以直接用支付宝登陆. 1.登陆阿里云短信管理控制台,选择快速学习,使用测试短信发送 2.测试手 ...

  9. php短信验证案例,PHP项目之容联云短信发送验证码

    一.简介 短信验证码功能,在一些网站中,都有普遍使用,容联云是国内领先的云通信平台,很多网站都在使用,本专题讲解一下,使用容联云平台的短信验证码功能. 二.特性 5秒必达.资费低.接入快,流程如下: ...

  10. springboot实现短信发送验证码及消息队列发送注册成功短信

    需要源码小伙伴可以到微信小程序:"MINIIT资源库"获取,作者承诺免费 PS:在编写功能之前,需要得到阿里云短信服务API: 使用消息队列(mq)可以将主业务和副业务分离,主业务 ...

最新文章

  1. telegraf监控mysql数据库_部署Telegraf+Influxdb+Grafana 架构来监控 MySQL
  2. java.lang.IllegalStateException: Not connected to server
  3. 牛客 XOR和(找规律)
  4. 中国专业开发者最多,最受 Web 服务青睐,Java 8 为最受欢迎版本 | 2020 年 Java 开发现状大调查...
  5. SVM入门(四)线性分类器的求解——问题的描述Part1
  6. lingo求优化模型
  7. win10桌面右键一直转圈_不多占1M内存的win10桌面美化
  8. 插入网线后以太网显示ip4连接无网络访问权限
  9. 【四足机器人那些事】足端轨迹规划(一)
  10. c语言程序设计教程2014版,C语言程序设计案例教程(第3版)
  11. word打开老是配置进度_打开word2007时总是出现配置进度,怎么解决?
  12. 用LangChain构建大语言模型应用
  13. 飞腾cpu服务器浪潮信息,浪潮发布国产飞腾CPU服务器
  14. RC滤波 电阻电容的损耗计算方法
  15. JMeter - REST API测试 - 完整的数据驱动方法(翻译)
  16. ChatGPT替代品使用指南
  17. keil 生成三角波dac0832_弹性波,时域显式接口简介
  18. C++中virtual的三种用法
  19. 高度塌陷问题及解决方法
  20. 半路出家学php可以吗,PHP半路出家(3)

热门文章

  1. B站视频播放速度设置
  2. git常用命令 提交步骤
  3. Android浏览器插件开发
  4. 嫌耗费 7.5 亿做的“垃圾”软件太难用,被 3 个程序员奶爸重写并开源了,结果......
  5. 使用matlab来压缩avi视频文件,版本 matlab2014a
  6. Root 大师把手机搞死了
  7. 360搜索蝴蝶效应:与搜狗必有一战 百度先布防
  8. c语言运算符重载格式,运算符重载函数的两种形式
  9. 1.2 拆分字符串,存入数组
  10. 基于Eclipse的下一代建模工具