JDBC是通过Java操作数据库。Jedis是通过Java操作Redis。
要先将Redis配置文件中限制本机访问的两个位置配置一下。
把 bind 127.0.0.1 -::1
注释掉,再把 保护模式
设置为no,即可远程访问Redis。 还需要重启Redis。
创建一个Maven工程,引入Jedis的相关依赖。
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.2.0</version> </dependency>
写一个测试类,测试是否能够Ping得通虚拟机上的Redis。
package com.example.jedis; import redis.clients.jedis.Jedis; /** * 注意:要将Redis配置文件中限制本机访问的两个位置配置一下。 */ public class jedisDemo01 { public static void main(String[] args) { //创建Jedis对象 Jedis jedis = new Jedis("192.168.121.138",6379); String ping = jedis.ping(); System.out.println(ping); } }
启动测试类,测试是否ping得通。
已经配置好了,却还是失败了。是因为虚拟机有防火墙,需要将虚拟机的对应端口开放才行。
这里只是用虚拟机测试,没有安全问题,也仅仅是为了测试,所以直接暂时关闭防火墙。
再次测试
key *
:查看当前库的所有key
//查看当前库的所有key。默认启用0号库。 Set<String> keys = jedis.keys("*"); for (String key : keys) { System.out.println(key); }
exists key
:判断某个key是否存在
//返回true或false System.out.println(jedis.exists("name"));
expire key 10
:为给定的key设置过期时间,10秒种
jedis.expire("name", 10);
ttl key
:查看还有多少秒过期,-1表示永不过期,-2表示已过期
//查看还有多久过期 System.out.println(jedis.ttl("name"));
dbsize
:查看当前数据库的key的数量
System.out.println(jedis.dbSize());
flushdb
:清空当前库
jedis.flushDB();
flushall
:通杀全部库
jedis.flushAll();
set <key> <value>
:添加键值对
//添加 jedis.set("name", "弹头");
get <key>
:查询对应键值
//获取值 String name = jedis.get("name"); System.out.println(name);
mset <key1> <value1> <key2> <value2> ...
:同时设置一个或多个键值对
//设置多个key-value jedis.mset("k1", "v1", "k2", "v2");
mget <key1> <key2> ...
:同时获取一个或多个value
List<String> mget = jedis.mget("k1", "k2");
lpush / rpush <key1> <value1> <key2> <value2> ...
:从左边/右边插入一个或多个值
jedis.lpush("key1", "lucy", "maria", "jack");
lrange <key> <start> <stop>
:按照索引下标获得元素(从左到右)
List<String> values = jedis.lrange("key1", 0, -1);
sadd <key> <value1> <value2> ...
:将一个或多个member元素加入到集合key中,已经存在的元素会被忽略。
jedis.sadd("name", "弹头", "玛卡巴卡");
smembers <key>
:取出该集合的所有值
Set<String> stringSet = jedis.smembers("name");
hset <key> <field> <value>
:给<key>集合中的<field>键赋值<value>
jedis.hset("users", "age", "20");
hget <key> <field>
:从<key>集合中<field>域中取出value
System.out.println(jedis.hget("users", "age"));
zadd <key> <score1> <value1> <score2> <value2> ...
:将一个或多个member元素及其score值加入到有序集key当中。
jedis.zadd("china", 100, "shanghai"); jedis.zadd("china", 200, "beijing"); jedis.zadd("china", 300, "tianjin");
zrange <key> <start> <stop> [WITHSCORES]
:返回有序集key中,下标在<start><stop>之间的元素。
Set<String> stringSet = jedis.zrange("china", 0, -1); System.out.println(stringSet);
完成一个手机验证码功能
package com.example.jedis; import redis.clients.jedis.Jedis; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Random; public class PhoneCode { public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String phone = reader.readLine(); //若超过3次,会返回一个false,此时要让整个程序直接结束。 boolean verifyCode = verifyCode(phone); if (verifyCode){ String code = reader.readLine(); check(phone, code); } } //1.随机生成6位数字码:Random(必须不同,判断一下redis中是否存在) public static StringBuilder getCode() { Random random = new Random(); StringBuilder code = new StringBuilder(); for (int i = 0; i < 6; i++) { code.append(random.nextInt(10)); } return code; } //2、4.验证码在2分钟内有效;每个手机号每天只能输入3次 public static boolean verifyCode(String phone) { Jedis jedis = new Jedis("192.168.121.138", 6379); //拼接key String countKey = "VerifyCode" + phone + ":count"; String codeKey = "VerifyCode" + phone + ":code"; //每个手机每天只能发送三次 String count = jedis.get(countKey); //没有发送次数,则为第一次 if (count == null) { jedis.setex(countKey, 24 * 3600, "1"); } else if (Integer.parseInt(count) <= 2) { jedis.incr(countKey); } else if (Integer.parseInt(count) > 2) { System.out.println("今天发送次数已经超过3次"); jedis.close(); return false; } //发送验证码到redis里 String code = getCode().toString(); System.out.println(code); jedis.setex(codeKey, 120, code); jedis.close(); return true; } //3.判断验证码是否一致 public static void check(String phone, String code) { Jedis jedis = new Jedis("192.168.121.138", 6379); String codeKey = "VerifyCode" + phone + ":code"; try { String redisCode = jedis.get(codeKey); if (redisCode.equals(code)) { System.out.println("验证码相同,成功"); } else { System.out.println("验证码不同,失败"); } } catch (Exception e) { System.out.println("过期了"); } } }
参考资源: