4、Redis连接池的构建与测试

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 首先我们在我们的项目中新建一个 RedisPool类代码如下:package com.mmall.common;import com.mmall.

首先我们在我们的项目中新建一个 RedisPool
代码如下:

package com.mmall.common;

import com.mmall.util.PropertiesUtil;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
 * @author Chakid
 * @since 2018-10-30 20:15
 */
public class RedisPool {
    private static JedisPool pool; //jedis连接池

    //redis所在的IP
    private static String redisIp=PropertiesUtil.getProperty("redis.ip");

    //redis开放的端口
    private static Integer redisPort =Integer.parseInt(PropertiesUtil.getProperty("redis.port"));

    //jedis最大连接数
    private static Integer maxTotal= Integer.parseInt(PropertiesUtil.getProperty("redis.max.total","20"));

    //最大空闲连接数
    private static Integer maxIdle= Integer.parseInt(PropertiesUtil.getProperty("redis.max.idle","10"));

    //最小空闲连接数
    private static Integer minIdle= Integer.parseInt(PropertiesUtil.getProperty("redis.min.idle","2"));

    //从jedis连接池获取连接时,校验并返回可用的连接
    private static boolean testBorrow= Boolean.parseBoolean(PropertiesUtil.getProperty("redis.test.borrow","true"));

    //把连接放回jedis连接池时,校验并返回可用的连接
    private static boolean testReturn= Boolean.parseBoolean(PropertiesUtil.getProperty("redis.test.return","true"));


    //初始化连接池
    private static void initPool(){

        JedisPoolConfig config = new JedisPoolConfig();

        //给config set相关值
        config.setMaxTotal(maxTotal);
        config.setMaxIdle(maxIdle);
        config.setMinIdle(minIdle);
        config.setTestOnBorrow(testBorrow);
        config.setTestOnReturn(testReturn);

        //连接耗尽时,是否阻塞,false会抛出异常,true直到阻塞超时,默认为true
        config.setBlockWhenExhausted(true);

        pool = new JedisPool(config,redisIp,redisPort,1000*2);
    }


    //实例化连接池
    static {
        initPool();
    }

    //从连接池中获取一个连接对象
    public static Jedis getJedis(){
        return pool.getResource();
    }


    //如果是一个损坏连接就放在BrokenResource
    public static void returnBrokenResource(Jedis jedis){
        pool.returnBrokenResource(jedis);
    }

    //将jedis放回连接池
    public static void returnResource(Jedis jedis){
        pool.returnResource(jedis);
    }



    //用main测试我们的连接

    public static void main(String[] args) {
        Jedis jedis = pool.getResource();

        jedis.set("chakidkey","chakidvalue");

        returnResource(jedis);

        pool.destroy();

        System.out.println("program is end~");
    }

}

然后由于我是把配置信息单独配置多出来,如果只是单独测试 Jedis的连接的话,把我下面的对应参数填到上面即可~

#start redis config

#redis所在服务器IP
redis.ip=119.29.xx.xxx

#redis的端口
redis.port=6379

#最大连接数
redis.max.total=20

#最大空闲连接数
redis.max.idle=10

#最小空闲连接数
redis.min.idle=2

#从jedis连接池获取连接时,校验并返回可用的连接
redis.test.borrow=true

#把连接放回jedis连接池时,校验并返回可用的连接 return设置为false的时候,在并发量高的时候可以提高我们的并发效率
redis.test.return=false

#end redis config

相关代码的讲解都在注释中啦~
测试代码写好之后,接下来就是测试我们的连接了:
用Xshell连接我们的服务器,打开Redis服务


img_76439a0a12d034d6468ae56a1dcedc61.png
image.png

然后Xshell启动我们的连接客户端:

img_8ee5124ff21c82604527b050b68a3f73.png
image.png

发现原本存在一些,我先把里面的删掉,执行: flushall
img_c4bd9169f76aa60949c76b2700b72b12.png
image.png

好,发现所以key都被我们清空了,接下来就要运行我们上面编写的代码,直接运行 main函数即可~
OK,执行完毕,来看看我们的redis里面有没有我们刚才加的数据吧~
img_397d6900ea479115fc6547fbe5b9f115.png

咦,发现数据已经加进去了,那么测试也就成功啦~


