redis--13--Jedis使用

2023-11-15

redis–13–Jedis使用


代码位置
https://gitee.com/DanShenGuiZu/learnDemo/tree/master/redis-learn/jedis

1、redis.conf 修改

# 允许远程连接
# bind 127.0.0.1 
# 允许远程连接
protected-mode no

不管整合spring,还是整合springboot,这里都是要做的步骤。

2、整合Spring

2.1、所需要的jar包

<!-- Jedis所需要的jar包-->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.3.0</version>
</dependency>


2.2、测试–单机redis或者主从redis

2.2.1、连接测试


public class Demo01 {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("192.168.187.138",6379);
        String pong = jedis.ping();
        System.out.println("连接成功:"+pong);
        jedis.close();
    }
}

在这里插入图片描述

2.2.2、redis数据类型测试

代码
 
public class Demo02 {
    
    private static Jedis jedis;
    
    public static void main(String[] args) {
        System.out.println("-----------------获取 jedis-------------------");
        getJedis();
        
        System.out.println("-----------------通用key 测试-------------------");
        keys_method();
        
        System.out.println("-----------------String 测试-------------------");
        string_method();
        
        System.out.println("-----------------list 测试-------------------");
        list_method();
        
        System.out.println("-----------------set 测试-------------------");
        set_method();
        
        System.out.println("-----------------hash 测试-------------------");
        hash_method();
        
        System.out.println("-----------------zset 测试-------------------");
        zset_method();
        
        System.out.println("-----------------关闭 jedis-------------------");
        close();
    }
    
    /**
     * hash 测试
     */
    public static void zset_method() {
        jedis.zadd("zset01", 100, "li01");
        jedis.zadd("zset01", 90, "li02");
        jedis.zadd("zset01", 80, "li03");
        jedis.zadd("zset01", 70, "li04");
        
        Set<String> zrange = jedis.zrange("zset01", 0, -1);
        for (String e : zrange) {
            System.out.println("zset 测试-->" + e);
            
        }
        
    }
    
    /**
     * hash 测试
     */
    public static void hash_method() {
        jedis.hset("user", "userName", "lisi");
        
        System.out.println("hash 测试-->" + jedis.hget("user", "userName"));
        
        Map<String, String> map = new HashMap<String, String>();
        map.put("phone", "1111");
        map.put("address", "222");
        map.put("email", "333");
        jedis.hmset("user2", map);
        List<String> result = jedis.hmget("user2", "phone", "address");
        for (String element : result) {
            System.out.println("hash 测试-->" + element);
            
        }
        
    }
    
    /**
     * set 测试
     */
    public static void set_method() {
        jedis.sadd("orders", "01");
        jedis.sadd("orders", "02");
        jedis.sadd("orders", "03");
        jedis.sadd("orders", "04");
        Set<String> smembers = jedis.smembers("orders");
        for (String order : smembers) {
            
            System.out.println("set 测试-->" + order);
        }
        // 删除orders集合中value=04的元素
        Long srem = jedis.srem("orders", "04");
        System.out.println("set 测试-->成功删除的数量" + srem);
        
    }
    
    /**
     * list 测试
     */
    public static void list_method() {
        jedis.lpush("mylist", "a", "b", "c", "d");
        List<String> list = jedis.lrange("mylist", 0, -1);
        for (String element : list) {
            System.out.println("list 测试-->" + element);
        }
        
    }
    
    /**
     * String 测试
     */
    public static void string_method() {
        jedis.mset("str1", "v1", "str2", "v2", "str3", "v3");
        
        System.out.println("String 测试-->" + jedis.mget("str1", "str2", "str3"));
    }
    
    /**
     * 通用key测试
     */
    public static void keys_method() {
        jedis.set("k1", "v1");
        jedis.set("k2", "v2");
        jedis.set("k3", "v3");
        Set<String> keys = jedis.keys("*");
        System.out.println("通用key测试-->keys.size:" + keys.size());
        for (String key : keys) {
            System.out.println("通用key测试-->key:" + key);
        }
        System.out.println("通用key测试-->k1是否存在:" + jedis.exists("k1"));
        System.out.println("通用key测试-->k1的过期时间:" + jedis.ttl("k1"));
        System.out.println("通用key测试-->key的值:" + jedis.get("k1"));
    }
    
    public static void getJedis() {
        jedis = new Jedis("192.168.187.138", 6379);
        String pong = jedis.ping();
        System.out.println("连接成功:" + pong);
        
    }
    
    public static void close() {
        jedis.close();
    }
}

结果

 
-----------------获取 jedis-------------------
连接成功:PONG
-----------------通用key 测试-------------------
通用key测试-->keys.size:3
通用key测试-->key:k3
通用key测试-->key:k1
通用key测试-->key:k2
通用key测试-->k1是否存在:true
通用key测试-->k1的过期时间:-1
通用key测试-->key的值:v1
-----------------String 测试-------------------
String 测试-->[v1, v2, v3]
-----------------list 测试-------------------
list 测试-->d
list 测试-->c
list 测试-->b
list 测试-->a
-----------------set 测试-------------------
set 测试-->04
set 测试-->02
set 测试-->03
set 测试-->01
set 测试-->成功删除的数量1
-----------------hash 测试-------------------
hash 测试-->lisi
hash 测试-->1111
hash 测试-->222
-----------------zset 测试-------------------
zset 测试-->li04
zset 测试-->li03
zset 测试-->li02
zset 测试-->li01
-----------------关闭 jedis-------------------

Process finished with exit code 0


2.3、测试–哨兵

package com.example.jedis.demo;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisSentinelPool;

import java.util.HashSet;
import java.util.Set;

/**
 * 描述该类
 *
 * @author <a href="920786312@qq.com">周飞</a>
 * @class: Demo01
 * @date 2022/2/2  15:23
 * @Verson 1.0 -2022/2/2  15:23
 * @see
 */
public class Demo03 {
    public static void main(String[] args) {
        Jedis jedis =getJedisFromSentinel();

        jedis.set("k1", "v1");
        System.out.println("哨兵测试:" + jedis.get("k1"));
        jedis.close();
    }

    private static JedisSentinelPool jedisSentinelPool=null;

    public static  Jedis getJedisFromSentinel(){
        if(jedisSentinelPool==null){
            //redis主从机器访问密码
            String password="123456";
            //哨兵配置
            Set<String> sentinelSet=new HashSet<>();
            sentinelSet.add("192.168.187.139:26379");
            sentinelSet.add("192.168.187.138:26380");
            sentinelSet.add("192.168.187.138:26381");

            JedisPoolConfig jedisPoolConfig =new JedisPoolConfig();
            jedisPoolConfig.setMaxTotal(10); //最大可用连接数
            jedisPoolConfig.setMaxIdle(5); //最大闲置连接数
            jedisPoolConfig.setMinIdle(5); //最小闲置连接数
            jedisPoolConfig.setBlockWhenExhausted(true); //连接耗尽是否等待
            jedisPoolConfig.setMaxWaitMillis(2000); //等待时间
            jedisPoolConfig.setTestOnBorrow(true); //取连接的时候进行一下测试 ping pong

            jedisSentinelPool=new JedisSentinelPool("appmaster",sentinelSet,jedisPoolConfig,password);
            return jedisSentinelPool.getResource();
        }else{
            return jedisSentinelPool.getResource();
        }
    }
}

在这里插入图片描述

2.4、测试–集群

package com.example.jedis.demo;

import java.util.HashSet;
import java.util.Set;

import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import redis.clients.jedis.*;

/**
 * 描述该类
 *
 * @author <a href="920786312@qq.com">周飞</a>
 * @class: Demo01
 * @date 2022/2/2 15:23
 * @Verson 1.0 -2022/2/2 15:23
 * @see
 */
public class Demo04 {
    
