Tag: redis

在反序列化JSON String期间处理名称空间更改

我有2个应用程序在redis服务器的帮助下相互通信,在我的第一个应用程序中,我能够序列化和反序列化以及以下类型的对象 { “$type”: “System.Collections.Generic.Dictionary`2[[System.Int32, mscorlib], [OPCMessagingService.Resource, OPCMessagingService]], mscorlib”, “71”: { “$type”: “OPCMessagingService.Resource, OPCMessagingService”, “SiteID”: 2, “ResourceID”: 71, “ProcessOrder”: “001000380873”, “CurrentStatus”: 0, “CycleTime”: 55, “DeviceList”: [ { “$type”: “OPCMessagingService.StackLight, OPCMessagingService”, “ResourceId”: 71, “DeviceIp”: “10.142.117.7”, “ComPort”: “COM14” }, { “$type”: “OPCMessagingService.LED, OPCMessagingService”, “ResourceId”: 71, “DeviceIp”: “10.142.117.3”, “ComPort”: “COM10”, “IsMessageDelivered”: false, “RetryCount”: 3, “IsRetryRequired”: true, “_messageHeader”: “:*HF601011471”, “_messageText”: […]

Redis Expire不起作用

我使用ServiceStack.Redis(从最新的源代码构建: https : //github.com/ServiceStack/ServiceStack.Redis/tree/master/src )。 我做这样的事情: CacheRecord foundKey = cacheRecords.GetById(p_sParentKey); … CacheRecord cacheRecord = cacheRecords.Store(foundKey); … redisClient.Expire(p_sParentKey, validityPeriodInMinutes * 60); 我尝试使用Console.WriteLine(cacheRecords.GetTimeToLive(p_sParentKey));进行调试Console.WriteLine(cacheRecords.GetTimeToLive(p_sParentKey)); 返回-00:00:01 。 我分配给validityPeriodInMinutes的值是无关紧要的。 我试过Expire , ExpireAt , ExpireEntryAt , ExpireEntryIn 。 我也试过这样的事情: int epoch = (int)(DateTime.UtcNow.AddSeconds(validityPeriodInMinutes) – new DateTime(1970, 1, 1)).TotalSeconds; redisClient.ExpireAt(p_sParentKey, epoch); 任何的想法? [Serializable] public class CacheRecord { public CacheRecord() { this.Children = […]

使用StackExchange.Redis的Redis键空间通知

我环顾四周,我无法找到如何使用StackExchange.Redis库在Redis上执行键空间通知订阅。 检查可用的测试我发现使用频道的pubsub,但这更像是服务总线/排队,而不是订阅特定的Redis键事件。 是否可以使用StackExchange.Redis利用此Redisfunction?

使用C#中的StackExchange / Sentinel进行Redis故障转移

我们目前正在使用Redis 2.8.4和StackExchange.Redis(并且喜欢它),但目前还没有任何针对硬件故障等的保护。 我正在努力让解决方案正常工作,我们有主/从和监控但不能完全到达那里,我在搜索后找不到任何真正的指针。 所以目前我们已经做到了这一点: 我们在每个节点上有3个redis服务器和sentinel(由Linux人员设置):devredis01:6383(master)devredis02:6383(slave)devredis03:6383(slave)devredis01:26379(sentinel)devredis02:26379(sentinel)devredis03: 26379(哨兵) 我能够将StackExchange客户端连接到redis服务器并进行写入/读取,并使用Redis Desktop Managervalidation是否正在跨所有redis实例复制数据。 我也可以使用不同的ConnectionMultiplexer连接到sentinel服务,查询配置,请求主redis节点,请求奴隶等。 我们还可以终止主redis节点并validation其中一个从属是否被提升为主节点,并且复制到另一个从节点继续工作。 我们可以观察redis连接尝试重新连接到主设备,并且如果我重新创建ConnectionMultiplexer,我可以再次写入/读取新升级的主设备并从从设备读取。 到现在为止还挺好! 我缺少的是你如何在生产系统中将它们整合在一起? 我应该从sentinel获取redis端点并使用2个ConnectionMultiplexers吗? 我究竟需要做些什么来检测节点是否已关闭? StackExchange可以自动为我执行此操作还是通过事件,以便重新连接我的redis ConnectionMultiplexer? 我应该处理ConnectionFailed事件然后重新连接,以便ConnectionMuliplexer找出新主设备是什么? 据推测,当我重新连接时,任何写入的尝试都将丢失? 我希望我不会错过一些非常明显的东西,我只是在努力将它们放在一起。 提前致谢!

StackExchange.Redis和ServiceStack.Redis之间的区别

有人可以解释一下ServiceStack.Redis和StackExchange.Redis c#库的区别吗?

这是ServiceStack Redis的有效用法吗?

我是Redis的新手(在托管服务中使用它),并希望将其用作列表的演示/沙箱数据存储。 我使用下面的代码。 这个对我有用。 但对于一个拥有多个(最多100个)并发用户(对于少量数据 – 最多1000个列表项)的小型网站来说,这是一种有效(而非完全不好的做法)用法吗? 我正在使用静态连接和静态redisclient类型列表,如下所示: public class MyApp { private static ServiceStack.Redis.RedisClient redisClient; public static IList Persons; public static IRedisTypedClient PersonClient; static MyApp() { redisClient = new RedisClient(“nnn.redistogo.com”, nnn) { Password = “nnn” }; PersonClient = redisClient.GetTypedClient(); Persons = PersonClient.Lists[“urn:names:current”]; } } 这样做我有一个非常容易使用的持久数据列表,这正是我在构建/演示应用程序的基本块时所需要的。 foreach (var person in MyApp.Persons) … 添加新人: MyApp.Persons.Add(new Person { […]

使用BookSleeve维护打开的Redis连接

有没有人有通过BookSleeve库获取Redis的可靠模式? 我的意思是: BookSleeve的作者@MarcGravell 建议不要每次都打开和关闭连接,而是在整个应用程序中保持一个连接。 但是你怎么能处理网络中断? 即,连接可能首先成功打开,但是当某些代码尝试读取/写入Redis时,连接可能已经丢失,您必须重新打开它(如果它不能打开,则会正常失败 – 但是这取决于您的设计需求。) 我寻找覆盖一般Redis连接开放的代码片段,以及在每次读/写之前使用的一般“活动”检查(+可选唤醒,如果不活动)。 这个问题表明对这个问题有一个很好的态度,但它只是部分的(例如,它没有恢复丢失的连接),并且该问题的接受答案采用正确的方式,但没有展示具体的代码。 我希望这个主题得到可靠的答案,并最终成为一个关于BookSleeve在.Net应用程序中使用的Wiki。 —————————– 重要更新(2014年3月21日): —————————– Marc Gravell(@MarcGravell)/ Stack Exchange 最近发布了StackExchange.Redis库,最终取代了Booksleeve。 除了别的以外,这个新的库在内部处理重新连接并使我的问题变得多余(也就是说,它对于Booksleeve并不是多余的,我的答案也不在下面,但我想最好的方法是开始使用新的StackExchange.Redis库)。