Tag: redis stackexchange.redis

StackExchange.Redis:获取频道订阅的数量(即PUBSUB NUMSUB)

有没有办法通过StackExchange.Redis库获取特定Redis频道的频道订阅数量? 当直接与Redis交互时,它可以使用PUBSUB NUMSUB命令( http://redis.io/commands/pubsub )但我没有看到C#客户端库中的等效调用。

Azure Redis无法连接到Redis服务器

我正在使用StackExchange.Redis.StrongName 1.0.394我正在尝试连接到我的Azure Redis,但是当我运行我的项目时,我一直收到此错误: RedisConnectionException: It was not possible to connect to the redis server(s); to create a disconnected multiplexer, disable AbortOnConnectFail. SocketFailure on PING 奇怪的是,如果我使用StackExchange.Redis 1.0.394一切正常,但我需要StrongName版本才能使用RedisSessionStateProvider。 以下是连接Redis的代码: private static ConnectionMultiplexer Connection { get { if (_connection == null || !_connection.IsConnected) { var config = new ConfigurationOptions(); config.EndPoints.Add(“myredisname.redis.cache.windows.net”); config.Password = “myverylongkey”; //in ms config.SyncTimeout = 5000; […]

Stackexchange.Redis超时和socketfailures

我使用Azure Redis(使用Stackexchange.Redis)作为缓存存储,它通常工作正常。 但是我偶尔会遇到超时错误,我无法确定它为什么会发生。 我的redis连接设置: value=”dev.redis.cache.windows.net,ssl=true,password=secret,abortConnect=false,syncTimeout=3000″ 我在同一秒(多次调用)中得到所有这些exception:[我在GET操作上也得到了这些。 几乎所有这些exception都在StringSet和StringGet上。 我很少在HashSets或HashGets上获得例外] Timeout performing SET {key}, inst: 1, mgr: ExecuteSelect, queue: 6, qu=0, qs=6, qc=0, wr=0/0, in=0/0 SocketFailure on SET SocketFailure on SET No connection is available to service this operation: SET 我猜测设置对象花费的时间比预期的要长,这可能是由于对象很大所以我可能会增加同步时间,但这会隐藏其他一些问题吗? 我只是在对stackexchange.redis的同步调用中得到这些exception,当调用异步时我没有看到exception。 堆栈跟踪: StackExchange.Redis.RedisConnectionException: SocketFailure on SET at StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl[T](Message message, ResultProcessor`1 processor, ServerEndPoint server) i at StackExchange.Redis.RedisBase.ExecuteSync[T](Message […]

使用StackExchange.Redis并行执行?

我在List有一个1M项目存储,我要序列化以便插入Redis。 (2.8) 我将工作分成10 Tasks ,其中每个Tasks都有自己的部分( List是readonly的线程安全 ( 在List上执行多个读操作是安全的 ) 简化: 例: 对于ITEMS=100 , THREADS=10 ,每个Task将捕获其自己的PAGE并处理相关范围。 对于exaple: void Main() { var ITEMS=100; var THREADS=10; var PAGE=4; List lst = Enumerable.Range(0,ITEMS).ToList(); for (int i=0;i< ITEMS/THREADS ;i++) { lst[PAGE*(ITEMS/THREADS)+i].Dump(); } } PAGE=0将处理: 0,1,2,3,4,5,6,7,8,9 PAGE=4将处理: 40,41,42,43,44,45,46,47,48,49 一切都好。 现在回到SE.redis。 我想实现这种模式,所以我做了 🙁 ITEMS=1,000,000 ) 我的测试: (这是每秒检查的dbsize ): 如您所见,通过10个线程添加了1M记录。 现在,我不知道它是否很快但是,当我将ITEMS从1M改为10M – 事情变得非常缓慢并且我得到例外: […]

ConnectionMultiplexer如何处理断开连接?

StackExchange.Redis的基本用法文档解释了ConnectionMultiplexer是长期使用的,并且有望重用。 但是什么时候与服务器的连接被打破了? ConnectionMultiplexer是否自动重新连接,或者是否有必要像在此答案中那样编写代码(引用该答案): if (RedisConnection == null || !RedisConnection.IsConnected) { RedisConnection = ConnectionMultiplexer.Connect(…); } RedisCacheDb = RedisConnection.GetDatabase(); 以上代码是否适合处理断开连接的恢复,或者它实际上会导致多个ConnectionMultiplexer实例? 同样, IsConnected属性应该如何解释? [旁白:我相信上面的代码是一种非常糟糕的延迟初始化forms,特别是在multithreading环境中 – 参见Jon Skeet关于Singletons的文章 ]。

Redis通过锁定分布增量

我需要生成一个计数器,它将被发送到一些api调用。 我的应用程序在多个节点上运行,所以我想要生成一个独特的计数器。 我试过以下代码 public static long GetTransactionCountForUser(int telcoId) { long valreturn = 0; string key = “TelcoId:” + telcoId + “:Sequence”; if (Muxer != null && Muxer.IsConnected && (Muxer.GetDatabase()) != null) { IDatabase db = Muxer.GetDatabase(); var val = db.StringGet(key); int maxVal = 999; if (Convert.ToInt32(val) < maxVal) { valreturn = db.StringIncrement(key); } else { […]

如何在Redis缓存中存储列表元素

我已经将StackExchange.Redis用于c#redis缓存。 cache.StringSet(“Key1”, CustomerObject); 但我想存储数据 cache.StringSet(“Key1”, ListOfCustomer); 这样一个密钥就可以存储所有客户列表,并且很容易在该列表中搜索,分组,过滤客户数据 欢迎使用ServiceStack.Redis或StackExchange.Redis

Redis Stack Exchange如何通过模式删除或获取密钥

我在C#中安装了Stack Exchange redis客户端。 我只能删除一个键或一组键,但我不知道如何删除带前缀的键。 或者另一种解决方案可以是先按模式获取所有密钥然后删除它们。 但我不知道如何按模式获取密钥。

异步命令和Task.WhenAny等待StackExchange.Redis中的超时exception

我正在经历所谓的Timeout执行HGET公司:产品:设置,inst:1,队列:8,qu = 0,qs = 8,qc = 0,wr = 0/0,in = 79/1超时exception。 这很奇怪,因为相同的Redis实例和同一台机器存储数据,但它是一个抛出此exception的特定应用程序。 更新:事实上,同一个应用程序,上面一行从Redis接收数据。 问题出在HGET 。 此外,我将多路复用器配置的超时时间增加到6秒,没有运气。 另外,我已经检查过IDatabase实例的IsConnected为true值。 如何解释这些错误消息以及整个超时背后的问题是什么? 一些背景…… 当一些代码段获取数据库 (即multiplexer.GetDatabase() ) 时,我已经成功修复了问题。 虽然多路复用器每个AppDomain都有一个实例,如StackExchange.Redis文档中所述,但许多控制组件的反转都在自己的代码中创建了许多IDatabase实例。 也就是说,不共享IDatabase实例。 实际代码正在执行ListRightPopLeftPush ,之后,它实例化控件组件的反转,该组件在组件实例化期间读取哈希键。 如果在执行所谓的ListRightPopLeftPush之前实例化整个组件,则整个HashGet不会抛出超时exception。 看起来即使从其他ListRightPopLeftPush实例执行ListRightPopLeftPush ,它在执行读取操作时会在下一个ListRightPopLeftPush实例中产生某种问题。 无论如何,我的修复不回答这个问题。 我刚刚添加了更详细的信息,让我们找到问题所在和自己的解决方案。 更新 无论如何,上面的“修复”不会修复对Redis的进一步读取访问。 我在进一步的调用中得到了相同的超时exception。 现在in在exception的消息中发现的参数为60/1 。