1.连接 Jedis
第一步,修改 redis 的配置,以允许外网 ip 访问 redis。
在 redis.conf 中注释掉 bind 127.0.0.1 ,并修改 protected-mode no 。
第二步,导入依赖。
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.2.0</version>
</dependency>
第三步,创建测试程序,测试连通性。
@Test
public void jedis_test(){
Jedis jedis = new Jedis("hadoop100",6379);
String pong = jedis.ping();
System.out.println(pong);
jedis.close();
}
//返回 PONG,代表成功连通。
注:记得禁用 Linux 的防火墙,否则 ping不通。在 Linux(CentOS7) 里执行命令systemctl stop firewalld.service
和 systemctl disable firewalld.service
。
2.用 Jedis-API 操作相关数据类型
① Key
@Test
public void test_String(){
Jedis jedis = new Jedis("hadoop100",6379);
//获取key对应的值
System.out.println(jedis.get("k1"));
//获取所有key
Set<String> keys = jedis.keys("*");
//输出key的数量
System.out.println(keys.size());
//判断key存不存在
System.out.println(jedis.exists("k1"));
//获取key的ttl值
System.out.println(jedis.ttl("k1"));
}
② String
@Test
public void test_String(){
Jedis jedis = new Jedis("hadoop100",6379);
//一次放一个
jedis.set("k1","v1");
jedis.set("k2","v2");
jedis.set("k3","v3");
//一次放多个
jedis.mset("str1","v1","str2","v2","str3","v3");
//批量获取key对应的值
System.out.println(jedis.mget("str1","str2","str3"));
}
③ List
@Test
public void test_List(){
Jedis jedis = new Jedis("hadoop100",6379);
//放入list类型的键值对,一个键可以放入多个值
jedis.lpush("list","v1","v2","v3","v4");
//获取list的全部值
List<String> list = jedis.lrange("list", 0, -1);
for (String str : list) {
System.out.println(str);
}
}
④ Set
@Test
public void test_Set(){
Jedis jedis = new Jedis("hadoop100",6379);
//将一个或多个 member 元素加入到集合 key 中
jedis.sadd("orders","order01");
jedis.sadd("orders","order02");
jedis.sadd("orders","order03");
jedis.sadd("orders","order04");
//取出该集合的所有值
Set<String> smembers = jedis.smembers("orders");
for (String order : smembers) {
System.out.println(order);
}
//删除集合中的某个元素
jedis.srem("orders","order04");
}
⑤ Hash
@Test
public void test_Hash(){
Jedis jedis = new Jedis("hadoop100",6379);
//给集合中的键赋值
jedis.hset("hash1","userName","parker");
//从集合取出value
System.out.println(jedis.hget("hash1","userName"));
//用map来给集合中的键赋值
Map<String,String> map = new HashMap<>();
map.put("name","parker");
map.put("number","7");
map.put("age","20");
jedis.hmset("hash2",map);
//以map形式从集合取出value
List<String> result = jedis.hmget("hash2", "name", "number");
for (String element : result) {
System.out.println(element);
}
}
⑥ Zset
@Test
public void test_Zset(){
Jedis jedis = new Jedis("hadoop100",6379);
//将一个或多个 member 元素及其 score 值加入到有序集 key 当中
jedis.zadd("animalSet",100d,"pig");
jedis.zadd("animalSet",200d,"dog");
jedis.zadd("animalSet",300d,"cat");
jedis.zadd("animalSet",500d,"rabbit");
//获取key对应有序集合的所有值
Set<String> animals = jedis.zrange("animalSet", 0, -1);
for (String animal : animals) {
System.out.println(animal);
}
}
3.Redis + Jedis 实现手机验证码功能
需求分析:
1、输入手机号,点击发送后随机生成6位数字码,2分钟有效
2、输入验证码,点击验证,返回成功或失败
3、每个手机号每天只能输入3次
代码实现:
第一步,生成一个6位数字码。
//1.生成一个6位数字码
public static String getCode() {
Random random = new Random();
String code = "";
for (int i = 0; i < 6; i++) {
int rand = random.nextInt(10);
code += rand;
}
return code;
}a
第二步,发送验证码。
//2.每个手机每天只能发送三次,验证码放入redis中,并设置过期时间
public static void sendCode(String phone){
//连接redis
Jedis jedis = new Jedis("hadoop100",6379);
//创建key
//①手机发送次数key
String countKey = "PhoneCode"+phone+":count";
//②验证码key
String codeKey = "PhoneCode"+phone+":code";
//每个手机每天只能发送三次
String count = jedis.get(countKey);
if(count == null){ //没有发送次数,第一次发送
//设置发送次数为1
jedis.set(countKey,"1");
}else if(Integer.parseInt(count) <= 2){
//发送次数+1
jedis.incr(countKey);
}else if(Integer.parseInt(count) > 2){
//发送满3次,不能再发送
System.out.println("今天发送次数已经超过三次,不能再发送");
//关闭redis
jedis.close();
return;
}
//发送验证码并放到redis里
String vcode = getCode();
jedis.setex(codeKey,60*60*24,vcode);
jedis.close();
System.out.println("成功发送");
}
第三步,校验验证码。
//3.验证码校验
public static void verifyCode(String phone,String code){
//从redis获取验证码
Jedis jedis = new Jedis("hadoop100",6379);
//创建手机发送次数key
String codeKey = "PhoneCode"+phone+":code:";
String redisCode = jedis.get(codeKey);
if(redisCode.equals(codeKey)){
System.out.println("验证成功");
}else {
System.out.println("验证失败");
}
}
第四步,模拟发送手机验证码。
public class PhoneCode {
public static void main(String[] args) {
//模拟验证码发送
sendCode("13812345678");
sendCode("13812345678");
sendCode("13812345678");
sendCode("13812345678");
}
}
打印结果如下:
成功发送
成功发送
成功发送
今天发送次数已经超过三次,不能再发送
查看 redis,可以知道验证码为387393。
第五步,模拟校验验证码。
public class PhoneCode {
public static void main(String[] args) {
//模拟校验验证码
verifyCode("13812345678","387393");
verifyCode("13812345678","387396");
}
}
打印结果如下
验证成功
验证失败