“Jedis与Redis整合指南:实现高效的Java应用与Redis交互“

目录

#. 概念

1. 导入jedis依赖

2. 写一个类(ping通redis)

3. String字符串使用

3.1 set,get方法使用(设值,取值)

3.2 mset,mget方法使用(设置多个值,取多个值)

4. list列表使用

5. Set集合使用

6. hash哈希

7. Zset有序集合

8. Jedis案例(模拟验证码发送)

8.1 代码

8.2 第一次发送验证码

8.3 超三次发送验证码


#. 概念

  • Jedis就是集成了redis的一些命令操作,封装了redis的Java客户端。提供了连接池管理。一般不直接使用Jedis,而是在其上在封装一层,作为业务的使用,如果用spring的话,可以看看spring封装的redis Spring Data Redis
  • 通过Java可以对Redis6进行操作;

1. 导入jedis依赖

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

2. 写一个类(ping通redis)

    public static void main(String[] args) {

        // 创建Jedis对象  本机地址或(远程redis的地址,端口号)
        Jedis jedis = new Jedis("127.0.0.1",6379);

        // 测试
        String value = jedis.ping();
        System.out.println(value);
    }

前提:要确保redis客户端要正常运行;

3. String字符串使用

3.1 set,get方法使用(设值,取值)
    @Test
    public void demo() {
        Jedis jedis = new Jedis("xxx.x.x.xx", 6379);
        jedis.set("user1","zhangsan");
        jedis.set("user2","yiyi");
        String user1 = jedis.get("user1");
        System.out.println(user1);
        Set<String> keys = jedis.keys("*");
        for (String key : keys) {
            System.out.println(key);
        }
    }

3.2 mset,mget方法使用(设置多个值,取多个值)
jedis.mset("k1", "v1", "k2", "v2");
List<String> mget = jedis.mget("k1", "k2");
System.out.println(mget);

// 输出[v1, v2]

4. list列表使用

key1是key,其它的是它的值;

    public static void main(String[] args) {

        // 创建Jedis对象  本机地址或(远程redis的地址,端口号)
        Jedis jedis = new Jedis("127.0.0.1", 6379);

        jedis.lpush("key1", "lucy", "mary", "jack");
        List<String> key1 = jedis.lrange("key1", 0, -1);
        System.out.println(key1);

    }

5. Set集合使用

    public static void main(String[] args) {

        // 创建Jedis对象  本机地址或(远程redis的地址,端口号)
        Jedis jedis = new Jedis("127.0.0.1", 6379);

        jedis.sadd("names", "lucy");
        jedis.sadd("names", "mary");

        Set<String> names = jedis.smembers("names");
        System.out.println(names);

    }

6. hash哈希

    public static void main(String[] args) {

        // 创建Jedis对象  本机地址或(远程redis的地址,端口号)
        Jedis jedis = new Jedis("127.0.0.1", 6379);

        jedis.hset("users", "age", "20");
        String users = jedis.hget("users", "age");
        System.out.println(users);

    }

7. Zset有序集合

    public static void main(String[] args) {

        // 创建Jedis对象  本机地址或(远程redis的地址,端口号)
        Jedis jedis = new Jedis("127.0.0.1", 6379);

        jedis.zadd("china", 100d, "hangzhou");
        Set<String> china = jedis.zrange("china", 0, -1);
        System.out.println(china);

    }

8. Jedis案例(模拟验证码发送)

  • 需求:
    1. 输入手机号,点击发送后随机生成6位数字码,5分钟有效;
    2. 输入验证码,点击验证,返回成功或失败;
    3. 每个手机号每天只能输入3次;
8.1 代码
    /**
     * 1.生成6位数验证码
     *
     * @return code:6位数
     */
    public static String getCode() {
        Random random = new Random();
        String code = "";
        for (int i = 0; i < 6; i++) {
            int nextInt = random.nextInt(10);
            code += nextInt;
        }
        return code;
    }


    /**
     * 2.每个手机每天只能发送三次,验证码发送到redis中,设置过期时间5分钟
     *
     * @param phone 电话
     */
    public static String verifyCode(String phone) {
        Jedis jedis = new Jedis("127.0.0.1", 6379);

        // 一天内发送的次数:countKey
        // 发送的验证码:codeKey
        String countKey = "VerifyCode" + phone + ":count";
        String codeKey = "VerifyCode" + phone + ":code";

        String count = jedis.get(countKey);

        if (null == count) {  // 1.没有发送次数,第一个发送,发送次数是1,
            jedis.setex(countKey, 24 * 60 * 60, "1");
        } else if (Integer.parseInt(count) > 2) {  // 2.发送第三次,不可再次发送
            System.out.println("今天已发送3次,即将超数,请停止");
            jedis.close();
            return " ";
        } else if (Integer.parseInt(count) < 3) {  // 3.发送次数加1
            jedis.incr(countKey);
        }
        // 发送验证码到redis里面,五分钟超时
        String code = getCode();
        jedis.setex(codeKey, 300, code);
        jedis.close();
        return "第" + jedis.get(countKey) + "次发送的验证码是:" + code;
    }

    /**
     * 3.验证码校验
     *
     * @param phone 电话
     * @param code  验证码
     */
    public static void getRedisCode(String phone, String code) {
        Jedis jedis = new Jedis("127.0.0.1", 6379);

        // 从redis获取验证码
        String codeKey = "VerifyCode" + phone + ":code";
        String redisCode = jedis.get(codeKey);
        System.out.println(redisCode);
        if (redisCode.equals(code)) {
            System.out.println("验证成功");
        } else {
            System.out.println("验证失败");
        }
        jedis.close();
    }


    // 4.模拟验证码发送
    public static void main(String[] args) {

        // 1.发送验证码
        String vcode = verifyCode("18300000014");
        System.out.println(vcode);
        // 2.通过验证校验
        // getRedisCode("18300000000", "182327");
    }