    public static void main(String[] args) {
        
        Set<HostAndPort> set = new HashSet<HostAndPort>();
        set.add(new HostAndPort("192.168.187.139", 7000));
        set.add(new HostAndPort("192.168.187.139", 7001));
        set.add(new HostAndPort("192.168.187.139", 7002));
        set.add(new HostAndPort("192.168.187.139", 7003));
        set.add(new HostAndPort("192.168.187.139", 7004));
        set.add(new HostAndPort("192.168.187.139", 7005));
        
        int connectionTimeout = 2000;
        int soTimeout = 2000;
        int maxAttempts = 5;
        // redis认证密码
        String password = "123456";
        
        // 连接
        JedisCluster jedisCluster = new JedisCluster(set, connectionTimeout, soTimeout, maxAttempts, password,
                new GenericObjectPoolConfig());
        
        jedisCluster.set("k1", "v1");
        System.out.println("集群测试:" + jedisCluster.get("k1"));
        jedisCluster.close();
        
    }
    
}

在这里插入图片描述

3、整合 Spring Boot

3.1、引入redis相关依赖

<!-- redis -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>


<!-- spring2.X集成redis所需common-pool2-->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
    <version>2.11.1</version>
</dependency>


在这里插入图片描述

3.2、测试–单机或者主从场景

application.properties 配置redis


#Redis服务器地址
spring.redis.host=192.168.187.138
#Redis服务器连接端口
spring.redis.port=6379
#Redis数据库索引(默认为0)
spring.redis.database= 0
#连接超时时间(毫秒)
spring.redis.timeout=1800000
#连接池最大连接数(使用负值表示没有限制)
spring.redis.lettuce.pool.max-active=20
#最大阻塞等待时间(负数表示没限制)
spring.redis.lettuce.pool.max-wait=-1
#连接池中的最大空闲连接
spring.redis.lettuce.pool.max-idle=5
#连接池中的最小空闲连接
spring.redis.lettuce.pool.min-idle=0

RedisTestController

 */
@RestController
public class RedisTestController {
    @Autowired
    private RedisTemplate redisTemplate;
    
    @RequestMapping("/redisTest")
    public String testRedis() {
        // 设置值到redis
        redisTemplate.opsForValue().set("k1", "v1");
        // 从redis获取值
        String name = (String) redisTemplate.opsForValue().get("k1");
        return name;
    }
}

在这里插入图片描述

在这里插入图片描述

3.3、测试–哨兵

application.properties 配置redis

# Redis服务器地址
# spring.redis.host=192.168.187.138
# Redis服务器连接端口
# spring.redis.port=6379


#Redis数据库索引(默认为0)
spring.redis.database= 0
#连接超时时间(毫秒)
spring.redis.timeout=1800000
#连接池最大连接数(使用负值表示没有限制)
spring.redis.lettuce.pool.max-active=20
#最大阻塞等待时间(负数表示没限制)
spring.redis.lettuce.pool.max-wait=-1
#连接池中的最大空闲连接
spring.redis.lettuce.pool.max-idle=5
#连接池中的最小空闲连接
spring.redis.lettuce.pool.min-idle=0
# redis主从机器的访问密码
spring.redis.password=123456
# redis 主机的名称
spring.redis.sentinel.master=appmaster
#哨兵列表
spring.redis.sentinel.nodes=192.168.187.139:26379,192.168.187.139:26380,192.168.187.139:26381

在这里插入图片描述

在这里插入图片描述

3.4、测试–集群

application.properties 配置redis

#Redis服务器地址
# spring.redis.host=192.168.187.138
#Redis服务器连接端口
# spring.redis.port=6379
#Redis数据库索引(默认为0)
spring.redis.database= 0
#连接超时时间(毫秒)
spring.redis.timeout=1800000
#连接池最大连接数(使用负值表示没有限制)
spring.redis.lettuce.pool.max-active=20
#最大阻塞等待时间(负数表示没限制)
spring.redis.lettuce.pool.max-wait=-1
#连接池中的最大空闲连接
spring.redis.lettuce.pool.max-idle=5
#连接池中的最小空闲连接
spring.redis.lettuce.pool.min-idle=0
# redis主从机器的访问密码
spring.redis.password=123456
# redis 主机的名称
# spring.redis.sentinel.master=appmaster
#哨兵列表
# spring.redis.sentinel.nodes=192.168.187.139:26379,192.168.187.139:26380,192.168.187.139:26381
# 集群列表
spring.redis.cluster.nodes=192.168.187.139:7000,192.168.187.139:7001,192.168.187.139:7002,192.168.187.139:7003,192\
  .168.187.139:7004,192.168.187.139:7005

