Jedis常用操作
用Java操作redis时,需要导入依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>compile</scope>
</dependency>
创建好了Jereid对象后,可以进行redis的操作,方法与命令一致。
package com.atguigu.redis;
import org.junit.Test;
import redis.clients.jedis.BinaryClient;
import redis.clients.jedis.Jedis;
import java.util.List;
import java.util.Set;
public class JedisDemo {
public static void main(String[] args) {
//创建jedis对象
/*
需要在redis配置文件中注释本机访问(bind)
将保护模式关闭(protected-mode no)
关闭虚拟机防火墙
systemctl status firewalld:查看防火墙状态
systemctl stop firewalld:关闭防火墙
*/
Jedis jedis = new Jedis("192.168.204.128", 6379);//地址与端口号
//测试
String ping = jedis.ping();
System.out.println(ping);
}
static Jedis jedis = null;
static {
jedis = new Jedis("192.168.204.128", 6379);//地址与端口号
}
/**
* 操作List集合
*/
@Test
public void testList() {
jedis.lpush("list1", "value1", "value2", "value3");//插入
jedis.lpush("list2", "value4", "value5", "value6");//插入
jedis.lpop("list1");//从左边吐出一个值
jedis.rpoplpush("list1", "list2");//从list1右边吐出一个值,插到list2左边
jedis.lrange("list1", 0, -1);//从左到右获取元素
String zero = jedis.lindex("list1", 0);//按照索引下标获得元素
jedis.linsert("list2", BinaryClient.LIST_POSITION.BEFORE, "value1", "newValue");//在指定值value1前插入newValue
jedis.lrem("list1", 2, "value2");//从左边开始删除2个value2
jedis.lset("list2", 1, "oldValue");//将下标为0的值替换为oldValue
Long len = jedis.llen("list2");//获取列表长度
}
//操作Key String
@Test
public void testString() {
Set<String> keys = jedis.keys("*");//获取所有的key
//添加
jedis.set("name", "lucy");
//获取
String name = jedis.get("name");
System.out.println(name);
//设置多个key-value
String s1 = jedis.mset("k1", "v1", "k2", "v2");
//获取多个key的值
List<String> mget = jedis.mget("k1", "k2");
mget.forEach(System.out::println);
for (String s : keys) {
System.out.println(s);
}
}
}
Jedis实现手机验证码
要求:
1、输入手机号,点击发送后随机生成6位数字码,2分钟有效
2、输入验证码,点击验证,返回成功或失败
3、每个手机号每天只能输入3次
package com.atguigu.redis;
import redis.clients.jedis.Jedis;
import java.util.Random;
public class PhoneCode {
public static void main(String[] args) {
verifyCode("10120201212");
// getRedisCode("10120201212","715856");
}
//1、生成一个6位数字的验证码
public static String getCode() {
Random random = new Random();
StringBuilder code = new StringBuilder();
for (int i = 0; i < 6; i++) {
code.append(random.nextInt(10));//生成6次10以内的数组,拼接到code中
}
return code.toString();
}
//2、每个手机每天只能发送三次,验证码放到redis中,设置过期时间
public static void verifyCode(String phone) {
//连接redis
Jedis jedis = new Jedis("192.168.204.128", 6379);
//手机发送次数key
String countKey = "VerifyCode" + phone + ":count";
//验证码的key
String codeKey = "VerifyCode" + phone + ":code";
//每个手机每天只能发送三次
String count = jedis.get(countKey);
if (count == null) {
//没有发送次数说明是第一次发送
//设置发送次数是1,有效时间是24小时
jedis.setex(countKey, 24 * 60 * 60, "1");
} else if (Integer.parseInt(count) <= 2) {
//发送次数+1
jedis.incr(countKey);
} else if (Integer.parseInt(count) > 2) {
//已经发送了三次,不能再发送
System.out.println("今日验证码发送次数已达上限!");
jedis.close();
return;
}
//发送的验证码要放到redis里面去
String vcode = getCode();
jedis.setex(codeKey,120,vcode);//添加验证码,设置过期时间为两分钟
jedis.close();
}
//3、验证码校验
public static void getRedisCode(String phone, String code){
//从redis中获取验证码
Jedis jedis = new Jedis("192.168.204.128", 6379);
//验证码的key
String codeKey = "VerifyCode" + phone + ":code";
String redisCode = jedis.get(codeKey);
//判断redis中的验证码是否与输入的验证码一致
if(redisCode.equals(code)){
System.out.println("成功");
}else {
System.out.println("失败");
}
jedis.close();
}
}