8.2 第一次发送验证码

1. 执行过程

2. redis缓存

count是发送次数;

code是发送验证发;

3. 验证码校验

8.3 超三次发送验证码

解释:超出三次验证码发送,即停止验证码推送;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/735299.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

没有主题只是一些想法

自己随感&#xff0c;杂乱无章。 AI: 生命减熵过程中的关键进化策略及其对企业和个人的启示 生命的减熵过程&#xff0c;即生命体对抗自然熵增趋势&#xff0c;维持自身有序性和复杂性的过程&#xff0c;体现了生命体在演化中的高度适应性和创新性。从学术化的角度来看&…

基于nsight_compute进行kernel性能分析

当利用nsight进行性能分析时&#xff0c;当涉及到内核级别的性能分析时&#xff0c;nvidia提供了系统级别(nsight system)&#xff0c;和内核级别的性能分析工具&#xff08;nsight compute&#xff09;。 其中&#xff0c;内核级别的性能分析&#xff0c;可以检查kernel实现的…

自动更新阿里云CDN SSL证书

deploy-certificate-to-aliyun 随着各大CA机构开始收割用户&#xff0c;云厂商们提供的免费SSL证书也由之前的12个月变成现在的3个月。笔者一直使用阿里云的OSS作为图床&#xff0c;说实话在如果继续在阿里云上三个月免费一换也太频繁了 笔者在这里使用github action来每隔两个…

CentOS系统查看版本的各个命令

cat /etc/centos-release 查看CentOS版本 uname -a 命令的结果分别代表&#xff1a;当前系统的内核名称、主机名、内核发型版本、节点名、系统时间、硬件名称、硬件平台、处理器类型以及操作系统名称 cat /proc/version 命令用于查看Linux内核的版本信息。执行该命令后&#xf…

练手代码之使用Python实现合并PDF文件

如果你有合并PDF的需要&#xff0c;你会怎么办 我们无所不能的程序员会选择写一个Python代码来实现&#xff08;谁会这么无聊&#xff1f;是我&#xff09;&#xff0c;如果真的有PDF操作需要&#xff0c;我推荐你使用PDF Expert这个软件哈~ 话不多说直接上代码&#xff1a; …

高通安卓12-OTA 升级

1.OTA介绍 OTA 英文全称是 Over-the-Air Technology&#xff0c;即空间下载技术的意思。 OTA 升级是 Android 系统提供的标准软件升级方式。它功能强大&#xff0c;可以无损失升级系统&#xff0c;主 要通过网络[例如 WIFI、3G]自动下载 OTA 升级包、自动升级&#xff0c;但…

NeRF从入门到放弃6:两种OpenCV去畸变模型

针孔相机和鱼眼相机的去畸变模型是不一样的。 针孔相机的畸变参数有12个&#xff0c;k1~k6是径向畸变参数&#xff0c;p1 p2是切向畸变&#xff0c;s1s4&#xff1b;而鱼眼相机是等距模型&#xff0c;畸变参数只有4个k1k4。 针孔相机 畸变分为径向畸变和切向畸变。 把相机平…

高中数学:数列-an和Sn混合的题型处理

一、核心思想 题目一般会给我们一个或几个等式作为条件&#xff0c;其中&#xff0c;含有an和Sn关联的式子 那么&#xff0c;如果&#xff0c;题目需要我们求an&#xff0c;我们就想办法用其他条件消除Sn即可。 反之&#xff0c;求Sn&#xff0c;则用其他条件消除an即可。 二…

k8s volcano + deepspeed多机训练 + RDMA ROCE+ 用户权限安全方案【建议收藏】

