7.Jedis操作Redis6
pom.xml
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.2.0</version>
</dependency>
<!-->随机验证码工具<-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>4.5.15</version>
</dependency>
JedisStudy.java
package redis.jedis;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class JedisStudy {
public static void main(String[] args) {
// 创建Jedis对象
Jedis jedis = new Jedis("101.43.146.65", 6379);
// 测试连接
String value = jedis.ping();
System.out.println(value);
// 测试string类型
// testString(jedis);
// 测试List类型
// testList(jedis);
// 测试Set类型
// testSet(jedis);
// 测试Hash类型
//testHash(jedis);
// 测试Zset类型
testZset(jedis);
}
// String类型操作
public static void testString(Jedis jedis){
// 添加k1的value
jedis.set("k1", "hello");
// 获取k1的value
System.out.println(jedis.get("k1"));
// 添加k2 k3的value
jedis.mset("k2", "v2", "k3", "v3");
// 获取k1 k2 k3的value
System.out.println(jedis.mget("k1", "k2", "k3"));
// 获取所有key
Set<String> keys = jedis.keys("*");
for(String key : keys){
System.out.println(key);
}
// 取k1是否存在
System.out.println(jedis.exists("k1"));
// 获取k1过期时间 -1永不过期
System.out.println(jedis.ttl("k1"));
}
// List类型操作
public static void testList(Jedis jedis){
// 删除fruit
if(jedis.exists("fruit")) jedis.del("fruit");
// 添加fruit的value
jedis.lpush("fruit", "apple", "peach", "orange", "banana", "apple");
// 获取fruit的所有value
List<String> fruit = jedis.lrange("fruit", 0, -1);
System.out.println(fruit);
}
// Set类型操作
public static void testSet(Jedis jedis){
// 删除gender
if(jedis.exists("gender")) jedis.del("gender");
// 添加gender的value
jedis.sadd("gender", "woman", "man", "man", "woman", "man");
// 获取gender的所有value
Set<String> gender = jedis.smembers("gender");
System.out.println(gender);
}
// Hash类型操作
public static void testHash(Jedis jedis){
// 删除user
if(jedis.exists("user")) jedis.del("user");
// 添加user的value
jedis.hset("user", "age", "25");
// 获取user的age
String hGet = jedis.hget("user", "age");
System.out.println(hGet);
// 批量添加user的value
Map<String, String> map = new HashMap<>();
map.put("name", "ZhangSan");
map.put("gender", "man");
map.put("address", "beijing");
jedis.hmset("user", map);
// 获取user的所有value
List<String> user = jedis.hmget("user","name", "age", "gender", "address");
System.out.println(user);
}
// testZset类型操作
public static void testZset(Jedis jedis){
// 删除Top3
if(jedis.exists("Top3")) jedis.del("Top3");
// 添加Top3的value
jedis.zadd("Top3", 100d,"China");
jedis.zadd("Top3", 80d,"UK");
jedis.zadd("Top3", 90d,"USA");
// 获取Top3的value
Set<String> top3 = jedis.zrange("Top3", 0, -1);
System.out.println(top3);
}
}
PhoneCode.java
jedis实现简单验证码验证功能
package redis.jedis;
import cn.hutool.core.util.RandomUtil;
import redis.clients.jedis.Jedis;
public class PhoneCode {
public static void main(String[] args) {
//模拟验证码发送
verifyCode("15610113211");
//模拟验证码校验
// getRedisCode("15610113211", "646784");
}
//1.生成6位数字验证码
public static String getCode() {
return RandomUtil.randomNumbers(6);
}
//2. 每个手机每天只能发送三次,验证放在redis中,设置过期时间
public static void verifyCode(String phone) {
//连接redis
Jedis jedis = new Jedis("101.43.146.65", 6379);
//拼接key
//手机发送次数
String countKey = "countKey" + phone;
//验证码key
String codeKey = "codeKey" + phone;
//每个手机只能发送三次
String count = jedis.get(countKey);
if (count.equals("")){
//没有发送次数,说明是第一次发送
//设置发送次数是1
jedis.setex(countKey, 24*60*60, "1");
}else if (Integer.parseInt(count) <= 2) {
//发送次数 +1
jedis.incr(countKey);
}else if (Integer.parseInt(count) > 2) {
//发送三次,不能再发送了
Long ttl = jedis.ttl(countKey);
System.out.println("Verification is frequent, please verify again after " + ttl + " seconds");
jedis.close();
return;
}
//发送验证码放到 redis 中
String vscode = getCode();
jedis.setex(codeKey, 120, vscode);
String c = jedis.get(countKey);
Long ttl = jedis.ttl(codeKey);
System.out.println("phone:" + phone + " code:" + vscode + " count:" + c + " ttl:" + ttl);
jedis.close();
}
//3.验证码校验
public static void getRedisCode(String phone,String code) {
//从redis获取验证码
Jedis jedis = new Jedis("101.43.146.65", 6379);
//验证码key
String codeKey = "codeKey"+phone;
String redisCode = jedis.get(codeKey);
//判断
//先判断是否超时
Long ttl = jedis.ttl(codeKey);
if(ttl == -2){
jedis.close();
System.out.println("Validation timed out");
return;
}
//再判断一致性
if(redisCode.equals(code)) {
System.out.println("Validation succeeded");
}else {
System.out.println("Incorrect validation");
}
jedis.close();
}
}