redis学习(三)之Jedis操作CRUD

2022/6/23 2:20:10

本文主要是介绍redis学习(三)之Jedis操作CRUD,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

使用Jedis进行测试

1.创建Maven项目

2.添加pom.xml文件

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.2.0</version>
        </dependency>
    </dependencies>

3.创建一个包com.lianxi.Jedis文件夹和创建一个JedisDemo01的java类

4.测试连接rerdis

  /**
     * 连接Redis
     */
    @Test
    public void initCount() {
        // 创建Jedis对象,连接Redis服务器
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        // 设置认证密码
//        jedis.auth("root");
        // 指定数据库
        jedis.select(0);
        // 使用ping命令,测试是否连接成功
        String result = jedis.ping();
        System.out.println(result);
    }

Jeids API的操作

/**
 * Jeids API的操作
 * @author pan_junbiao
 */
@Test
public void jedisAPITest()
{
    //创建Jedis实例,连接本地Redis服务
    Jedis jedis = new Jedis("127.0.0.1", 6379);
    //设置Redis数据库的密码
    System.out.println(jedis.auth("123456"));
    //获取客户端信息
    System.out.println(jedis.getClient());
    //清空Redis数据库,相当于执行FLUSHALL命令
    System.out.println(jedis.flushAll());
    //查看Redis信息,相当于执行INFO命令
    System.out.println(jedis.info());
    //获取数据库中key的数量,相当于指定DBSIZE命令
    System.out.println(jedis.dbSize());
    //获取数据库名字
    System.out.println(jedis.getDB());
    //返回当前Redis服务器的时间,相当于执行TIME命令
    System.out.println(jedis.time());
}

Jedis-Api: key

jedis.set("k1", "v1");
jedis.set("k2", "v2");
jedis.set("k3", "v3");

Set<String> keys = jedis.keys("*");
System.out.println(keys.size());

for (String key : keys) {
	System.out.println(key);
}

System.out.println(jedis.exists("k1"));
System.out.println(jedis.ttl("k1"));                
System.out.println(jedis.get("k1"));

 Jedis-API:String

jedis.mset("str1","v1","str2","v2","str3","v3");
System.out.println(jedis.mget("str1","str2","str3")); 

Jedis-API:list

List<String> list = jedis.lrange("mylist",0,-1);
for (String element : list) {
	System.out.println(element);
}

Jedis-API:set

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", "order02");

 Jedis-API:hash

