多次访问redis造成redis连接断开的解决方案

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 多次访问redis造成redis连接断开的解决方案

创建一个数组存储redis链接,失效自动创建加入数组,

 

附上代码一段简单代码,欢迎吐槽

 

package test;
 
import java.util.Random;
 
import redis.clients.jedis.Jedis;
 
public class RedisArrayUtil {
    private static Jedis[] jedisArray;
    private static int jedisArraySize;
    private static String jedisHost;
    private static int jedisPort;
    private static Random random = new Random();
 
    private RedisArrayUtil(int jedisArraySize, String jedisHost, int jedisPort) {
        this.jedisArraySize = jedisArraySize;
        this.jedisHost = jedisHost;
        this.jedisPort = jedisPort;
        jedisPool();
    }
 
    @SuppressWarnings("resource")
    public static void jedisPool() {
        jedisArray = new Jedis[jedisArraySize];
        for (int i = 0; i < jedisArraySize; i++) {
            Jedis jedis = new Jedis(jedisHost, jedisPort);
            if (jedis.ping().equals("PONG")) {
                jedisArray[i] = jedis;
            } else {
                jedis = new Jedis(jedisHost, jedisPort);
                jedisArray[i] = jedis;
            }
        }
    }
 
    public Jedis getConnection() {
        int randomCount;
        Jedis jedis;
        while (true) {
            randomCount = random.nextInt(jedisArraySize - 1);
            jedis = jedisArray[randomCount];
            if (jedis.ping().equals("PONG")) {
                break;
            } else {
                delete(randomCount, jedisArray);
                addJedis();
            }
        }
        return jedis;
    }
 
    /** @param 删除数组指定位 */
    public Jedis[] delete(int index, Jedis array[]) {
        Jedis[] jedisArrayNew = new Jedis[array.length - 1];
        for (int i = 0; i < jedisArrayNew.length - 1; i++) {
            if (i < index) {
                jedisArrayNew[i] = array[i];
            } else {
                jedisArrayNew[i] = array[i + 1];
            }
        }
        return jedisArrayNew;
    }
 
    public void addJedis() {
        @SuppressWarnings("resource")
        Jedis jedis = new Jedis(jedisHost, jedisPort);
        while (true) {
            if (jedis.ping().equals("PONG")) {
                jedisArray[jedisArraySize] = jedis;
                break;
            }
        }
    }
 
    public static void main(String[] args) {
        RedisArrayUtil redisArrayUtil = new RedisArrayUtil(10, "127.0.0.1",
                6379);
        Jedis jedis = redisArrayUtil.getConnection();
        for (int i = 0; i < 10; i++) {
            System.out.println(redisArrayUtil.getConnection());
        }
        
    }
}
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
8天前
|
NoSQL 关系型数据库 Redis
Docker的通俗理解和通过宿主机端口访问Redis容器的实例
本文目标:引导初学者入门Docker,理解镜像、容器和宿主机概念,学习常用Docker命令,特别是如何创建并从Redis容器通过宿主机端口访问。 关键点: - Docker核心:镜像(类)、容器(实例)、宿主机(运行环境)。 - `docker pull` 拉取镜像,如 `redis:3.0`。 - `docker run -d --name` 后台运行容器,如 `my-redis`。 - `-p` 参数做端口映射,如 `6379:6379`。 - `docker exec -it` 交互式进入容器,如 `bash` 或执行命令。
|
4天前
|
NoSQL Go Redis
如何使用 Go 和 `go-redis/redis` 库连接到 Redis 并执行一些基本操作
如何使用 Go 和 `go-redis/redis` 库连接到 Redis 并执行一些基本操作
8 1
|
6天前
|
存储 缓存 NoSQL
Redis是一种高性能的内存数据库,常用于高并发环境下的缓存解决方案
【6月更文挑战第18天】**Redis摘要:** 高性能内存数据库,擅长高并发缓存。数据存内存,访问迅速;支持字符串、列表等多元数据类型;具备持久化防止数据丢失;丰富命令集便于操作;通过节点集群实现数据分片与负载均衡,增强可用性和扩展性。理想的缓存解决方案。
22 1
|
14天前
|
分布式计算 NoSQL 大数据
MaxCompute产品使用合集之自定义udf连接云上vpc网络的redis获取数据的步骤是什么
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
13天前
|
DataWorks NoSQL Java
DataWorks操作报错合集之数据集成使用公共数据集成资源组写入到redis数据源(使用的是VPC连接),提示以下错误:request action:[InnerVpcGrantVpcInstanceAccessToApp], message:[InvalidInstanceId.怎么解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
17天前
|
NoSQL Redis
|
5天前
|
NoSQL 网络安全 Redis
redis未授权访问利用汇总
redis未授权访问利用汇总
|
13天前
|
NoSQL 关系型数据库 Serverless
Serverless 应用引擎产品使用合集之连接RDS、Redis等数据库时,是否需要通过安全组来控制访问权限
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
1月前
|
NoSQL Linux Redis
Redis -- 安装客户端redis-plus-plus
Redis -- 安装客户端redis-plus-plus
55 0
|
6天前
|
NoSQL Redis Windows
win10下Redis安装、启动教程
win10下Redis安装、启动教程
16 2