在这里插入图片描述

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

redis--13--Jedis使用 的相关文章

  • 中断并标签,“标签 MyLabel 丢失”

    我有这样的代码 if condition1 break MyLabel while true some code here MyLabel if condition2 break more code here 我收到此错误 标签 MyLab
  • 有没有更简单的方法来分割/重建字符串?

    目前我正在使用String split 像这样 String tmp props get i getFullName split String name for int j 1 j lt tmp length j if j gt 1 nam
  • UcanaccessSQLException:UCAExc:::3.0.1 表达式的数据类型不是布尔值

    我有一张如下图所示的表格 我需要获取其库尔德语单词包含的所有英语单词 r 所以我不能使用 select English from Table1 where Kurdish like 因为它还接受另一个单词中的子字符串 例如 当我尝试在查询中
  • 仅使用公钥在 HD 钱包中生成以太坊地址 (bitcoinj/web3j)

    我尝试为使用 bitcoinj 库实现的 HD 钱包密钥生成以太坊地址 但我感到困惑 DeterministicSeed seed new DeterministicSeed some seed code here null 1409478
  • Java:while循环冻结程序

    我正在制作一个游戏 我需要每 3 秒更新一次 JProgressBar 为此 我使用 while 循环 问题是我的程序由于 while 循环而冻结 我在其他问题中读到它 他们没有帮助我解决这个问题 我不知道如何解决 这是我的代码 publi
  • 查找所有数组的长度多维数组,Java

    我想使用多维数组来存储数据网格 但是 我还没有找到一种简单的方法来查找长度2nd数组的一部分 例如 boolean array new boolean 3 5 System out println array length 只会输出3 是否
  • org.openqa.selenium.NoSuchSessionException:会话 ID 为空。调用 quit() 后使用 WebDriver?

    我已经进行了一些搜索 但仍然遇到同样的问题 我相信这可能是由于我的网络驱动程序是静态的造成的 我不太确定 在我的主课中 我包括了 BeforeTest and AfterTest BeforeTest包括根据我的 XML 文件启动新浏览器
  • NIO 直接缓冲区何时以及如何被释放?

    我有一个 C 库 需要一个临时缓冲区作为暂存空间 我正在考虑将直接字节缓冲区的地址传递给它 在最终释放缓冲区之前 是否允许虚拟机重新定位缓冲区 JNI 框架消失后 本机库将保留该指针 我的理解是 JNI 本地对象引用无法缓存 因为 VM 可
  • Java 客户端到服务器未知来源

    我有一个简单的乒乓球游戏 需要通过网络工作 服务器将创建一个带有球和 2 个球棒位置的游戏 当客户端连接到服务器时 服务器将创建一个名为 PongPlayerThread 的新类 它将处理客户端到服务器的输入和输出流 我的服务器工作100
  • 在 libgdx 中渲染 box2d

    我有一个使用 FitViewport 的大小为 800x480 的游戏世界 并且最初使用像素渲染 box2d 实体 固定装置 因此所有物理效果都显得浮动且缓慢 查看文档后 我意识到 box2d 使用度量单位 因此我将 box2d 位置和大小
  • Eclipse RCP - 将视图与编辑器区域堆叠?

    在开发 Eclipse RCP 应用程序时 是否可以将视图与编辑器区域堆叠在一起 像这样 我有多个列表 表格 我想创建一种预览组合 当通过单击鼠标选择列表上的项目时 我希望我的预览合成显示该项目的数据 如果用户双击某个项目 我想在预览合成后
  • 如何在 Java 中使用 HTML 解析器和 Apache Tika 来提取所有 HTML 标签?

    我下载了 tika core 和 tika parser 库 但找不到将 HTML 文档解析为字符串的示例代码 我必须删除网页源的所有 html 标签 我能做些什么 如何使用 Apache Tika 进行编码 您想要 html 文件的纯文本
  • Java 8 Stream - 并行执行 - 不同的结果 - 为什么?

    假设我有一个List
  • Java ArrayList 和 HashMap 动态

    有人可以提供一个创建Java的例子吗ArrayList and HashMap在飞行中 所以而不是做一个add or put 实际上在类实例化时为数组 哈希提供种子数据 举个例子 类似于 PHP 的例子 array array 3 1 2
  • Java 声音可视化器

    我正在尝试制作一个java声音可视化工具 但我完全不知道如何在实时处理音频后立即从提取的音频中获取字节 我可以将程序与 wav 文件同步 但这不是我想要做的 我想用程序生成声音 然后播放它 而不将其保存在任何地方 谢谢您的帮助 本文可以帮助
  • 按钮悬停和按下效果 CSS Javafx

    我是 CSS 新手 为按钮定义了以下 CSS 样式 其中id并且应用了自定义样式 但不应用悬停和按下效果 bevel grey fx background color linear gradient f2f2f2 d6d6d6 linear
  • 对于双核手机,availableProcessors() 返回 1

    我最近购买了一部 Moto Atrix 2 手机 当我尝试查看手机中的处理器规格时 Runtime getRuntime availableProcessors 返回 1 proc cpuinfo 也仅包含有关处理器 0 的信息 出于好奇
  • Eclipse 如何创建一个未解决编译问题的类?

    当我尝试使用 javac 编译此类时 出现编译错误并且未创建 Test class public class Test public static void main String args int x 1L lt this cannot
  • 将 SQL 数据中的一行映射到 Java 对象

    我有一个 Java 类 其实例字段 以及匹配的 setter 方法 与 SQL 数据库表的列名相匹配 我想优雅地从表中获取一行 到 ResultSet 中 并将其映射到此类的实例 例如 我有一个 Student 类 其中包含实例字段 FNA
  • 需要在没有wsdl的情况下调用soap ws

    我是网络服务的新手 这个网络服务是由 siebel 提供的 我需要调用一项网络服务 我的客户向我提供了以下详细信息 这是 SOAP 对于产品 请使用它作为端点 Request