目录 一、k8s环境配置 1.安装gpu-operator 2. 安装 rdma-shared-plugin 3. 安装volcano调度器 4. 创建research rbac认证 二、宿主机环境配置 1. 安装docker 客户端 2. 创建系统用户 3. 修改docker /etc/docker/daemon.json 文件如下 4. 修改系统 /etc/subuid 三、制…

APP终极瘦身方案

具体可参见 github.com/shwenzhang/… 优化META-INF MANIFEST.MF&#xff1a;是摘要文件&#xff0c;程序会遍历apk包中所有的文件&#xff0c;对非文件夹、非签名文件的文件&#xff0c;逐个编码生成摘要信息&#xff0c;并记录于此。如果逆向修改了任何文件&#xff0c;那么…

异地数据中心的数据实时同步,该怎样智能化实现?

为了提高系统的可用性和容错性&#xff0c;越来越多的企业和机构采用两地三中心方案等来进行异地数据中心的建设。数据中心建立后&#xff0c;数据需要同步至总部或其他数据中心及系统&#xff0c;以确保数据的冗余性、可用性、可靠性和一致性。在分布式系统、云计算、容灾备份…

游戏工厂:AI(AIGC/ChatGPT)与流程式游戏开发

游戏工厂&#xff1a;AI&#xff08;AIGC/ChatGPT&#xff09;与流程式游戏开发 码客 卢益贵 ygluu 关键词&#xff1a;AI&#xff08;AIGC、ChatGPT、文心一言&#xff09;、流程式管理、好莱坞电影流程、电影工厂、游戏工厂、游戏开发流程、游戏架构、模块化开发 一、前言…

3D开发工具HOOPS为BIM应用提供支持:复杂大模型实现Web端轻量化!

在数字化转型的浪潮中&#xff0c;Tech Soft 3D以其HOOPS SDK工具包&#xff0c;为软件开发人员提供了强大的支持。这一工具包不仅支持Windows、Linux、OSX和移动平台等多样化的操作系统&#xff0c;还使得开发人员能够构建出庞大而复杂的建筑和BIM应用程序。HOOPS SDK的多格式…

RIP动态路由配置

1、搭建网络 搭建拓扑、规划IP地址、划分网段、设置端口 2、配置交换机&#xff0c;路由器 三层交换机配置 Switch>enable Switch#conf t Enter configuration commands, one per line. End with CNTL/Z. Switch(config)#hostname S3560S3560(config)#vlan 10 S3560(con…

fot循环语句

概念&#xff1a; 循环是一种重复执行一段代码的结构&#xff0c;只要满足循环的条件&#xff0c;会一种执行这个代码。 循环条件&#xff1a;在一定范围内&#xff0c;按照指定的次数来执行循环 循环体&#xff1a;在指定的次数内&#xff0c;执行的命令序列。只要条件满足…

GD32F4xx 移植agile_modbus软件包与电能表通信

目录 1. agile_modbus1.1 简介1.2 下载2. agile_modbus使用2.1 源码目录2.2 移植3. 通信调试3.1 代码3.3 通信测试1. agile_modbus 1.1 简介 agile_modbus是一个轻量级的Modbus协议栈,主要特点: 支持RTU和TCP协议,采用纯C语言开发,不涉及任何硬件接口,可直接在任何形式的…

2024年【N1叉车司机】考试及N1叉车司机考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 N1叉车司机考试是安全生产模拟考试一点通总题库中生成的一套N1叉车司机考试题库&#xff0c;安全生产模拟考试一点通上N1叉车司机作业手机同步练习。2024年【N1叉车司机】考试及N1叉车司机考试题库 1、【多选题】《中…

一站式实时数仓Hologres整体能力介绍

讲师&#xff1a;阿里云Hologres PD丁烨 一、产品定位 随着技术的进步&#xff0c;大数据正从规模化转向实时化处理。用户对传统的T1分析已不满足&#xff0c;期望获得更高时效性的计算和分析能力。例如实时大屏&#xff0c;城市大脑的交通监控、风控和实时的个性化推荐&…

计算机专业:昔日万金油,明日科技潮头的弄潮儿

高考后的十字路口&#xff1a;计算机专业&#xff0c;依旧闪耀吗&#xff1f; 随着2024年高考的尘埃落定&#xff0c;数百万青春洋溢的脸庞再次凝视着未来的迷雾&#xff0c;试图在繁星点点的专业宇宙中找到那颗最亮的星——计算机科学与技术。长久以来&#xff0c;计算机专业…

如何在Windows 11和10上清除更新缓存?这里提供了几种方法

​Windows 11和Windows 10都可以非常轻松地清除Windows更新缓存。可以使用图形方法或命令行选项删除保存的更新文件。我们将向你展示你的可用选项。 为什么要清除Windows更新缓存 你可能希望清除Windows更新缓存的原因有很多。 你可能在查找或安装更新时遇到问题,清除缓存通…