redis存储验证码设置过期时间

mac2024-03-28  2

Redis是用C语言开发的一个高性能键值对数据库,可用于数据缓存,主要用于处理大量数据的高访问负载。

1.用于缓存数据库中经常查询的表,2.缓存业务中需要存储的临时数据,3.用作消息列队和一些数据排行榜.4.模拟Session,在soa架构中存储一些全局变量.

在这里简单记录存储临时数据以及设置过期时间

1.导入pom坐标

<!--redis依赖配置--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>

2.更改application.yml配置文件

spring: datasource: url: jdbc:mysql://localhost:3306/mall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai username: root password: root redis: host: localhost # Redis服务器地址 database: 0 # Redis数据库索引(默认为0) port: 6379 # Redis服务器连接端口 password: # Redis服务器连接密码(默认为空) jedis: pool: max-active: 8 # 连接池最大连接数(使用负值表示没有限制) max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制) max-idle: 8 # 连接池中的最大空闲连接 min-idle: 0 # 连接池中的最小空闲连接 timeout: 3000ms # 连接超时时间(毫秒) # 自定义redis key redis: key: prefix: authCode: "portal:authCode:" expire: authCode: 120 # 验证码超期时间

3. 编写操作redis工具类

/** * redis操作Service, * 对象和数组都以json形式进行存储 */ public interface RedisService { /** * 存储数据 */ void set(String key, String value); /** * 获取数据 */ String get(String key); /** * 设置超期时间 */ boolean expire(String key, long expire); /** * 删除数据 */ void remove(String key); /** * 自增操作 * @param delta 自增步长 */ Long increment(String key, long delta); } ----------------------------------------------------------------------------------- @Service public class RedisServiceImpl implements RedisService { @Autowired private StringRedisTemplate stringRedisTemplate; @Override public void set(String key, String value) { stringRedisTemplate.opsForValue().set(key, value); } @Override public String get(String key) { return stringRedisTemplate.opsForValue().get(key); } @Override public boolean expire(String key, long expire) { return stringRedisTemplate.expire(key, expire, TimeUnit.SECONDS); } @Override public void remove(String key) { stringRedisTemplate.delete(key); } @Override public Long increment(String key, long delta) { return stringRedisTemplate.opsForValue().increment(key,delta); } }

4.编写验证码工具类

public interface UmsMemberService { /** * 生成验证码 */ CommonResult generateAuthCode(String telephone); /** * 判断验证码和手机号码是否匹配 */ CommonResult verifyAuthCode(String telephone, String authCode); } ---------------------------------------------------------------- @Service public class UmsMemberServiceImpl implements UmsMemberService { @Autowired private RedisService redisService; @Value("${redis.key.prefix.authCode}") private String REDIS_KEY_PREFIX_AUTH_CODE; @Value("${redis.key.expire.authCode}") private Long AUTH_CODE_EXPIRE_SECONDS; @Override public CommonResult generateAuthCode(String telephone) { StringBuilder sb = new StringBuilder(); Random random = new Random(); for (int i = 0; i < 6; i++) { sb.append(random.nextInt(10)); } //验证码绑定手机号并存储到redis redisService.set(REDIS_KEY_PREFIX_AUTH_CODE + telephone, sb.toString()); redisService.expire(REDIS_KEY_PREFIX_AUTH_CODE + telephone, AUTH_CODE_EXPIRE_SECONDS); return CommonResult.success(sb.toString(), "获取验证码成功"); } //对输入的验证码进行校验 @Override public CommonResult verifyAuthCode(String telephone, String authCode) { if (StringUtils.isEmpty(authCode)) { return CommonResult.failed("请输入验证码"); } String realAuthCode = redisService.get(REDIS_KEY_PREFIX_AUTH_CODE + telephone); boolean result = authCode.equals(realAuthCode); if (result) { return CommonResult.success(null, "验证码校验成功"); } else { return CommonResult.failed("验证码不正确"); } } }

5.工具类的使用

@Controller @Api(tags = "UmsMemberController", description = "会员登录注册管理") @RequestMapping("/sso") public class UmsMemberController { @Autowired private UmsMemberService memberService; @ApiOperation("获取验证码") @RequestMapping(value = "/getAuthCode", method = RequestMethod.GET) @ResponseBody public CommonResult getAuthCode(@RequestParam String telephone) { return memberService.generateAuthCode(telephone); } @ApiOperation("判断验证码是否正确") @RequestMapping(value = "/verifyAuthCode", method = RequestMethod.POST) @ResponseBody public CommonResult updatePassword(@RequestParam String telephone, @RequestParam String authCode) { return memberService.verifyAuthCode(telephone,authCode); } }
最新回复(0)