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

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
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
目录
相关文章
|
24天前
|
NoSQL Linux Redis
每天百万访问也不怕,Redis帮你搞定UV统计
本文介绍了使用Redis实现高性能UV统计系统的方法。Redis凭借其内存数据库特性,支持毫秒级响应和自动去重,非常适合高并发场景下的访客统计。核心思路是利用Redis的Set数据结构作为"每日签到墙",通过记录用户访问ID实现自动去重,并设置24小时过期时间。文章提供了Python代码示例,展示如何记录用户访问和获取当日UV统计数据,还可扩展实现多页面UV统计。相比传统数据库方案,Redis方案更加轻量高效,是中小型网站实现流量统计的理想选择。
96 0
|
7月前
|
NoSQL 应用服务中间件 API
Redis是如何建立连接和处理命令的
本文主要讲述 Redis 是如何监听客户端发出的set、get等命令的。
1439 160
|
9月前
|
NoSQL Redis 数据库
Redis 连接
10月更文挑战第19天
91 0
|
5月前
|
消息中间件 存储 NoSQL
java连接redis和基础操作命令
通过以上内容,您可以掌握在Java中连接Redis以及进行基础操作的基本方法,进而在实际项目中灵活应用。
249 30
|
8月前
|
监控 NoSQL 网络协议
【Azure Redis】部署在AKS中的应用,连接Redis高频率出现timeout问题
查看Redis状态,没有任何异常,服务没有更新,Service Load, CPU, Memory, Connect等指标均正常。在排除Redis端问题后,转向了AKS中。 开始调查AKS的网络状态。最终发现每次Redis客户端出现超时问题时,几乎都对应了AKS NAT Gateway的更新事件,而Redis服务端没有任何异常。因此,超时问题很可能是由于NAT Gateway更新事件导致TCP连接被重置。
133 7
|
8月前
|
消息中间件 监控 NoSQL
Redis脑裂问题详解及解决方案
Redis脑裂问题是分布式系统中常见的复杂问题,合理配置Redis Sentinel、使用保护模式、采用分布式锁机制以及优化网络和客户端连接策略等措施,可以有效预防和解决脑裂问题。通过深入理解Redis脑裂问题的成因和影响,采取相应的解决方案,能够提高系统的可用性和数据一致性,保障Redis集群的稳定运行。希望本文能帮助你更好地理解和应对Redis脑裂问题。
555 2
|
8月前
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
144 5
|
9月前
|
NoSQL 网络协议 算法
Redis 客户端连接
10月更文挑战第21天
118 1
|
8月前
|
NoSQL 编译器 Linux
【赵渝强老师】Redis的安装与访问
本文基于Redis 6.2版本,详细介绍了在CentOS 7 64位虚拟机环境中部署Redis的步骤。内容包括安装GCC编译器、创建安装目录、解压安装包、编译安装、配置文件修改、启动服务及验证等操作。视频讲解和相关图片帮助理解每一步骤。
140 0
|
2月前
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?

热门文章

最新文章