Redis-Jedis
Redis-Jedis
1.Jedis所需要的jar包
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>4.2.0</version>
</dependency>
禁用Linux的防火墙:Linux(CentOS7)里执行命令
systemctl stop/disable firewalld.service
redis.conf中注释掉bind 127.0.0.1 ,然后 protected-mode no
2.Jedis常用操作
1.创建maven工程
3.Jedis相关API
1.建立连接
public class CreatConnection {
public static void main(String[] args) {
//连接连接
Jedis jedis = new Jedis("192.168.79.201",6379);
//检测连接
String pong = jedis.ping();
System.out.println("连接成功:"+pong);
//关闭连接
jedis.close();
}
}
2.Jedis-API: Key
public class JedisKey {
public static void main(String[] args) {
Jedis jedis = new Jedis("192.168.79.201",6379);
jedis.set("k1", "v1");
jedis.set("k2", "v2");
jedis.set("k3", "v3");
//获取所有的key
Set<String> keys = jedis.keys("*");
System.out.println(keys.size());
System.out.println(keys);
//key是否存在 true
System.out.println(jedis.exists("k1"));
//-1表示永不过期,-2表示已过期 具体的秒数表示剩余过期时间
System.out.println(jedis.ttl("k1"));
System.out.println(jedis.get("k1"));
jedis.close();
}
}
3.Jedis-API: String
public class JedisString {
public static void main(String[] args) {
Jedis jedis = new Jedis("192.168.79.201",6379);
jedis.mset("str1","v1","str2","v2","str3","v3");
System.out.println(jedis.mget("str1","str2","str3"));
jedis.close();
}
}
4.Jedis-API: List
public class JedisList {
public static void main(String[] args) {
Jedis jedis = new Jedis("192.168.79.201",6379);
jedis.lpush("mylist","张三","王五","李白");
//按照索引下标获得元素(从左到右)
//lrange <key><start><stop>
//0左边第一个,-1右边第一个,(0到-1表示获取所有)
//lrange mylist 0 -1
//李白, 王五, 张三
List<String> list = jedis.lrange("mylist",0,-1);
System.out.println(list);
for (String element : list) {
System.out.println(element);
}
jedis.close();
}
}
5.Jedis-API: set
public class JedisSet {
public static void main(String[] args) {
Jedis jedis = new Jedis("192.168.79.201",6379);
//将一个或多个 member 元素加入到集合 key 中,已经存在的 member 元素将被忽略
jedis.sadd("orders", "order01");
jedis.sadd("orders", "order02");
jedis.sadd("orders", "order03");
jedis.sadd("orders", "order04");
jedis.sadd("orders", "order01");
Set<String> smembers = jedis.smembers("orders");
//[order02, order03, order04, order01]
System.out.println(smembers);
jedis.srem("orders", "order02");
//[order03, order04, order01]
System.out.println(jedis.smembers("orders"));
jedis.close();
}
}
6.Jedis-API: hash
public class JedisHash {
public static void main(String[] args) {
Jedis jedis = new Jedis("192.168.79.201",6379);
//给<key>集合中的 <field>键赋值<value>
jedis.hset("hash1","userName","lisi");
//lisi
System.out.println(jedis.hget("hash1","userName"));
Map<String,String> map = new HashMap<String,String>();
map.put("telphone","13810169999");
map.put("address","atguigu");
map.put("email","abc@163.com");
jedis.hmset("hash2",map);
//[13810169999, abc@163.com]
List<String> result = jedis.hmget("hash2", "telphone","email");
System.out.println(result);
}
}
7.Jedis-API: zset
/**
* Redis有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。
*
* 不同之处是有序集合的每个成员都关联了一个评分(score),这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了 。
*
* 因为元素是有序的, 所以你也可以很快的根据评分(score)或者次序(position)来获取一个范围的元素。
*
* 访问有序集合的中间元素也是非常快的,因此你能够使用有序集合作为一个没有重复成员的智能列表。
*/
public class JedisZset {
public static void main(String[] args) {
Jedis jedis = new Jedis("192.168.79.201",6379);
//将一个或多个 member 元素及其 score 值加入到有序集 key 当中。
jedis.zadd("zset01", 100d, "z3");
jedis.zadd("zset01", 90d, "l4");
jedis.zadd("zset01", 80d, "w5");
jedis.zadd("zset01", 700d, "z6");
//[w5, l4, z3, z6]
List<String> zrange = jedis.zrange("zset01", 0, -1);
System.out.println(zrange);
jedis.close();
}
}
4.手机验证码案例
需求:
1、输入手机号,点击发送后随机生成6位数字码,2分钟有效
2、输入验证码,点击验证,返回成功或失败
3、每个手机号每天只能输入3次
/**
* 1、输入手机号,点击发送后随机生成6位数字码,2分钟有效
* 2、输入验证码,点击验证,返回成功或失败
* 3、每个手机号每天只能输入3次
*/
public class JedisVerificationCodeDemo {
public static void main(String[] args) {
//模拟验证码发送
verifyCode("13678765435");
//模拟验证码校验
getRedisCode("13678765435","4444");
}
/**
* 生成验证码
* @param phone
*/
private static void verifyCode(String phone) {
Jedis jedis = new Jedis("192.168.79.201", 6379);
String countKey = "verifyCode" + phone + ":count";
String count = jedis.get(countKey);
if (count == null || "".equals(count)) {
jedis.setex(countKey,24*60*60,"1");
}else if(Integer.parseInt(count)<=2){
//+1
jedis.incr(countKey);
}else if(Integer.parseInt(count)>2) {
jedis.close();
throw new RuntimeException("今天的发送次数已经超过三次");
}
//生成6位的验证码
String code = RandomUtils.getSixBitRandom();
System.out.println("生成验证码:"+code);
String codeKey = "verifyCode" + phone + ":code";
//设置验证码两分钟有效
jedis.setex(codeKey,120,code);
jedis.close();
}
/**
* 校验验证码
* @param phone
* @param code
*/
private static void getRedisCode(String phone,String code) {
//从redis获取验证码
Jedis jedis = new Jedis("192.168.79.201",6379);
//验证码key
String codeKey = "verifyCode"+phone+":code";
String redisCode = jedis.get(codeKey);
//判断
if(redisCode.equals(code)) {
System.out.println("成功");
}else {
System.out.println("失败");
}
jedis.close();
}
}
生成验证码工具类
/**
* 生成四位和六位的随机数字
*/
public class RandomUtils {
private static final Random random = new Random();
private static final DecimalFormat fourdf = new DecimalFormat("0000");
private static final DecimalFormat sixdf = new DecimalFormat("000000");
public static String getFourBitRandom() {
return fourdf.format(random.nextInt(10000));
}
public static String getSixBitRandom() {
return sixdf.format(random.nextInt(1000000));
}
}