“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方法使用(设值,取值)
    @Testpublic 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// 发送的验证码:codeKeyString 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.发送次数加1jedis.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 超三次发送验证码

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么在vscode里运行一个cpp文件

文章目录 1.需要下载g编译器&#xff0c;或clang&#xff08;快&#xff0c;但是优化效果没有g好&#xff09;2.新建文件夹和cpp文件&#xff08;tasks.json&#xff09;3.怎么在vscode里调试(launch.json)4.怎么设置让中断输出的字符是中文&#xff01;5.飞机大战 1.需要下载g…

Linux-笔记 线程同步机制

目录 前言 实现 信号量&#xff08;Semaphore&#xff09; 计数型信号量 二值信号量 信号量的原语操作 无名信号量的操作函数 例子 互斥锁&#xff08;mutex&#xff09; 互斥锁的操作函数 例子 自旋锁 &#xff08;Spinlock&#xff09; 自旋锁与互斥锁的区别 自…

mysql 查询的一般思路

能用单表优先用单表&#xff0c;即便是需要用group by、order by、limit等&#xff0c;效率一般也比多表高 不能用单表时优先用连接&#xff0c;连接是SQL中非常强大的用法&#xff0c;小表驱动大表建立合适索引合理运用连接条件&#xff0c;基本上连接可以解决绝大部分问题。…

iis下asp.netcore后台定时任务会取消

问题 使用BackgroundService或者IHostedService做后台定时任务的时候部署到iis会出现不定时定时任务取消的问题&#xff0c;原因是iis会定时的关闭网站 解决 应用程序池修改为AlwaysRunning 修改web.config <?xml version"1.0" encoding"utf-8"?…

RedisTemplate方法一览表

数据类型RedisTemplate 方法Redis命令解释应用场景stringopsForValue().set(key, value)SET设置存储在指定 key 下的值存储简单数据&#xff0c;如用户的设置、配置项opsForValue().get(key)GET获取存储在指定 key 下的值读取存储的数据&#xff0c;如用户信息、配置参数opsFor…

Android studio登录Google账号超时的解决方法

确保自己已经打开了代理&#xff08;科学上网&#xff09;在设置-外观与行为-系统设置-HTTP代理 中打开“自动检测代理设置”&#xff1a; 再次重新尝试登录Google账号&#xff0c;登陆成功&#xff01; 学术会议征稿 想要了解国内主办的覆盖学科最全最广的学术会议&#xff0c…

javafx例子笔记

文章目录 创建过程javafx独立版报错 Exception in thread "WindowsNativeRunloopThread" java.lang.NoSuchMethodError: <init> javafx是java gui工具。 一般会转换为exe&#xff0c;成为可交互的应用。 那么来个简单的例子吧。 先说明一点&#xff0c;javafx不…

代码-功能-python-爬取博客网标题作者发布时间

环境&#xff1a; python 3.8 代码&#xff1a; # 爬取博客园内容 # https://www.cnblogs.com/import re from lxml import etree import requests import json import threading from queue import Queue import pymysql import timeclass HeiMa:def __init__(self):# 请…

k8s 部署 ruoyi 前后端分离项目

本文视频版 https://www.bilibili.com/video/BV17ugkePEeN 参考 https://blog.csdn.net/qq_50247813/article/details/136934090 https://gitee.com/nasaa/RuoYi-Vue-cloud https://www.itsgeekhead.com/tuts/kubernetes-129-ubuntu-22-04-3/ https://kubernetes.io/docs/se…

【漏洞复现】畅捷通T+ keyEdit.aspx SQL漏洞

0x01 产品简介 畅捷通 T 是一款灵动&#xff0c;智慧&#xff0c;时尚的基于互联网时代开发的管理软件&#xff0c;主要针对中小型工贸与商贸企业&#xff0c;尤其适合有异地多组织机构(多工厂&#xff0c;多仓库&#xff0c;多办事处&#xff0c;多经销商)的企业&#xff0c;…

