首页 > 数据库 >Redis 的Java客户端——Jedis连接池的使用详解

Redis 的Java客户端——Jedis连接池的使用详解

时间:2023-04-22 19:03:59浏览次数:39  
标签:poolConfig Java name Redis Jedis jedis 连接池

一.Redis 的Java客户端

jedis的官方仓库地址:

https://github.com/redis/jedis

Redis 数据结构

Redis 是一个 key-value 的数据库,key 一般是 String 类型,不过 value 的类型多种多样。

image-20230305154224080

1.1 引入Redis依赖

<dependency>
  <groupId>redis.clients</groupId>
  <artifactId>jedis</artifactId>
  <version>3.7.0</version>
</dependency>

建立一个单元测试: image-20230308095245687

建立jedis链接,因为我的redis没有设置密码,所以注释掉了。

    @BeforeEach
    void setUp(){
        jedis=new Jedis("127.0.0.1",6379);
//        jedis.auth("123321");
        jedis.select(0);
    }

junit测试:

    @Test
    void testString(){
//        存入数据
        String result =jedis.set("name","小猪");
        System.out.println("result"+result);
//        获取数据
        String name = jedis.get("name");
        System.out.println("name = "+name);
    }

JUnit5 @AfterEach 注解替换了 JUnit4 中的@After注解。它用于表示应在当前类中的每个@Test方法之后执行注解方法。

@AfterEach
void tearDown(){
    if (jedis!=null){
        jedis.close();
    }
}

执行结果:

image-20230308095552472

到RESP里检查:

image-20230308095606586

RESP配置:RESP配置非常的简单:

如下:

image-20230308095654463

1.2 Hash例子

插入一个Hash例子:

    void testHash(){
//        插入hash数据
        jedis.hset("user:1","name","jack");
        jedis.hset("user:1","age", "21");
//        获取
        Map<String,String> map= jedis.hgetAll("user:1");
        System.out.println(map);
    }

运行结果:

image-20230308104731045

到RESP里查看:

image-20230308104755953

1.3 Redis使用步骤总结

Jedis基本使用步骤:

1.引入依赖

2.创建 Jedis 对象, 建立连接

3.使用 Jedis, 方法名与 Red is 命令一致

4.释放资源

二.Jedis连接池

Jedis 本身是线程不安全的, 并且频繁的创建和销毁连接会有性能损耗, 因此我们推荐大家使用 Jedis 连接池代替 Jedis 的直连方式。

新建立一个Jedis连接池,如下:

image-20230308122128390

public class JedisConnectionFacory {
    private static final JedisPool jedisPool;

    static {
//        配置连接池
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxTotal(8); //最大连接数
        poolConfig.setMaxIdle(8);//预备连接数
        poolConfig.setMinIdle(0);//最小连接数
        poolConfig.setMaxWaitMillis(1000);//等待时间
//        创建连接池对象
        jedisPool = new JedisPool(poolConfig,"127.0.0.1",6379,1000);
    }
    public static Jedis getJedis(){
        return jedisPool.getResource();
    }
}

最大连接数:

poolConfig.setMaxTotal(8);

预备连接数:

poolConfig.setMaxIdle(8);

最小连接数:

poolConfig.setMinIdle(0);

将上面的单元测试,连接的池改为前面的Jedis连接池。

//        jedis=new Jedis("127.0.0.1",6379);
        jedis= JedisConnectionFacory.getJedis();
//        jedis.auth("123321");
        jedis.select(0);

测试:没有问题。

image-20230308122846945

1.2 SpringDataRedis

SpringData 是 Spring 中数据操作的模块,包含对各种数据库的集成,其中对 Redis 的集成模块就叫做 SpringDataRedis

  • 提供了对不同 Redis 客户端的整合(Lettuce 和 edis)
  • 提供了 RedisTemplate 统一 API 来操作 Redis
  • 支持 Redis 的发布订阅模型
  • 支持 Redis 哨兵和 Redis 集群
  • 支持基于 Lettuce 的响应式编程
  • 支持基于 JDK、JSON、字符串、Spring 对象的数据序列化及反序列化
  • 支持基于 Redis 的 DKCollection 实现

Spring Data Red is 中提供了 Red is Template 工具类, 其中封装了各种对 Red is 的操作。并且将不同数据类型的操作 API 封装到了不同的类型中:

image-20230308123451493

1.2.1 创建一个新的项目

