多次访问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
目录
相关文章
|
23天前
|
NoSQL Redis 数据库
Redis 连接
10月更文挑战第19天
27 0
|
21天前
|
NoSQL 网络协议 算法
Redis 客户端连接
10月更文挑战第21天
26 1
|
7天前
|
NoSQL 编译器 Linux
【赵渝强老师】Redis的安装与访问
本文基于Redis 6.2版本,详细介绍了在CentOS 7 64位虚拟机环境中部署Redis的步骤。内容包括安装GCC编译器、创建安装目录、解压安装包、编译安装、配置文件修改、启动服务及验证等操作。视频讲解和相关图片帮助理解每一步骤。
|
2月前
|
存储 缓存 NoSQL
Redis 大 Key 对持久化的影响及解决方案
Redis 大 Key 对持久化的影响及解决方案
45 1
|
2月前
|
存储 缓存 NoSQL
Redis中大Key与热Key的解决方案
在工作中,Redis作为一款高性能缓存数据库被广泛应用,但常遇到“大key”和“热key”问题。“大key”指单个键包含大量数据,导致内存消耗高、性能下降及持久化效率降低;“热key”则是频繁访问的键,会引起CPU占用率高、请求阻塞等问题。本文详细分析了这些问题的定义、影响、原因,并提供了相应的解决方案,如合理设置缓存时间和数据结构、拆分大key、采用热点数据分片等方法。
232 4
Redis中大Key与热Key的解决方案
|
2月前
|
NoSQL Linux Redis
linux安装单机版redis详细步骤,及python连接redis案例
这篇文章提供了在Linux系统中安装单机版Redis的详细步骤,并展示了如何配置Redis为systemctl启动,以及使用Python连接Redis进行数据操作的案例。
68 2
|
3月前
|
NoSQL 网络协议 Redis
【Azure Redis】AKS中使用Lettuce连接Redis Cache出现 timed out 问题的解决思路
【Azure Redis】AKS中使用Lettuce连接Redis Cache出现 timed out 问题的解决思路
【Azure Redis】AKS中使用Lettuce连接Redis Cache出现 timed out 问题的解决思路
|
1月前
|
安全 NoSQL 网络安全
漏洞检测与防御:Redis未授权访问漏洞复现
漏洞检测与防御:Redis未授权访问漏洞复现
|
3月前
|
NoSQL 算法 Java
诡异!Redis Proxy RT上升后连接倾斜
本文细致地描述了关于Redis Proxy RT上升后连接倾斜问题的排查过程和根本原因,最后给出了优化方案。
|
1月前
|
消息中间件 缓存 NoSQL
Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
74 6