随机推荐

  • 用一个数组实现两个栈(共享栈)

    共享栈 一个数组实现两个栈 第一个栈是开头 第二个栈是结尾 用c语言实现 很简单 两个指针一个数组就够了 上代码 define CRT SECURE NO WARNINGS 1 include
  • Windows中从浏览器启动本地应用程序 Pluggable Protocol

    项目中需要从网页中打开一个本地应用程序 并传递给应用程序启动参数 方法有很多 最简单的一种是通过自定义协议 类似于mailto http https 主流浏览器都支持 只需要在注册表中添加相应内容即可 官方叫做 Pluggable Prot
  • 在CentOS 7中使用BIND部署DNS服务器 - 正向/反向解析

    DNS Domain Name System 域名系统 用于解析域名与IP地址的映射关系 根据主机名 域名 解析对应的IP地址称之为正向解析 根据IP地址解析对应的主机名 域名 称为之反向解析 DNS服务器又分为主服务器 从服务器和缓存服务
  • 进制转换成_10to16

    include math h void 10to16 char 10 char 16 int n n atoi 10 sprintf 16 x n main char 10 20 16 20 printf input 10 jinzhi n
  • QT 去掉标题栏和去掉标题栏后移动窗口

    转自 http www 2cto com kf 201302 191602 html 在用QT编写界面时 去掉标题栏方法比较简单 就一行代码 this gt setWindowFlags Qt FramelessWindowHint 去掉以
  • go 无限极分类实现 返回树状排列数据 或 树状层级数据

    根据从数据表中查询的多条数据得到树状数据 数据表中根据 id 与 pid进行区分上下级 具体实现如下 1 分类排列 Menu 菜单 type Menu struct Id int Pid int CateName string Desc s
  • go 关于redis包的依赖包go.opentelemetry.io/otel下载出现i/o timeout

    通过go get u v github com go redis redis对redis包进行添加 会出现i o timeout的错误 对于该依赖包的解决方法在百度查找不到 但是可以找到相关的网站 https opentelemetry i
  • 中文停用词

    一 数 日 0 1 2 3 4 5 6 7 8 9 lt gt gt gt A Lex exp sub sup
  • 专题详解-5G接入控制(1)

    相关文章会在公众号同步更新 公众号 5G通信大家学 持续更新的相关5G内容都是直接根据3GPP整理 保证更新内容的准确性 避免通过二手 甚至多手的资料 以讹传讹误导网友 最近工作中遇到了一些5G专网接入限制的问题 以前没仔细研究 借着解决这
  • angular路由参数路由跳转

    路由参数及跳转 本节介绍路由参数及跳转相关 准备工作 首先 我们需要将上一节的 CommentService UserService抽离成单独的文件 以便多处使用 ng g s components router study comment
  • Python入门_使用while循环计算1-100之间偶数和

    案例 计算1 100之间所有偶数的和 i 1 定义一个变量sum为0 用来存放和 sum 0 while i lt 100 每次sum和i相加 if i 2 0 sum i i 1 执行完之后 打印sum的值 print 1 100之间偶数
  • Nginx实现反向代理和负载均衡

    Nginx安装 本文章主要介绍下 如何使用Nginx来实现反向代理和负载均衡 Nginx安装和基础知识 可参考我的这篇文章 Nginx安装 Nginx实现反向代理 实现反向代理需要准备两台Nginx服务器 一台Nginx服务器A ip为 1
  • leetcode33. 搜索旋转排序数组

    整数数组 nums 按升序排列 数组中的值 互不相同 在传递给函数之前 nums 在预先未知的某个下标 k 0 lt k lt nums length 上进行了 旋转 使数组变为 nums k nums k 1 nums n 1 nums
  • 【Python编程】如何在 Jupyter Notebook 中切换虚拟环境

    如何在 Jupyter Notebook 中切换虚拟环境 一 操作步骤 1 首先切换到想要在 Jupyter Notebook 里使用的虚拟环境 conda activate 环境名称 2 安装 ipykernel conda instal
  • TCP详解(一)服务和首部介绍

    文章目录 引言 TCP的服务 TCP首部 引言 TCP全称传输控制协议 Transmission Control Protocol 它是一种传输层通信协议 提供了面向连接的 可靠的字节流服务 本文将会简要介绍TCP为应用层提供的服务以及TC
  • node基础之三:http 模块

    1 导入模块 const http require http 2 创建服务 const server http createServer request response gt 获取请求方法 request method 获取请求 url
  • 阿里云1核1G内存1M宽带可以支持多少IP访问量?

    阿里云1核CPU 1G内存 1M公网宽带云服务器够用吗 1M宽带可以支持多少IP的访问量 来说说1M宽带可以跑多少流量及1核1G服务器配置性能 1核 1G 1M宽带配置能跑多少IP 一般来讲 如果图片不多 每天3000PV是没问题的 如果将
  • 优秀的CobaltStrike插件推荐:编程

    优秀的CobaltStrike插件推荐 编程 CobaltStrike是一款功能强大的渗透测试工具 广泛应用于红队行动和网络安全评估 它的灵活性和可扩展性使得开发者可以编写自己的插件来增强其功能 在这篇文章中 我将向你推荐一些好用的Coba
  • java并发包:重入锁与Condition条件

    本文转载至 http blog csdn net a910626 article details 51900941 重入锁 这里介绍一下synchronized wait notify方法的替代品 或者说是增强版 重入锁 重入锁是可以完全替
  • redis--13--Jedis使用

    redis 13 Jedis使用 代码位置 https gitee com DanShenGuiZu learnDemo tree master redis learn jedis 1 redis conf 修改 允许远程连接 bind 1