VB.NET 取当前项目根命名空间

VB.NET 取当前项目根命名空间 在VB.NET中&#xff0c;可以使用反射来获取当前程序集的入口点类型&#xff08;通常是模块或者主类&#xff09;&#xff0c;然后从这个类型的Assembly信息中获取定义它的程序集的根命名空间。以下是一个获取当前项目根命名空间的方法示例&#x…

用户态协议栈06-TCP三次握手

最近由于准备软件工程师职称考试&#xff0c;然后考完之后不小心生病了&#xff0c;都没写过DPDK的博客了。今天开始在上次架构优化的基础上增加TCP的协议栈流程。 什么是TCP 百度百科&#xff1a;TCP即传输控制协议&#xff08;Transmission Control Protocol&#xff09;是…

LabVIEW程序退出后线程仍在运行问题

LabVIEW程序退出后&#xff0c;线程仍在运行的问题可能源于资源管理不当、未正确终止循环、事件结构未处理、并发编程错误以及外部库调用未结束等方面。本文将从这些角度详细分析&#xff0c;探讨可能的原因和解决方案&#xff0c;并提供预防措施&#xff0c;帮助开发者避免类似…

将知乎专栏文章转换为 Markdown 文件保存到本地

一、参考内容 参考知乎文章代码 | 将知乎专栏文章转换为 Markdown 文件保存到本地&#xff0c;利用代码为GitHub&#xff1a;https://github.com/chenluda/zhihu-download。 二、步骤 1.首先安装包flask、flask-cors、markdownify 2. 运行app.py 3.在浏览器中打开链接&…

已解决javax.management.BadStringOperationException异常的正确解决方法,亲测有效!!!

已解决javax.management.BadStringOperationException异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 出现问题的场景 报错原因 解决思路 解决方法 分析错误日志 检查字符串值合法性 确认字符串格式 优化代码逻辑 增加…

Trimesh介绍及基本使用

Trimesh介绍及基本使用 Trimesh是一个纯Python 工具库&#xff08;支持3.7版本以上&#xff09;&#xff0c;用于加载和使用三角形Mesh网格&#xff0c;支持多种常见的三维数据格式&#xff0c;如二进制/文本格式的STL、Wavefront OBJ、二进制/文本格式的PLY、GLTF/GLB 2.0、3…

Leetcode 2713. 矩阵中严格递增的单元格数(DFS DP)

Leetcode 2713. 矩阵中严格递增的单元格数 DFS 容易想到&#xff0c;枚举每个点作为起点&#xff0c;向同行同列的可跳跃点dfs&#xff0c;维护全局变量记录可达的最远距离 超时&#xff0c;通过样例193 / 566 class Solution {int res 0;public void dfs(int[][] mat, in…

EtherCAT笔记(三) —— 主站与从站的硬件组成

1. EtherCAT 主站的硬件组成 EtherCAT主站使用标准以太网控制器&#xff0c;也即EtherCAT主站可以使用以太网控制器的任何设备。当我们有一台带网口的笔记本、工控机&#xff0c;甚至是树莓派也可以作为EtherCAT主站。 EtherCAT协议是对Ethernet协议在实时控制等方面的优化&am…

android关于源码编译简单的apk处理

文章目录 简述文件的添加 简述 创建AOSP源码可编译一个简单apk的过程&#xff0c;代码子目录结构图如下所示 文件的添加 1.com.custom.test目录下创建TestActivity.java文件 用于简单的界面显示类 package com.custom.test;import android.app.Activity; import android.o…

java springboot 正合Knife4j框架

要将 Knife4j&#xff08;之前称为 SwaggerBootstrapUi&#xff09;集成到 Spring Boot 项目中。 可以按照以下步骤操作&#xff1a; 1、添加依赖 在 pom.xml 文件中添加 Knife4j 的相关依赖。确保 Spring Boot 版本与 Knife4j 支持的版本相匹配。 这里以 Maven 为例…