创建一个Spring项目。如下图:

image-20230308191729141

选择一个NoSQL:Redis,如下图。

image-20230308192112915

如下:

image-20230308194530682

SpringBoot 已经提供了对 SpringDataRedis 的支持,使用非常简单:

1.引入依赖redis:

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

2.引入common-pool依赖:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
</dependency>

标签:poolConfig,Java,name,Redis,Jedis,jedis,连接池
From: https://blog.51cto.com/u_15568258/6215439

相关文章

  • Java 把 Map 的值(Value)转换为 Array, List 或 Set
    概述在这篇短文中,我们将会展示如何把Map中的值取出来,转换为一个Array,、List或者一个Set。 当然,你可以使用JavaJDK来进行转换,你也可以使用Guava来进行转换。 首先,让我们来看看,如何使用原生的JavaJDK把一个Map的值换行为Array。@TestpublicfinalvoidgivenU......
  • Java 把 Map 的值(Value)转换为 Array, List 或 Set
    概述在这篇短文中,我们将会展示如何把Map中的值取出来,转换为一个Array,、List或者一个Set。 当然,你可以使用JavaJDK来进行转换,你也可以使用Guava来进行转换。 首先,让我们来看看,如何使用原生的JavaJDK把一个Map的值换行为Array。@Testpublicfinal......
  • redis数据结构
    ZipListziplist是一种特殊的“双向链表”,由一系列特殊编码的连续内存组成,可以在任意一端进行压入和弹出。ZipList的结构ZipListEntry的结构entry并不像普通双向链表节点用两个指针指向前后节点,为了节省空间。previous_entry_length:前一个节点的长度,占1个或5个字节如果......
  • 理解 Java8 的时间API(一)时区
    理解Java8的时间API:java.time由于Java的时间API:java.util.Date、java.util.Calendar、java.util.TimeZone使用起来非常混乱,因此Java8重新设计了一套时间API,放在java.time.*包下。如果需要熟练使用新的LocalDateTime,LocalDate,LocalTime类,最好是先了解时区的概念。因此本文先......
  • Java开发 - 读写分离初体验
    前言上一篇中,我们介绍了主从复制,相信学过的小伙伴已经能够很好的掌握主从复制的技术,实际上也并没有那么难,虽然没有讲一主多从,多主多从的配置,但是从一主一从的配置中也很容易联想到该怎么配置,你没猜错,就是你想的那样。这篇博客,我们要讲解的东西是主从复制的应用——读写分离。一般来......
  • Java基础知识点API之Object
    一:概述Object是java中的顶级父类,所有的父类都直接或间接地继承于Object类。Object类中的方法可以被所有子类访问,所以我们要学习Object类和其中的方法。二·:OBject的构造方法及其常用的成员方法publicObject()//空参构造classStudent(){privateStringname;private......
  • Java获取拼多多搜索词推荐 API接口(item_search_suggest-获得搜索词推荐)
    搜索词推荐的作用1.可以精准把控流量2.可以测试产品款式测试产品图片3.提升类目在平台的排名4.提升销量,加速报名参加平台的活动5.提升ROI,日常平销item_search_suggest-获得搜索词推荐公共参数名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥(接......
  • javasec(八)jndi注入
    JNDIJNDI(全称JavaNamingandDirectoryInterface)是用于目录服务的JavaAPI,它允许Java客户端通过名称发现和查找数据和资源(以Java对象的形式)。与主机系统接口的所有Javaapi一样,JNDI独立于底层实现。此外,它指定了一个服务提供者接口(SPI),该接口允许将目录服务实现插入到框架中......
  • Java中方法的定义及注意事项
    一、方法什么是方法:方法(method)是程序中最小的执行单元实际开发中,什么时候用到方法:重复的代码、具有独立功能的代码可以抽取到方法中实际开发中,方法有什么好处:可以提高代码的复用性可以提高代码的可维护性方法的定义格式:publicstatic返回值类型方法名(参数){......
  • redis高级:持久化方案、主从复制原理和方案、哨兵高可用
    目录一、持久化方案1、什么是持久化2、持久化的实现方式3、RDB4、aof方案5、RDB和AOF的选择6、混合持久化二、主从复制原理和方案1、为什么要用主从复制2、主从复制介绍3、redis主从赋值流程,原理三、哨兵高可用1、什么是高可用2、哨兵实现高可用3、哨兵实现高可用搭建步骤一、持......