Jedis操作Redis6
1. IDEA连接远程的Redis
Jedis是一个java的模块,用来连接和操作我们的Redis数据库。类似于以前我们用我们的jdbc操作我们的mysql数据库。
开始前,我们先要把redis的配置文件修改一下:
把bind 127.0.0.1 去掉,并且把protected-mode改为no。
然后我们还得关闭我们的防火墙:
可以先通过以下命令查看防火墙的状态。
systemctl status firewalld
如果显示开启,那么我们得关闭防火墙,否则java连接Redis会超时并报错。(如果他的active是running就证明防火墙开着)
关闭防火墙的命令如下:
systemctl stop firewalld
此时我们再看防火墙的状态,显示的是dead(死亡)。也就是关闭了。
为了确保我们的Redis可以连上,我们最好就是把Redis服务器先关了,再打开。
然后我们新建一个Maven工程。导入我们的依赖:
<dependencies>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.2.0</version>
</dependency>
</dependencies>
然后我们就可以用java来操作我们的Redis数据库啦。
我们现在主程序连接一下我们的Redis数据库看看。
import redis.clients.jedis.Jedis;
public class RedisDemo {
public static void main(String[] args) {
//创建Jedis对象(传入的两个参数分别是Redis所在服务器ip地址和端口号)
Jedis jedis = new Jedis("119.91.153.74",6379);
//测试是否连上
System.out.println(jedis.ping());
}
}
如果显示PONG,那么就证明连接成功了。
2. 各种命令操作
这个其实很简单,掌握了Redis命令的使用,基本上就等于掌握了Jedis方法的使用。
比如对keys的操作:
在Jedis中,对应的方法就是:
@Test
public void demo(){
jedis.set("name","Tom");
//keys *
System.out.println(jedis.keys("*"));
//exists key
System.out.println(jedis.exists("name"));
//type key
System.out.println(jedis.type("name"));
//其他的用法相同,这里不做过多代码介绍
}
我们常见的还有字符串的操作:
对应的方法也是一样的:
@Test
public void demo1(){
jedis.mset("age","18", "address", "北京");
System.out.println(jedis.mget("age","name","address"));
}
运行结果:
其他的例如List、Hash、Set、Zset其实也都一样,方法名跟命令一样,参数的位置也一样。最终实现的效果也一样。这里就不一一演示了。
如果想知道这几个基本的数据类型都有哪些命令,可以看一下我的这篇博客——Redis各数据类型的常用命令操作。
3. 模拟验证码发送
案例要求:
1、输入手机号,点击发送后随机生成一个6位数字,2分钟内有效
2、输入验证码,点击验证,返回成功或者失败
3、每个手机号每天只能输入3次
解题思路如下:
代码直接提供,页面就不写了。自己在main程序中通过getVerifyCode(phone);方法通过手机号向服务器请求验证码,通过queryCode(phone, “572113”);验证验证码即可。(验证验证码的时候,记得把main程序中的getVerifyCode(phone)方法注释掉。)
import redis.clients.jedis.Jedis;
import java.util.Random;
public class PhoneCode {
public static void main(String[] args) {
String phone = "13579246810";
//模拟验证码的发送
getVerifyCode(phone);
//模拟验证码的验证
//queryCode(phone, "572113");
}
//1、生成6位验证码
public static String getCode(){
StringBuilder sb = new StringBuilder();
Random random = new Random();
for(int i = 0; i < 6; i++){
int num = random.nextInt(10);
sb.append(num);
}
return sb.toString();
}
//2、每个手机只能发送3次,验证码放到redis中,设置过期时间
public static void getVerifyCode(String phone){
//创建Jedis对象
Jedis jedis = new Jedis("119.91.153.74",6379);
/**拼接key**/
//发送次数的key
String countKey = phone+":count";
//验证码的key
String codeKey = phone+":code";
//获取次数
String phoneCount = jedis.get(countKey);
//发送次数验证和响应
if(phoneCount == null){
//第一次发送,设置过期时间为24小时,值为1
jedis.setex(countKey, 24*60*60, "1");
}else if(Integer.parseInt(phoneCount) <= 2){
//次数小于等于2,自增1
jedis.incr(countKey);
}else if(Integer.parseInt(phoneCount) >= 3){
//已经发送3次
System.out.println("今天发送次数超过3次");
jedis.close();
return;
}
//验证码
String code = getCode();
jedis.setex(codeKey, 120, code);
jedis.close();
}
//3、验证码的校验
public static void queryCode(String phone, String code){
//创建Jedis对象
Jedis jedis = new Jedis("119.91.153.74",6379);
String vCode = jedis.get(phone+":code");
if(code.equals(vCode)){
System.out.println("验证通过");
}else {
System.out.println("验证码错误");
}
jedis.close();
}
}