c# - Redis 服务器和连接多个客户端

标签 c# .net nosql redis

我有一个在 Windows 2008 机器上运行的 Redis 服务器。我有多个网站,每个网站都使用 BasicRedisClientManager。 这个实例在应用程序启动时设置一次,并设置到 Application[] 存储中。这样它就可以在所有用户中重复使用。我遇到的问题是一个站点在专用服务器上运行,而其他站点在运行 Redis 服务器的本地主机上运行。一个是生产,其他是新工作/演示的测试位置。远程客户端工作正常,但本地主机客户端不会与服务器通信,并且似乎处于锁定/死状态。当我运行该网站时,我只是遇到堆栈溢出,该网站会自行回收。下面是我的设置的一些示例代码。我看到有一些关于在客户端之间创建锁的信息,但我不确定这是否是我需要采取的路线。

http://www.servicestack.net/docs/redis-client/distributed-locking-with-redis

示例代码:

    protected override void Application_Start(object sender, EventArgs e)
    {
        /*
         * Create basicRedisClientManager for redis.
         */
        var redisHost = ConfigurationManager.AppSettings["RedisHostIp"].ToString();
        BasicRedisClientManager basicRedisClientManager = new BasicRedisClientManager(redisHost);
        Application["BasicRedisClientManager"] = basicRedisClientManager;

     .....
    }

然后在类构造函数中使用

    public CacheManager()
    {
        if (Application["BasicRedisClientManager"] != null)
        {
            /*local variable*/
            basicRedisClientManager = (BasicRedisClientManager)Application["BasicRedisClientManager"];
        }
    }

在类中使用管理器。

        if (basicRedisClientManager != null)
        {
            using (var redisClient = (RedisClient)basicRedisClientManager.GetClient())
            {
                if (!saveToInProcOnly && redisClient != null)
                {
                    using (var redis = redisClient.GetTypedClient<T>())
                    {
                        redis.SetEntry(key, value);
                    }
                }
            }
        }

此逻辑在所有网站上都是相同的。

非常感谢任何见解!

最佳答案

我不知道 BasicRedisClientManager 但我建议您使用 BookSleeve客户端库。关于连接重用,答案是不要重用。也就是说,正如 BookSleeve 的作者所建议的,每次需要时都重新创建连接。

请参阅this questionaccepted answer查看如何创建防弹 Redis 客户端连接。

关于c# - Redis 服务器和连接多个客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11006682/

相关文章:

c# - 不推荐使用 Device.OnPlatform

c# - 以管理员身份运行时,如何让 IEnumMoniker.Next 返回名字对象?

c# - 如何绕过 RhinoMocks 模拟中方法的执行?

nosql - 用于创建多个节点和关系的 Cypher 查询

database - Cassandra 2.0 中的有序模型

c# - 基于 sql server : . NET 中的两个字段不同

c# - 将 3D 点映射到 2D 上下文

c# - 我应该使用什么控件来显示动态数据(图片、名称等),例如 ASP.NET 上的 html 表?

c# - 如何以编程方式从 Windows Phone 访问 SMS 消息线程

database - 简单/智能,Pythonic 数据库解决方案,可以使用 Python 类型 + 语法吗? (Key/Value Dict, Array, maybe Ordered Dict)