- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我尝试使用 RedisPubSubServer 但它不适用于关键通知,因为我需要订阅由模式指定的 channel 。所以我创建了自己的解决方案:
public class RedisKeySubscriber
{
public string Host { get; private set; }
public int Port { get; private set; }
private readonly Dictionary<string, IRedisSubscription> _subscriptions;
public RedisKeySubscriber(string host, int port)
{
Host = host;
Port = port;
_subscriptions = new Dictionary<string, IRedisSubscription>();
}
public void Subscribe(string key, Action<string, string> handler)
{
lock (_subscriptions)
{
IRedisSubscription subscription;
if (_subscriptions.TryGetValue(key, out subscription))
return;
// FIXME this might potentially create too many threads
var client = new ServiceStack.Redis.RedisClient(Host, Port);
subscription = client.CreateSubscription();
subscription.OnMessage = handler;
_subscriptions.Add(key, subscription);
new Thread(() => subscription.SubscribeToChannelsMatching(key)).Start();
}
}
public void Unsubscribe(string key)
{
lock (_subscriptions)
{
IRedisSubscription subscription;
if (!_subscriptions.TryGetValue(key, out subscription))
return;
subscription.UnSubscribeFromChannelsMatching(key);
_subscriptions.Remove(key);
}
}
public void UnsubscribeAll()
{
lock (_subscriptions)
{
foreach (var subscription in _subscriptions)
subscription.Value.UnSubscribeFromChannelsMatching(subscription.Key);
_subscriptions.Clear();
}
}
public void Dispose()
{
UnsubscribeAll();
}
}
我意识到这卡在 PSUBSCRIBE 命令上。其他一切都很好。有什么想法吗?
最佳答案
我使用额外的“控制” channel 解决了这个问题。因此,处理程序既订阅了与“key”匹配的 channel ,也订阅了像“CHCTRL:guid”这样的 channel ,其中 guid 是由类实例创建的特定 GUID。取消订阅函数在 CHCTRL:guid 上发布一条消息,处理程序可以理解是时候取消订阅了,因为消息不是来自“ key ”。
替代和建议的解决方案是不使用 ServiceStack.Redis。
关于c# - ServiceStack.Redis.RedisClient 取消订阅函数挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30037721/
我在 Scala 中使用游戏框架。我还使用 RedisScala 驱动程序(这个 https://github.com/etaty/rediscala )与 Redis 通信。如果 Redis 不包含
我正在尝试通过 Redis 与 Django 和 Node.js 进行通信,但是当我尝试在 Node.js 中获取 on('message') 事件时,我收到了该事件 2 次... 我有这个: io.
我的排序命令是 “按 no_keys GET # GET msg:->msg GET msg:->count GET msg:*->comments” 它在 redis-cli 中工作正常,但在 Re
redisClient.get('abc', function(err, abcValue){ console.log(abcValue); abcValue = abcValue + 'id';
我尝试使用 RedisPubSubServer 但它不适用于关键通知,因为我需要订阅由模式指定的 channel 。所以我创建了自己的解决方案: public class RedisKeySubscr
这是关于 RedisClient ,这是一个 C++ 客户端。 我知道您不能在 Redis 中存储整数(在内部转换)。 RedisSyncClient::command 本身不支持整数,因为 Redi
我正在尝试使用 ServiceStack.Redis 库连接到 Redis,但出于某种原因,我无法创建 RedisClient 类的实例,无论何时创建。 . RedisClient redisClie
带有 IncrementKey 的 ActionSuccess 回调在事务中不起作用: public class Article { public long Id { get; set; }
我正在尝试实现事务性 StoreRelatedEntities。所以我需要从 ITypedRedisClient 或这个访问 RedisClient: using (var trans1 = redi
我正在使用 nekipelov/redisclient访问 Redis,我需要通过一次调用 Redis 来检索多个哈希数据以提高性能。 更具体地说,我正在尝试检索如下所示的多个哈希值: redis-c
public class MyEntity { public string Att1 { get; set; } public DateTime Att2 { get; set; }
我是一名优秀的程序员,十分优秀!