1. 添加redis依賴
向pom.xml中添加依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2. 添加redis配置
redis:
host: localhost # Redis服務(wù)器地址
database: 0 # Redis數(shù)據(jù)庫索引(默認(rèn)為0)
port: 6379 # Redis服務(wù)器連接端口
password: # Redis服務(wù)器連接密碼(默認(rèn)為空)
jedis:
pool:
max-active: 8 # 連接池最大連接數(shù)(使用負(fù)值表示沒有限制)
max-wait: -1ms # 連接池最大阻塞等待時(shí)間(使用負(fù)值表示沒有限制)
max-idle: 8 # 連接池中的最大空閑連接
min-idle: 0 # 連接池中的最小空閑連接
timeout: 3000ms # 連接超時(shí)時(shí)間(毫秒)
3. 添加自定義Redis key
# 自定義redis key
redis:
key:
prefix:
authCode: "portal:authCode:"
orderId: "portal:orderId:"
expire:
authCode: 90 # 驗(yàn)證碼超期時(shí)間
4. 構(gòu)建Redis工具類埠帕,通過StringRedisTemplate實(shí)現(xiàn)方法
/**
* redis操作Service的實(shí)現(xiàn)類
* Created by macro on 2018/8/7.
*/
@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);
}
}
5. 實(shí)際使用
5.1 場景
- 用戶注冊(cè)時(shí)獲取驗(yàn)證碼室叉,和手機(jī)號(hào)一起保存在Redis中;
- 輸入驗(yàn)證碼后根據(jù)Redis key去Redis查詢驗(yàn)證碼并校驗(yàn)仇味。
5.1 Controller
/**
* 獲取驗(yàn)證碼
* @param telephone
* @return
*/
@RequestMapping(value = "/getAuthCode", method = RequestMethod.GET)
@ResponseBody
public CommonResult getAuthCode(@RequestParam String telephone) {
return memberService.generateAuthCode(telephone);
}
5.2 ServiceImpl
/**
*
* 獲取驗(yàn)證碼
*/
@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));
}
//驗(yàn)證碼綁定手機(jī)號(hào)并存儲(chǔ)到redis
redisService.set(REDIS_KEY_PREFIX_AUTH_CODE + telephone, sb.toString());
//設(shè)置過期時(shí)間
redisService.expire(REDIS_KEY_PREFIX_AUTH_CODE + telephone, AUTH_CODE_EXPIRE_SECONDS);
return CommonResult.success(sb.toString(), "獲取驗(yàn)證碼成功");
}
/**
*
* 對(duì)輸入的驗(yàn)證碼進(jìn)行校驗(yàn)
*/
private boolean verifyAuthCode(String authCode, String telephone) {
if (StringUtils.isEmpty(authCode)) {
return false;
}
//根據(jù)key取出Value并校驗(yàn)
String realAuthCode = redisService.get(REDIS_KEY_PREFIX_AUTH_CODE + telephone);
return authCode.equals(realAuthCode);
}