jedis.hset("hash1","userName","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);

List<String> result = jedis.hmget("hash2", "telphone","email");

for (String element : result) {
	System.out.println(element);
}

 Jedis-API:zset

jedis.zadd("zset01", 100d, "z3");
jedis.zadd("zset01", 90d, "l4");
jedis.zadd("zset01", 80d, "w5");
jedis.zadd("zset01", 70d, "z6");
 
Set<String> zrange = jedis.zrange("zset01", 0, -1);

for (String e : zrange) {
	System.out.println(e);
}

示例1:

import org.junit.jupiter.api.Test;
import redis.clients.jedis.Jedis;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class JedisDemo01 {
    public static void main(String[] args) {
        //创建Jedis对象
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        //测试
        String ping = jedis.ping();
        System.out.println(ping);
    }

    @Test
    void KeyString(){
        //创建Jedis对象
        Jedis jedis = new Jedis("127.0.0.1", 6379);

        //添加
        jedis.set("name","qianling");
        //获取
        String name = jedis.get("name");
        System.out.println(name);

        //设置多个key-value
        jedis.mset("k1","v1","k2","v2");
        List<String> mget = jedis.mget("k1", "k2");
        System.out.println(mget);

        Set<String> keys = jedis.keys("*");
        for (String key : keys) {
            System.out.println(key);
        }
    }

    //操作list
    @Test
    void List(){
        //创建Jedis对象
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        List<String> list = jedis.lrange("mylist",0,-1);
        for (String element : list) {
            System.out.println(element);
        }
    }

    //操作set
    @Test
    void set(){
        //创建Jedis对象
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        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", "order02");
    }


    //操作hash
    @Test
    void hash(){
        //创建Jedis对象
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        jedis.hset("hash1","userName","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);

        List<String> result = jedis.hmget("hash2", "telphone","email");

        for (String element : result) {
            System.out.println(element);
        }
    }

    //操作zset
    @Test
    void zset(){
        //创建Jedis对象
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        jedis.zadd("zset01", 100d, "z3");
        jedis.zadd("zset01", 90d, "l4");
        jedis.zadd("zset01", 80d, "w5");
        jedis.zadd("zset01", 70d, "z6");

        Set<String> zrange = jedis.zrange("zset01", 0, -1);

        for (String e : zrange) {
            System.out.println(e);
        }
    }
}

示例2:

key+String
/**
 * 获取Reids连接
 * @author pan_junbiao
 */
public Jedis getJedis()
{
    //连接Redis服务器
    Jedis jedis = new Jedis("127.0.0.1", 6379);
    System.out.println("Redis服务器连接成功!");
    return jedis;
}
/**
 * Reids的Key类型
 * @author pan_junbiao
 */
@Test
public void redisKey()
{
    Jedis jedis = getJedis();
    jedis.set("myKey", "pan_junbiao的博客");
    System.out.println("判断键为myKey的值是否存在:" + jedis.exists("myKey"));
    System.out.println("获取键为myKey的值:" + jedis.get("myKey"));
    System.out.println("查看键为myKey的类型:" + jedis.type("myKey"));
    System.out.println("随机获取一个Key:" + jedis.randomKey());
    System.out.println("将键myKey重命名为myKey1:" + jedis.rename("myKey", "myKey1"));
    System.out.println("删除键为myKey1:" + jedis.del("myKey1"));
}
/**
 * Reids的String类型
 * @author pan_junbiao
 */
@Test
public void redisString()
{
    Jedis jedis = getJedis();
    System.out.println("设置userName:" + jedis.set("userName", "pan_junbiao的博客"));
    System.out.println("设置blogUrl:" + jedis.set("blogUrl", "https://blog.csdn.net/pan_junbiao"));
    System.out.println("设置blogRemark:" + jedis.set("blogRemark", "您好,欢迎访问 pan_junbiao的博客"));
    System.out.println("用户名称:" + jedis.get("userName"));
    System.out.println("博客地址:" + jedis.get("blogUrl"));
    System.out.println("博客信息:" + jedis.get("blogRemark"));
    System.out.println("设置userName,如果存在返回0:" + jedis.setnx("userName", "pan_junbiao的博客"));
    System.out.println("设置userName2:" + jedis.set("userName2", "pan_junbiao"));
    System.out.println("获取key为userName和userName2的值:"+jedis.mget("userName","userName2"));
    System.out.println("自增1:" + jedis.incr("index"));
    System.out.println("自增1:" + jedis.incr("index"));
    System.out.println("自增2:" + jedis.incrBy("count",2));
    System.out.println("自增2:" + jedis.incrBy("count",2));
    System.out.println("递减1:" + jedis.decr("count"));
    System.out.println("递减2:" + jedis.decrBy("count",2));
    System.out.println("在userName2后面添加String:" + jedis.append("userName2","的博客"));
    System.out.println("获取key为userName2的值:" + jedis.get("userName2"));
}
list
/**
 * Reids的List类型
 * @author pan_junbiao
 */
@Test
public void redisList()
{
    Jedis jedis = getJedis();
    //在列表的尾部添加数据
    jedis.rpush("userList", "pan_junbiao的博客", "https://blog.csdn.net/pan_junbiao", "pan_junbiao的博客", "深圳市");
    //返回列表长度
    System.out.println("列表长度:" + jedis.llen("userList"));
    //移除一个元素
    System.out.println("移除一个元素:" + jedis.lrem("userList", 1, "深圳市"));
    //修改值
    System.out.println("修改元素值:" + jedis.lset("userList", 2, "您好,欢迎访问 pan_junbiao的博客"));
    //取值
    List<String> list = jedis.lrange("userList", 0, -1);
    for (String str : list)
    {
        System.out.println(str);
    }
    //删除列表
    System.out.println("删除列表:" + jedis.del("userList"));
}
set
/**
 * Reids的Set类型
 * @author pan_junbiao
 */
@Test
public void redisSet()
{
    Jedis jedis = getJedis();
    jedis.sadd("city", "北京", "上海", "广州", "深圳", "昆明", "武汉", "大理");
    System.out.println("移除并返回集合中的一个随机元素:" + jedis.spop("city"));
    System.out.println("随机取出一个值:" + jedis.srandmember("city"));
    //移除集合中的一个或多个成员元素
    System.out.println("移除集合元素:" + jedis.srem("city", "北京"));
    //返回集合中所有元素
    System.out.println(jedis.smembers("city"));
    //判断元素是否存在
    System.out.println("判断深圳是否存在集合中:" + jedis.sismember("city","深圳"));
    //返回集合中元素的数量
    System.out.println("集合中元素的数量:" + jedis.scard("city"));
    jedis.sadd("city2","昆明","香港","澳门","台湾","上海","北京","成都");
    System.out.println("交集:" + jedis.sinter("city","city2"));
    System.out.println("并集:" + jedis.sunion("city","city2"));
    System.out.println("差集:" + jedis.sdiff("city","city2"));
}
zset
/**
 * Reids的有序集合(Sorted Set)类型
 * @author pan_junbiao
 */
@Test
public void redisSortedSet()
{
    Jedis jedis = getJedis();
    jedis.zadd("math-score", 100, "pan_junbiao的博客_01");
    jedis.zadd("math-score", 82, "pan_junbiao的博客_02");
    jedis.zadd("math-score", 80, "pan_junbiao的博客_03");
    jedis.zadd("math-score", 55, "pan_junbiao的博客_04");
    //为分数值加上增量
    System.out.println(jedis.zincrby("math-score", 15, "pan_junbiao的博客_03"));
    System.out.println(jedis.zincrby("math-score", -5, "pan_junbiao的博客_04"));
    //返回有序集合中指定区间分数的成员数
    System.out.println("分数在90至100的人数:" + jedis.zcount("math-score", 90, 100));
    //获取在指定区间内的元素(升序)
    Set<String> ascSet = jedis.zrange("math-score",0,-1);
    System.out.println("分数排名(从低到高):");
    for(String str : ascSet)
    {
        System.out.println("用户名称:" + str + " 分数:" + jedis.zscore("math-score",str));
    }
    //获取在指定区间内的元素(降序)
    Set<String> descSet = jedis.zrevrange("math-score",0,-1);
    System.out.println("分数排名(从高到低):");
    for(String str : descSet)
    {
        System.out.println("用户名称:" + str + " 分数:" + jedis.zscore("math-score",str));
    }
}
hash 
/**
 * Reids的哈希(Hash)类型
 * @author pan_junbiao
 */
@Test
public void redisMap()
{
    Jedis jedis = getJedis();
    Map<String,String> map = new HashMap<String,String>();
    map.put("userName","pan_junbiao的博客");
    map.put("blogUrl","https://blog.csdn.net/pan_junbiao");
    map.put("blogRemark","您好,欢迎访问 pan_junbiao的博客");
    map.put("city","深圳");
    jedis.hmset("userInfo",map);
    //删除map中的某个键值
    System.out.println("删除map中的某个键值:" + jedis.hdel("userInfo","city"));
    //判断指定键值是否存在
    System.out.println("判断指定键是否存在:" + jedis.exists("userInfo"));
    //返回map对象中的所有key
    System.out.println("返回map对象中的所有key:" + jedis.hkeys("userInfo"));
    //返回map对象中的所有value
    List<String> list = jedis.hvals("userInfo");
    for (String str : list)
    {
        System.out.println(str);
    }
}

示例3:

String+key
/**
     * 使用jedis的基本操作
     */
    private static void opsBase(Jedis jedis) {
        System.out.println("向redis中设置一个key " + jedis.set("key1", "value1"));
        System.out.println("向redis中设置一个key " + jedis.set("key2", "value2"));

        System.out.println("选择redis的一个数据库 " + jedis.select(0));
        System.out.println("查看当前数据库的大小 " + jedis.dbSize());
        System.out.println("查看redis中所有的key " + jedis.keys("*"));
        System.out.println("查看某个键对应值的数据类型 " + jedis.type("key1"));
        System.out.println("判断redis中是否存在一个key " + jedis.exists("key1"));
        System.out.println("设置redis中的一个key的过期时间 " + jedis.expire("key1", 10));
        System.out.println("查看redis中的这个key还有多长时间过期 " + jedis.ttl("key1"));
        System.out.println("删除redis中的一个键值对 " + jedis.del("key1"));
        System.out.println("清空当前的数据库 " + jedis.flushDB());
        System.out.println("清空所有的数据库 " + jedis.flushAll());
        System.out.println("将当前的数据库的一个键值对移动到另外一个数据库 " + jedis.move("key2", 1));
    }

    /**
     * 使用jedis操作string类型的数据
     */
    private static void opsString(Jedis jedis) {
        System.out.println("向redis中设置一个key " + jedis.set("key1", "value1"));
        System.out.println("只有当key不存在的时候再向redis中设置 " + jedis.setnx("key1", "value2"));
        System.out.println("向redis中设置一个key并设置过期时间 " + jedis.setex("key2", 10, "value2"));
        System.out.println("向redis中的某个key的值追加字符串 " + jedis.append("key1", "2"));
        System.out.println("获取redis中某个key对应的值 " + jedis.get("key1"));
        System.out.println("返回redis中某个key对应的值的长度大小 " + jedis.strlen("key1"));
        System.out.println("使用某个字符串从指定开始位置覆盖key对应的值到相同长度 " + jedis.setrange("key1", 0, "yh"));
        System.out.println("获取指定索引区间的字符串 " + jedis.getrange("key1", 0, 1));
        System.out.println("批量设置key和value " + jedis.mset("key3", "value3", "key4", "value4", "key5", "1"));
        System.out.println("批量获取redis中的值 " + jedis.mget("key3", "key4", "key5"));
        System.out.println("将redis中key对应的值加一 " + jedis.incr("key5"));
        System.out.println("将redis中key对应的值加指定的步长 " + jedis.incrBy("key5", 2));
        System.out.println("将redis中key对应的值减一 " + jedis.decr("key5"));
        System.out.println("将redis中key对应的值减指定的步长  " + jedis.decrBy("key5", 2));
    }
list
/**
     * 使用jedis操作list类型的数据
     */
    private static void opsList(Jedis jedis) {
        System.out.println("从左边向集合中添加元素 " + jedis.lpush("list1", "value1"));
        System.out.println("从右边向集合中添加元素 " + jedis.rpush("list1", "value2"));
        System.out.println("从集合的左边弹出一个元素 " + jedis.lpop("list1"));
        System.out.println("从集合的右边弹出一个元素 " + jedis.rpop("list1"));
        System.out.println("从左边向集合中添加元素 " + jedis.lpush("list1", "value1"));
        System.out.println("从右边向集合中添加元素 " + jedis.rpush("list1", "value2"));
        System.out.println("查看集合中元素的数量 " + jedis.llen("list1"));
        System.out.println("覆盖集合中指定位置的key的值 " + jedis.lset("list1", 0, "value"));
        System.out.println("从后往前删除两个集合中指定值的元素 " + jedis.lrem("list1", -2, "value2"));
        System.out.println("获取集合中指定下标的元素 " + jedis.lindex("list1", 0));
        System.out.println("在制定元素之前或者之后插入一个元素" + jedis.linsert("list1", BinaryClient.LIST_POSITION.BEFORE, "value", "before"));
        System.out.println("列举集合中的所有元素 " + jedis.lrange("list1", 0, -1));
    }
hash
/**
     * 使用jedis操作hash类型的数据
     */
    private static void opsHash(Jedis jedis) {
        System.out.println("向redis中的key对应的map中put一个值 " + jedis.hset("map1", "key1", "value1"));
        System.out.println("向redis中的key对应的map中put多个值 " + jedis.hmset("map1", new HashMap<String,String>(8) {
            {
                this.put("key2", "value2");
                this.put("key3", "value3");
                this.put("key4", "1");
            }
        }));
        System.out.println("获取redis中key对应map的某个值 " + jedis.hget("map1", "key1"));
        System.out.println("获取redis中key对应map的多个值 " + jedis.hmget("map1", "key1", "key2"));
        System.out.println("获取redis中key对应map的键值对数量 " + jedis.hlen("map1"));
        System.out.println("获取redis中key对应map的所有的key的value的值 " + jedis.hgetAll("map1"));
        System.out.println("获取redis中key对应map的所有的键 " + jedis.hkeys("map1"));
        System.out.println("获取redis中key对应map的所有的值 " + jedis.hvals("map1"));
        System.out.println("如果map对应的key不存在才设置 " + jedis.hsetnx("map1","key4", "2"));
        System.out.println("给map中的某个key对应的值增长对应的值 " + jedis.hincrBy("map1", "key4", 2));
    }
set和zset
/**
     * 使用jedis操作set类型的数据
     */
    private static void opsSet(Jedis jedis) {
        System.out.println("向set中添加一个或多个元素 " + jedis.sadd("set1", "value1", "value2", "value3", "value4", "value5", "value6"));
        System.out.println("获得set中的元素个数 " + jedis.scard("set1"));
        System.out.println("判断set中是否存在某个元素 " + jedis.sismember("set1", "value1"));
        System.out.println("获得set中的所有元素 " + jedis.smembers("set1"));
        System.out.println("删除set中的一个或者多个元素 " + jedis.srem("set1", "value5", "value6"));
        System.out.println("随机弹出set中的某个元素 " + jedis.spop("set1"));

        System.out.println("向set中添加一个或多个元素 " + jedis.sadd("set2", "value1", "value2"));

        System.out.println("获得两个set的差集 " + jedis.sdiff("set1", "set2"));
        System.out.println("获得两个set的差集并转储到另外一个set中 " + jedis.sdiffstore("set3", "set1", "set2"));
        System.out.println("获得两个set的交集 " + jedis.sinter("set1", "set2"));
        System.out.println("获得两个set的交集并转储到另外一个set中 " + jedis.sinterstore("set3", "set1", "set2"));
        System.out.println("获得两个set的并集 " + jedis.sunion("set1", "set2"));
        System.out.println("获得两个set的并集并转储到另外一个set中 " + jedis.sunionstore("set3", "set1", "set2"));
        System.out.println("获得set中的所有元素 " + jedis.smembers("set3"));
    }

    /**
     * 使用jedis操作zset类型的数据
     * 带分数输出值的时候返回的是字节数组
     */
    private static void opsSortedSet(Jedis jedis) {
        System.out.println("向zset中添加一个元素 " + jedis.zadd("sortedSet1",10,"value"));
        System.out.println("向zset中添加多个元素 " + jedis.zadd("sortedSet1", new HashMap<String, Double>(8) {
            {
                this.put("value1", 20D);
                this.put("value2", 30D);
                this.put("value3", 40D);
                this.put("value4", 50D);
            }
        }));
        System.out.println("统计zset中的元素个数 " + jedis.zcard("sortedSet1"));
        System.out.println("修改zset中某个元素的分数 " + jedis.zincrby("sortedSet1",-10D,"value"));
        System.out.println("删除zset中的一个或多个元素 " + jedis.zrem("sortedSet1", "value3", "value4"));
        System.out.println("正序获取zset中指定索引范围内的元素 " + jedis.zrange("sortedSet1", 0, -1));
        System.out.println("正序获取zset中指定索引范围内的元素及元素的分数" + jedis.zrangeWithScores("sortedSet1", 0, -1));
        System.out.println("正序获取zset中指定分数范围内的元素 " + jedis.zrangeByScore("sortedSet1", 0, 40));
        System.out.println("正序获取zset中指定分数范围内的元素及元素的分数" + jedis.zrangeWithScores("sortedSet1", 0, 40));
        System.out.println("逆序获取zset中指定索引范围内的元素 " + jedis.zrevrange("sortedSet1", 0, -1));
        System.out.println("逆序获取zset中指定索引范围内的元素及元素的分数" + jedis.zrevrangeWithScores("sortedSet1", 0, -1));
        System.out.println("逆序获取zset中指定分数范围内的元素 " + jedis.zrevrangeByScore("sortedSet1", 40, 0));
        System.out.println("逆序获取zset中指定分数范围内的元素及元素的分数" + jedis.zrevrangeByScoreWithScores("sortedSet1", 40, 0));
    }
Redis6新增3个数据类型
 /**
     * 使用jedis测试基数数据类型
     */
    private static void opsHyperLogLog(Jedis jedis) {
        System.out.println("向一个数据组中添加数据 " + jedis.pfadd("hyperLogLog", "a", "b", "c", "d", "e", "f", "a", "a", "b"));
        System.out.println("向一个数据组中添加数据 " + jedis.pfadd("hyperLogLog1", "a", "b", "c", "d"));
        jedis.pfmerge("hyperLogLog0","hyperLogLog", "hyperLogLog1");
        System.out.println("输出指定key的基数是多少 " + jedis.pfcount("hyperLogLog0"));
    }

    /**
     * 使用jedis操作geospatial类型的数据
     */
    private static void opsGeo(Jedis jedis) {
        System.out.println("向geo中添加地图位置信息 " + jedis.geoadd("geo1", 116.404269d, 39.91582d, "beijing"));
        System.out.println("向geo中添加地图位置信息 " + jedis.geoadd("geo1", 121.478799d, 31.235456d, "shanghai"));

        System.out.println("返回某几个地点的地理位置信息 " + jedis.geopos("geo1","beijing", "shanghai"));
        System.out.println("返回两个地点之间的直线距离 " + jedis.geodist("geo1", "beijing", "shanghai"));
        System.out.println("返回指定经纬度多少距离以内的元素 " + jedis.georadius("geo1", 116.404269d, 39.91582d,1500, GeoUnit.KM));
        System.out.println("返回指定元素多少距离以内的元素 " + jedis.georadiusByMember("geo1", "beijing",1500, GeoUnit.KM));
    }

    /**
     * 使用jedis操作bitmaps类型的数据
     */
    private static void opsBitMaps(Jedis jedis) {
        System.out.println("向bit中设置数据" + jedis.setbit("bit1",0,true));
        System.out.println("向bit中设置数据" + jedis.setbit("bit1",5,false));
        System.out.println("向bit中设置数据" + jedis.setbit("bit1",10,false));

        System.out.println("获取指定索引上的数字 " + jedis.getbit("bit1",4));
        System.out.println("返回bitmaps上共有多少true " + jedis.bitcount("bit1"));
    }
}

Jedis实例:手机验证码功能

要求:
1、输入手机号,点击发送后随机生成6位数字码,2分钟有效
2、输入验证码,点击验证,返回成功或失败
3、每个手机号每天只能输入3次

代码展示:

import redis.clients.jedis.Jedis;

import java.util.Random;

public class PhoneCode {
    public static void main(String[] args) {
        //测试
//        String code = getCode();
//        System.out.println(code);


        //模拟验证码发送
        //verifyCode("137000000");
        
        //校验发送的验证码
        //getRedisCode("137000000","验证码");
    }

    //1.随即生成一个六位数的验证码
    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;
    }

    //2.每个手机每天只能发送三次,验证码放到redis中,设置过期时间120
    public static void verifyCode(String phone){
        //连接redis
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        //输入redis连接密码
        //jedis.auth("root");

        //拼接key
        //手机发送次数key
        String countKey = "VerifyCode" + phone + ":count";
        //验证码key
        String codeKey = "VerifyCode" + phone + ":code";

        //每个手机每天只能发送3次
        String count = jedis.get(countKey);
        if (count == null){
            //没有发送次数,第一次发送
            //设置发送次数是1
            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("今天的发送次数已经超过3次了");
            //关闭连接
            jedis.close();
        }

        //发送的验证码要放到redis中,设置过期时间为120s
        String vcode = getCode();
        jedis.setex(codeKey,120,vcode);
        jedis.close();
    }

    //3.验证码校验
    public static void getRedisCode(String phone,String code){
        //从redis中获取验证码
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        //jedis.auth("root");

        //验证码key
        String codeKey = "VerifyCode" + phone + ":code";
        String redisCode = jedis.get(codeKey);

        //判断
        if (redisCode.equals(code)){
            System.out.println("成功");
        }else {
            System.out.println("失败");
        }
        jedis.close();
    }
}

 



这篇关于redis学习(三)之Jedis操作CRUD的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程