Jedis操作Redis6

Jedis常用操作

用Java操作redis时,需要导入依赖

		<dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>compile</scope>
        </dependency>

创建好了Jereid对象后,可以进行redis的操作,方法与命令一致。

package com.atguigu.redis;

import org.junit.Test;
import redis.clients.jedis.BinaryClient;
import redis.clients.jedis.Jedis;

import java.util.List;
import java.util.Set;

public class JedisDemo {
    public static void main(String[] args) {
        //创建jedis对象
        /*
         需要在redis配置文件中注释本机访问(bind)
         将保护模式关闭(protected-mode no)
         关闭虚拟机防火墙
         systemctl status firewalld:查看防火墙状态
         systemctl stop firewalld:关闭防火墙
        */
        Jedis jedis = new Jedis("192.168.204.128", 6379);//地址与端口号
        //测试
        String ping = jedis.ping();
        System.out.println(ping);
    }

    static Jedis jedis = null;

    static {
        jedis = new Jedis("192.168.204.128", 6379);//地址与端口号
    }


    /**
     * 操作List集合
     */
    @Test
    public void testList() {
        jedis.lpush("list1", "value1", "value2", "value3");//插入
        jedis.lpush("list2", "value4", "value5", "value6");//插入
        jedis.lpop("list1");//从左边吐出一个值
        jedis.rpoplpush("list1", "list2");//从list1右边吐出一个值,插到list2左边
        jedis.lrange("list1", 0, -1);//从左到右获取元素
        String zero = jedis.lindex("list1", 0);//按照索引下标获得元素
        jedis.linsert("list2", BinaryClient.LIST_POSITION.BEFORE, "value1", "newValue");//在指定值value1前插入newValue
        jedis.lrem("list1", 2, "value2");//从左边开始删除2个value2
        jedis.lset("list2", 1, "oldValue");//将下标为0的值替换为oldValue
        Long len = jedis.llen("list2");//获取列表长度
    }

    //操作Key String
    @Test
    public void testString() {
        Set<String> keys = jedis.keys("*");//获取所有的key
        //添加
        jedis.set("name", "lucy");
        //获取
        String name = jedis.get("name");
        System.out.println(name);

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

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

Jedis实现手机验证码

要求:

1、输入手机号,点击发送后随机生成6位数字码,2分钟有效

2、输入验证码,点击验证,返回成功或失败

3、每个手机号每天只能输入3次

package com.atguigu.redis;

import redis.clients.jedis.Jedis;

import java.util.Random;

public class PhoneCode {
    public static void main(String[] args) {
        verifyCode("10120201212");
//        getRedisCode("10120201212","715856");
    }

    //1、生成一个6位数字的验证码
    public static String getCode() {
        Random random = new Random();
        StringBuilder code = new StringBuilder();
        for (int i = 0; i < 6; i++) {
            code.append(random.nextInt(10));//生成6次10以内的数组,拼接到code中
        }
        return code.toString();
    }

    //2、每个手机每天只能发送三次,验证码放到redis中,设置过期时间
    public static void verifyCode(String phone) {
        //连接redis
        Jedis jedis = new Jedis("192.168.204.128", 6379);
        //手机发送次数key
        String countKey = "VerifyCode" + phone + ":count";
        //验证码的key
        String codeKey = "VerifyCode" + phone + ":code";

        //每个手机每天只能发送三次
        String count = jedis.get(countKey);
        if (count == null) {
            //没有发送次数说明是第一次发送
            //设置发送次数是1,有效时间是24小时
            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("今日验证码发送次数已达上限!");
            jedis.close();
            return;
        }

        //发送的验证码要放到redis里面去
        String vcode = getCode();
        jedis.setex(codeKey,120,vcode);//添加验证码,设置过期时间为两分钟
        jedis.close();
    }

    //3、验证码校验
    public static void getRedisCode(String phone, String code){
        //从redis中获取验证码
        Jedis jedis = new Jedis("192.168.204.128", 6379);
        //验证码的key
        String codeKey = "VerifyCode" + phone + ":code";
        String redisCode = jedis.get(codeKey);
        //判断redis中的验证码是否与输入的验证码一致
        if(redisCode.equals(code)){
            System.out.println("成功");
        }else {
            System.out.println("失败");
        }
        jedis.close();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值