1. 作用
2. 测试连接
1. step1:项目pom文件引入引用
<dependencies>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.2.0</version>
</dependency>
</dependencies>
2. step2: 编写测试类,测试连通性
public class JedisDemo1 {
public static void main(String[] args) {
// 创建jedis对象
Jedis jedis = new Jedis("127.0.0.1",6379);
// 测试
String value=jedis.ping();
System.out.println(value);
}
}
3. 测试相关数据类型
3.1 keys
获取所有的key集合
@Test
public void test(){
// 创建jedis对象
Jedis jedis = new Jedis("127.0.0.1",6379);
// 测试1: 查找所有的key
Set<String> keys = jedis.keys("*"); //set集合
for (String key : keys) {
System.out.println(key);
}
}
}
遍历结果:
unique:users:20201104
unique:users:20201103
users:20210101
3.2 set/get/exists/ttl
3.2.1 step1: 清空数据库
flushdb
3.2.2 step2: set/mset
// 创建jedis对象
Jedis jedis = new Jedis("127.0.0.1",6379);
// set()
jedis.set("name", "lucy");
// get()
String name = jedis.get("name");
// mset()
jedis.mset("name","zhangSan","age","18","gender","female");
// mget()
List<String> strings = jedis.mget("name", "age", "gender");
for (String string : strings) {
System.out.println(string);
}
输出:
zhangSan
18
female
4. Jedis模拟验证码发送
4.1 要求
1、输入手机号,点击发送后随机生成6位数字码,2分钟有效
2、输入验证码,点击验证,返回成功或失败
3、每个手机号每天只能输入3次
4.2 实现过程 分析
step1: 生成随机的6个数字的验证码: Random类
step2: 2分钟内有效: 把验证码放入redis中,设置过期时间是120s
step3: 验证码是否相同: 从redis中取出来与输入的比较,判断是否相同;
step4: 每个手机每天只能发送3次验证码: redis中incr操作, 每次发送后+1, 当大于2时,提示不能发送了。
4.3 代码实现
step1: 产生随机的验证码
/**
* 生成一个6位数的验证码
* @return
*/
public static String getCode(){
Random random = new Random();
StringBuilder code = new StringBuilder();
for(int i=0;i<6;i++){
// 10以内的int
int rand = random.nextInt(10);
code.append(rand);
}
return code.toString();
}
step2: 将验证码放入redis中并设置过期时间和每天3次,每次120s的限定
核心代码:
设置每天的次数: jedis.setex(countKey, 246060, “1”);
设置每次过期时间:jedis.setex(codeKey, 120, vCode);
/**
* 把验证码存入redis中,要求:1)每个手机号每天最多3次;2)每次验证过期时间是120s
* @param phone
* @param code
*/
public static void verifyCode(String phone, String code){
// 创建jedis对象
Jedis jedis = new Jedis("127.0.0.1",6379);
// 拼接key
// 手机发送次数的key 和 验证码的key
String countKey = "VerifyCode"+phone+":count";
String codeKey = "VerifyCode"+phone+":code";
// 每个手机每天三次
String count = jedis.get(countKey);
if (count==null){
// 没有发送次数,说明是第一次发送
jedis.setex(countKey, 24*60*60, "1");
}else{
if(Integer.parseInt(count)<=2){
// 发送次数+1,即在countKey数值基础上+1
jedis.incr(countKey);
}else if((Integer.parseInt(count))>2){
// 证明发送了3次
System.out.println("今天的发送次数超过了3次,不能再发送了!");
jedis.close();
}
}
// 发送的验证码放到redis中去
String vCode = getCode();
jedis.setex(codeKey, 120, vCode);
jedis.close();
}
step3: 验证码校验
/**
* 验证码校验
* @param phone
* @param code
*/
public static void getRedisCode(String phone,String code){
Jedis jedis = new Jedis();
String codeKey = "VerifyCode"+phone+":code";
String redisCode = jedis.get(codeKey);
// 判断
if(redisCode.equals(code)){
System.out.println("成功");
}else {
System.out.println("失败!");
}
jedis.close();
}