img_ca2adbcc87e9cf187ecce086e7efc215.png
image.png
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
23天前
|
监控 jenkins 测试技术
自动化测试框架的构建与实践
【10月更文挑战第40天】在软件开发周期中,测试环节扮演着至关重要的角色。本文将引导你了解如何构建一个高效的自动化测试框架,并深入探讨其设计原则、实现方法及维护策略。通过实际代码示例和清晰的步骤说明,我们将一起探索如何确保软件质量,同时提升开发效率。
35 1
|
29天前
|
测试技术 开发者 Python
自动化测试之美:从零构建你的软件质量防线
【10月更文挑战第34天】在数字化时代的浪潮中,软件成为我们生活和工作不可或缺的一部分。然而,随着软件复杂性的增加,如何保证其质量和稳定性成为开发者面临的一大挑战。自动化测试,作为现代软件开发过程中的关键实践,不仅提高了测试效率,还确保了软件产品的质量。本文将深入浅出地介绍自动化测试的概念、重要性以及实施步骤,带领读者从零基础开始,一步步构建起属于自己的软件质量防线。通过具体实例,我们将探索如何有效地设计和执行自动化测试脚本,最终实现软件开发流程的优化和产品质量的提升。无论你是软件开发新手,还是希望提高项目质量的资深开发者,这篇文章都将为你提供宝贵的指导和启示。
|
2月前
|
缓存 Devops jenkins
专家视角:构建可维护的测试架构与持续集成
【10月更文挑战第14天】在现代软件开发过程中,构建一个可维护且易于扩展的测试架构对于确保产品质量至关重要。本文将探讨如何设计这样的测试架构,并将单元测试无缝地融入持续集成(CI)流程之中。我们将讨论最佳实践、自动化测试部署、性能优化技巧以及如何管理和扩展日益增长的测试套件规模。
53 3
|
20天前
|
jenkins 测试技术 持续交付
自动化测试框架的构建与优化:提升软件交付效率的关键####
本文深入探讨了自动化测试框架的核心价值,通过对比传统手工测试方法的局限性,揭示了自动化测试在现代软件开发生命周期中的重要性。不同于常规摘要仅概述内容,本部分强调了自动化测试如何显著提高测试覆盖率、缩短测试周期、降低人力成本,并促进持续集成/持续部署(CI/CD)流程的实施,最终实现软件质量和开发效率的双重飞跃。通过具体案例分析,展示了从零开始构建自动化测试框架的策略与最佳实践,包括选择合适的工具、设计高效的测试用例结构、以及如何进行性能调优等关键步骤。此外,还讨论了在实施过程中可能遇到的挑战及应对策略,为读者提供了一套可操作的优化指南。 ####
|
21天前
|
敏捷开发 监控 测试技术
探索自动化测试框架的构建与优化####
在软件开发周期中,自动化测试扮演着至关重要的角色。本文旨在深入探讨如何构建高效的自动化测试框架,并分享一系列实用策略以提升测试效率和质量。我们将从框架选型、结构设计、工具集成、持续集成/持续部署(CI/CD)、以及最佳实践等多个维度进行阐述,为软件测试人员提供一套系统化的实施指南。 ####
|
1月前
|
监控 安全 测试技术
构建高效的精准测试平台:设计与实现指南
在软件开发过程中,精准测试是确保产品质量和性能的关键环节。一个精准的测试平台能够自动化测试流程,提高测试效率,缩短测试周期,并提供准确的测试结果。本文将分享如何设计和实现一个精准测试平台,从需求分析到技术选型,再到具体的实现步骤。
105 1
|
2月前
|
NoSQL 测试技术 Redis
Redis 性能测试
10月更文挑战第21天
44 2
|
1月前
|
监控 安全 测试技术
构建高效精准测试平台:设计与实现全攻略
在软件开发过程中,精准测试是确保产品质量的关键环节。一个高效、精准的测试平台能够自动化测试流程,提高测试覆盖率,缩短测试周期。本文将分享如何设计和实现一个精准测试平台,从需求分析到技术选型,再到具体的实现步骤。
53 0
|
2月前
|
SQL 消息中间件 大数据
大数据-159 Apache Kylin 构建Cube 准备和测试数据(一)
大数据-159 Apache Kylin 构建Cube 准备和测试数据(一)
72 1
|
2月前
|
SQL 大数据 Apache
大数据-159 Apache Kylin 构建Cube 准备和测试数据(二)
大数据-159 Apache Kylin 构建Cube 准备和测试数据(二)
84 1