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>
第三步,创建测试程序,测试连通性。
@Testpublic 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
@Testpublic void test_String(){Jedis jedis = new Jedis("hadoop100",6379);//获取key对应的值System.out.println(jedis.get("k1"));//获取所有keySet<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
@Testpublic 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
@Testpublic 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
@Testpublic 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
@Testpublic void test_Hash(){Jedis jedis = new Jedis("hadoop100",6379);//给集合中的键赋值jedis.hset("hash1","userName","parker");//从集合取出valueSystem.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形式从集合取出valueList<String> result = jedis.hmget("hash2", "name", "number");for (String element : result) {System.out.println(element);}}
⑥ Zset
@Testpublic 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){//连接redisJedis jedis = new Jedis("hadoop100",6379);//创建key//①手机发送次数keyString countKey = "PhoneCode"+phone+":count";//②验证码keyString codeKey = "PhoneCode"+phone+":code";//每个手机每天只能发送三次String count = jedis.get(countKey);if(count == null){ //没有发送次数,第一次发送//设置发送次数为1jedis.set(countKey,"1");}else if(Integer.parseInt(count) <= 2){//发送次数+1jedis.incr(countKey);}else if(Integer.parseInt(count) > 2){//发送满3次,不能再发送System.out.println("今天发送次数已经超过三次,不能再发送");//关闭redisjedis.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);//创建手机发送次数keyString 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");}
}
打印结果如下
验证成功
验证失败