1、Jedis所需要的jar包
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.2.0</version>
</dependency>
2、连接Redis注意事项
禁用Linux的防火墙:Linux(CentOS7)里执行命令
systemctl stop/disable firewalld.service
redis.conf中注释掉bind 127.0.0.1 ,然后protected-mode no
开启redis-server [root@localhost ~]# /usr/local/bin/redis-server /etc/redis.conf
3、测试连接
1、创建测试程序
package com.manster.jedis;
import redis.clients.jedis.Jedis;
/**
* @Author manster
* @Date 2021/5/14
**/
public class JedisDemo1 {
public static void main(String[] args) {
//创建Jedis对象
Jedis jedis = new Jedis("192.168.75.11",6379);
String ping = jedis.ping();
System.out.println(ping);
}
}
结果为:
PONG
4、测试相关数据类型
1、测试 string
@Test
public void demo1(){
Jedis jedis = new Jedis("192.168.75.11",6379);
jedis.set("score1","88");
jedis.set("score2","98");
jedis.set("score3","68");
Set<String> keys = jedis.keys("*");
Iterator<String> iterator = keys.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
System.out.println(jedis.exists("score1"));
System.out.println(jedis.ttl("score1"));
System.out.println(jedis.get("score1"));
}
输出结果为:
score2
score3
score1
true
-1
88
2、测试 list
@Test
public void demo2(){
Jedis jedis = new Jedis("192.168.75.11",6379);
jedis.lpush("k1","v1","v2","v3");
List<String> k1 = jedis.lrange("k1", 0, -1);
System.out.println(k1);
}
输出结果为:
[v3, v2, v1]
3、测试 set
@Test
public void demo3(){
Jedis jedis = new Jedis("192.168.75.11",6379);
jedis.sadd("name","张三","李四");
Set<String> name = jedis.smembers("name");
Iterator<String> iterator = name.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
输出结果为:
张三
李四
4、测试 hash
@Test
public void demo4(){
Jedis jedis = new Jedis("192.168.75.11",6379);
jedis.hset("h1","username","manster");
System.out.println(jedis.hget("h1","username"));
}
输出结果为:
manster
5、测试 zset
@Test
public void demo5(){
Jedis jedis = new Jedis("192.168.75.11",6379);
jedis.zadd("china",100,"beijing");
System.out.println(jedis.zrange("china", 0, -1));
}
输出结果为:
[beijing]
5、实例
完成一个手机验证码功能
要求:
1、输入手机号,点击发送后随机生成6位数字码,2分钟有效
2、输入验证码,点击验证,返回成功或失败
3、每个手机号每天只能输入3次
package com.manster.jedis;
import redis.clients.jedis.Jedis;
import java.util.Random;
/**
* @Author manster
* @Date 2021/5/15
**/
public class VerifyCode {
public static void main(String[] args) {
//获取验证码
verifyCode("1249041911");
//进行校验
//getRedisCode("1249041911","123456");
}
//获取随机的6为验证码
public static String getCode(){
Random random = new Random();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 6; i++) {
int num = random.nextInt(10);
sb.append(num);
}
return String.valueOf(sb);
}
//控制校验次数
public static void verifyCode(String phone){
Jedis jedis = new Jedis("192.168.75.11",6379);
String countKey = phone + "count";
String codeKey = phone + "code";
String count = jedis.get(countKey);
if(count == null){
//第一次发送,存入计数的key
jedis.setex(countKey, 24*60*60, "1");
} else if (Integer.parseInt(count) <= 2){
//当请求次数小于3次时,计数+1
jedis.incr(countKey);
} else {
//三次都不正确
System.out.println("今天的三次机会已经使用完了,请明天再来");
}
//将生成的验证码存入redis
String vcode = getCode();
//有效期为120s
jedis.setex(codeKey, 120 , vcode);
jedis.close();
}
//校验验证码
public static void getRedisCode(String phone, String code){
Jedis jedis = new Jedis("192.168.75.11",6379);
String codeKey = phone + "code";
String countKey = phone + "count";
//从redis中得到验证码
String redisCode = jedis.get(codeKey);
if (redisCode == null){
System.out.println("请先获取验证码");
return;
}
if(redisCode.equals(code)){
System.out.println("验证成功");
//成功后直接删除
jedis.del("codeKey");
jedis.del("countKey");
} else {
System.out.println("验证失败");
}
jedis.close();
}
}
第一次获取验证码
public static void main(String[] args) {
//获取验证码
verifyCode("1249041911");
//进行校验
//getRedisCode("1249041911","123456");
}
redis中所存储的数据
127.0.0.1:6379> keys *
1) "1249041911count"
2) "1249041911code"
127.0.0.1:6379> get 1249041911code
"782575"
127.0.0.1:6379> get 1249041911count
"1"
提交验证码
public static void main(String[] args) {
//获取验证码
//verifyCode("1249041911");
//进行校验
getRedisCode("1249041911","782575");
}
验证成功
提交验证码
public static void main(String[] args) {
//获取验证码
//verifyCode("1249041911");
//进行校验
getRedisCode("1249041911","123456");
}
验证失败
再获取三次验证码
public static void main(String[] args) {
//获取验证码
verifyCode("1249041911");
//进行校验
//getRedisCode("1249041911","123456");
}
今天的三次机会已经使用完了,请明天再来