Redis【入门篇】---- Redis的Java客户端-Jedis

news/2025/2/24 15:28:04

Redis【入门篇】---- Redis的Java客户端-Jedis

  • 1. Jedis快速入门
  • 2. Jedis连接池
    • 1. 创建Jedis连接池
    • 2. 改造原始代码

在Redis官网中提供了各种语言的客户端,地址:https://redis.io/docs/clients/

在这里插入图片描述

其中Java客户端也包含很多:

在这里插入图片描述

标记为❤的就是推荐使用的java客户端,包括:

  • Jedis和Lettuce:这两个主要是提供了Redis命令对应的API,方便我们操作Redis,而SpringDataRedis又对这两种做了抽象和封装,因此我们后期会直接以SpringDataRedis来学习。
  • Redisson:是在Redis基础上实现了分布式的可伸缩的java数据结构,例如Map.Queue等,而且支持跨进程的同步机制:Lock.Semaphore等待,比较适合用来实现特殊的功能需求。

1. Jedis快速入门

  1. 引入依赖
<!--jedis-->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.7.0</version>
</dependency>
<!--单元测试-->
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter</artifactId>
    <version>5.7.0</version>
    <scope>test</scope>
</dependency>
  1. 建立连接
java">    @BeforeEach
    void setUp() {
        jedis = new Jedis("192.168.10.100", 6379);
        jedis.auth("123321");
        jedis.select(0);
    }
  1. 测试
java">    @Test
    void testString() {
        String result = jedis.set("name", "虎哥");
        System.out.println("result = " + result);
        String name = jedis.get("name");
        System.out.println("name = " + name);
    }

    @Test
    void testHash() {
        jedis.hset("user:1", "name", "jack");
        jedis.hset("user:1", "age", "21");
        Map<String, String> map = jedis.hgetAll("user:1");
        System.out.println(map);
    }
  1. 释放资源
java">    @AfterEach
    void tearDowm() {
        if (jedis != null) {
            jedis.close();
        }
    }

2. Jedis连接池

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

有关池化思想,并不仅仅是这里会使用,很多地方都有,比如说我们的数据库连接池,比如我们tomcat中的线程池,这些都是池化思想的体现。

1. 创建Jedis连接池

java">public class JedisConnectionFacotry {

    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,
                "192.168.10.100", 6379, 1000, "123321");
    }

    public static Jedis getJedis() {
        return jedisPool.getResource();
    }

}

代码说明:

  • 1) JedisConnectionFacotry:工厂设计模式是实际开发中非常常用的一种设计模式,我们可以使用工厂,去降低代的耦合,比如Spring中的Bean的创建,就用到了工厂设计模式

  • 2)静态代码块:随着类的加载而加载,确保只能执行一次,我们在加载当前工厂类的时候,就可以执行static的操作完成对 连接池的初始化

  • 3)最后提供返回连接池中连接的方法.

2. 改造原始代码

代码说明:

  1. 在我们完成了使用工厂设计模式来完成代码的编写之后,我们在获得连接时,就可以通过工厂来获得,而不用直接去new对象,降低耦合,并且使用的还是连接池对象。

  2. 当我们使用了连接池后,当我们关闭连接其实并不是关闭,而是将Jedis还回连接池的。

java">    @BeforeEach
    void setUp() {
//        jedis = new Jedis("192.168.10.100", 6379);
        jedis = JedisConnectionFacotry.getJedis();
        jedis.auth("123321");
        jedis.select(0);
    }

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


http://www.niftyadmin.cn/n/464076.html

相关文章

测绘基本术语大全

从测绘基本术语中学测绘。 目录 一 测绘总类二 测绘信息获取三 测绘信息处理四 测绘成果 一 测绘总类 1、测绘学&#xff08;surveying and mapping, SM&#xff09;&#xff1a;研究地理信息的获取、处理、描述和应用的学科。其内容包括研究测定、描述地球的形状、大小、重力场…

代码随想录算法训练营第四十二天 | 01背包理论基础,01背包理论基础(滚动数组),416. 分割等和子集

代码随想录算法训练营第四十二天 | 01背包理论基础&#xff0c;01背包理论基础&#xff08;滚动数组&#xff09;&#xff0c;416. 分割等和子集 1.1 01背包理论基础 01背包 回溯法&#xff1a;暴力的解法是o(2^n)指数级别的时间复杂度&#xff0c;需要动态规划的解法来进行优…

前端三剑客简介

文章目录 css的导入方式CSS选择器 JavascriptJavascript的引入方式输出语句变量数据类型javascript对象String对象 BOM对象DOM对象 W3C标准&#xff1a;网页主要由三部分组成 结构&#xff1a;html表现&#xff1a;css&#xff0c;层叠样式表行为&#xff1a;JavaScript css的…

【开源与项目实战:开源实战】80 | 开源实战二(下):从Unix开源开发学习应对大型复杂项目开发

上两节课&#xff0c;我们分别从代码编写、研发管理的角度&#xff0c;学习了如何应对大型复杂软件开发。在研发管理这一部分&#xff0c;我们又讲到比较重要的几点&#xff0c;它们分别是编码规范、单元测试、持续重构和 Code Review。其中&#xff0c;前三点在专栏的理论部分…

python中.ix()函数的作用

在早期版本的Pandas库中&#xff0c;.ix函数被用于基于标签和整数位置进行数据访问和操作。然而&#xff0c;在较新的版本中&#xff08;从Pandas 0.20.0开始&#xff09;&#xff0c;.ix函数已被弃用&#xff0c;并建议使用.loc和.iloc函数来替代。 在较新版本的Pandas中&…

【CS144-2021】Stanford 计算机网络课程学习

CS144 2019 Fall&#xff1a;https://kangyupl.gitee.io/cs144.github.io/2020 Fall&#xff1a;https://github.com/lawliet9712/Stanford-CS144-2021【推荐】2021 Fall&#xff1a;https://github.com/Kiprey/sponge 前前后后弄了半个月&#xff0c;终于啃完 CS144 了&#…

【从零开始学习JAVA | 第十九篇】初识内部类

前言&#xff1a; 内部类是类的五大成员。一个类的其他的成员分别是属性&#xff0c;方法&#xff0c;构造方法&#xff0c;代码块。本文将详细介绍什么是内部类&#xff0c;以及内部类的意义。 内部类&#xff1a; 内部类&#xff08;Inner Class&#xff09;是 Java 中的一个…

【MySQL数据库】存储过程

目录 一、存储过程1.1概述1.2优点 二、存储过程实战2.1创建存储过程2.2存储过程的参数2.3条件语句 if-then-else end if2.4循环语句while end while 一、存储过程 1.1概述 存储过程是一组为了完成特定功能的SQL语句集合。存储过程在使用过程中是将常用或者复杂的工作预先使…