首页 > 数据库 >Redis高并发超时问题

Redis高并发超时问题

时间:2024-10-25 18:33:48浏览次数:6  
标签:Redis redis 并发 static new 超时 RedisHelper

 

StackExchange.Redis 驱动有个超时问题,并发比较高的时候就会出现类似以下错误,比如开3000个线程:

 StackExchange.Redis.RedisConnectionException: It was not possible to connect to the redis server(s). Error connecting right now. To allow this multiplexer to continue retrying until it's able to connect, use abortConnect=false in your connection string or AbortOnConnectFail=false; in your code. 

 

可以通过在每次开启线程前先开启连接的方式解决,可以在应用启动的时候开启连接

 

public class RedisHelper
{
    private static ConnectionMultiplexer redis;
    private static readonly object Locker = new object();
    static RedisHelper()
    {
        if (redis == null || !redis.IsConnected)
        {
            lock (Locker)
            {
                if (redis == null || !redis.IsConnected)
                {
                    // 创建连接到Redis服务器的连接Multiplexer
                    redis = ConnectionMultiplexer.Connect("bj-crs-lcc2fhzg.sql.tencentcdb.com:26042,password = mango2024@");
                }

            }
        }
    }

    public static void Set(string key, string val, double time)
    {
        // 存储数据
        IDatabase db = redis.GetDatabase();
        TimeSpan? expiry = TimeSpan.FromMinutes(time); // 设置过期时间
        db.StringSet(key, val, expiry);
    }
}
View Code

如上redis帮助类在控制台程序开启线程前new一个实例就会开启连接,就不会出现超时错误,如果把new实例注释掉,就会出现超时。虽然不先实例化有静态构造函数理论上也只执行一次,但是在线程并发的情况下并未得到预期的效果,还是会报错

    internal class Program
    {
        static void Main(string[] args)
        {
            
            List<Task> tasks = new List<Task>();
            ConcurrentQueue<string> cons = new ConcurrentQueue<string>();
            int j = 0;
            //RedisHelper redisHelper = new RedisHelper();//开启线程前需要先实例化一下,否则会出现超时问题,这句注释掉则会超时,不注释则不超时,可以很快的查数据,Web可以在Global,Application_Start方法先初始化
            for (int i = 0; i < 60000; i++)
            {
                
                    var t =Task.Run(( ) =>
                    {
                        j++;
                        Console.WriteLine(j);
                        try
                        {
                            RedisHelper.Set("str1", "str1", 2880);
                        }
                        catch (Exception e)
                        {

                            Console.WriteLine(e);
                        }
                    }
);
                tasks.Add(t);



            }

            Task.WaitAll(tasks.ToArray());

            Console.ReadLine();
        }
    }
View Code

 

标签:Redis,redis,并发,static,new,超时,RedisHelper
From: https://www.cnblogs.com/lidaying5/p/18503078

相关文章

  • Redis
    常见面试题:Redis简介为什么要用Redis?Redis的优点Redis的应用场景LinuxCentos7安装Redis与Window10安装RedisRedis客户端介绍与使用Redis核心配置文件详解RedisKey命名规范Redis最常用的5种数据类型及其对应的命令Redis的性能测1什么是Redis?Redis是一个由C语言编......
  • go微服务介绍【负载均衡,主从数据库,微服务架构】【实现了:高并发,语言之间互通】
    1.go单体架构程序一天访问量5万以下没问题2.使用负载均衡:单体架构的程序部署在多台服务器,可实现每天几十万的访问量3.如果是几百万或上前万的访问量,数据库也需要扩展,用到主从数据库4.当每天有上亿访问量,或者更高并发量的时候,上面的方法就有点力不存心了,这个时候我们就可以使......
  • actix_web操作redis
    tomlactix-web="4"redis={version="0.21.4",features=["r2d2"]}r2d2="0.8.9"r2d2_redis="0.14.0"uuid={version="0.8",features=["v4"]}with_r2d2.rsuseredis::Comm......
  • Redis运维常用命令(持续更新)
    查看连接clientlist身份认证authpassword获取慢查询##结果为查询ID、发生时间、运行时长和原命令默认10毫秒,默认只保留最后的128条。单线程的模型下,一个请求占掉10毫秒是件大事情,注意设置和显示的单位为微秒,注意这个时间是不包含网络延迟的。SLOWLOGGET10##获取慢......
  • 场景题:百万数据插入Redis有哪些实现方案?
    在面试的过程当中,偶尔会遇到一些场景题,虽然这些场景题归根到底还是技术问题,但他通常比常规的八股题要稍微难一些,因为他考验的是你对于技术的整体理解、应用,以及变通的能力。那么今天咱们就来看一道,在面试中国平安时遇到的一道场景题:将百万数据插入到Redis,有哪些实现方案?1.Redis......
  • 并发和并行的区别
    在计算机科学中,”并发”和”并行”是两个关键概念,常常被误用或混淆。本文将详细解释并发和并行之间的区别,探讨它们的定义、应用场景以及如何在编程和计算领域中加以利用。1.定义并发:并发是指在同一时间段内,系统同时管理多个任务,但不一定同时执行它们。在并发中,任务可以在一段......
  • 如何将GB28181/GB35114流媒体监控视频汇聚平台LiveGBS中自带的redis组件换成自己的Red
    @目录1、Redis服务2、如何切换REDIS?2.1、停止启动REDIS2.2、配置信令服务2.3、配置流媒体服务2.4、启动3、搭建GB28181视频直播平台1、Redis服务在LivGBS中Redis作为数据交换、数据订阅、数据发布的高速缓存服务。默认LiveCMS解压目录下会携带一个REDIS服务。如果已经有自己的r......
  • redis迁移 redis-dump和redisshake
    redis-dump从a服务器redis1号库迁移到b服务器redis的1号库(网络不互通)ruby版本有要求,我服务器报错2.7.8以上1.安装需要的依赖yuminstallrubyrubygemsruby-devel-y2.配置秘钥curl-sSLhttps://rvm.io/mpapis.asc|gpg2--import-curl-sSLhttps://rv......
  • Redis 厨神:用 StringRedisTemplate 轻松获取数据的秘笈
    前言在这个快节奏的时代,数据处理就像烹饪,既需要精准的配料,又需要高超的烹饪技巧。想象一下,你在厨房里忙得不可开交,却被突如其来的订单搞得手忙脚乱。今天,我们要揭开如何用StringRedisTemplate轻松获取数据的秘密,让你在SpringBoot3.x的世界里,摇身一变,成为Redis的厨房大......
  • 鸿蒙编程江湖:ArkTS中Sendable数据在并发实例间的传递
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。Sendable是ArkTS中用于实现数据在并......