小编ale*_*exx的帖子

StackExchange Redis在使用异步插入/读取数据时丢失了一些键

我相信我们在这里缺少一些非常重要的东西,所以希望有人可以指出我正确的方向.先感谢您 :)

我们目前遇到的问题:有时异步操作(读取)不会从通过异步操作写入的db返回我们的哈希值.例如,一次操作可以返回600个键,下一次键的数量可以是598,下一个是596,依此类推.我们也遇到了与短集相同的问题(当我们在集合中有多达10个键并且在批处理中读取10个哈希对象时:有时我们可以获得8个对象,有时是6个,一旦我们只得到2个.我们遇到了异步方法问题大约30-40%的运营,迁移到同步操作解决了一些情况 - 我们已经失去了性能.

我们的创建/读取批处理操作的示例

protected void CreateBatch(Func<IBatch, List<Task>> action)
    {
        IBatch batch = Database.CreateBatch();

        List<Task> tasks = action(batch);

        batch.Execute();

        Task.WaitAll(tasks.ToArray());
    }

    protected IEnumerable<T> GetBatch<T, TRedis>(
        IEnumerable<RedisKey> keys, 
        Func<IBatch, RedisKey, Task<TRedis>> invokeBatchOperation, 
        Func<TRedis, T> buildResultItem)
    {
        IBatch batch = Database.CreateBatch();
        List<RedisKey> keyList = keys.ToList();
        List<Task> tasks = new List<Task>(keyList.Count);
        List<T> result = new List<T>(keyList.Count);

        foreach (RedisKey key in keyList)
        {
            Task task = invokeBatchOperation(batch, key).ContinueWith(
                t =>
                    {
                        T item = buildResultItem(t.Result);
                        result.Add(item);
                    });

            tasks.Add(task);
        }

        batch.Execute();
        Task.WaitAll(tasks.ToArray());

        return …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous azure redis stackexchange.redis

6
推荐指数
1
解决办法
1146
查看次数

redis 2.8.7 forine的sentinel环境配置问题,如何让它自动启动,他们应该订阅什么?

现在我们尝试使用redis 2.8.7作为缓存存储(来自使用booksleeve客户端的.NET Web应用程序).目前这似乎是非常有趣和令人兴奋的任务,redis文档非常好,但是由于缺乏实际的实践经验,我确实有一些关于如何正确完成预期配置的问题.

我把下一篇文章作为主要配置源:

  1. 使用自动启动功能安装redis(使用init脚本,以便在重新启动后一切都将正常启动):http://redis.io/topics/quickstart
  2. 将redis部署到azure:http://haishibai.blogspot.com/2014/01/walkthrough-setting-up-redis-cluster-on.html

最初的想法/假设 - 是使用Linux Ubuntu运行1个redis master和2个slave实例.为了提供实例的高可用性 - 我决定使用sentinel.所以我的预期配置目前看起来像这样:

  1. MasterInstance:VM1(linux,Ubuntu),端口:6379(重启linux时自动启动)
  2. Slave1:VM2(linux,ubuntu),端口:6380(重启linux时自动启动):slaveOf MasterID 6379
  3. Slave2:VM3(linux,ubuntu),端口:6379(重启linux时自动启动):slaveOf MasterIP 6379

虚拟机启动后,我可以看到我已成功连接2个从服务器并与主服务器同步:来自主服务器的跟踪样本:

[1120] 25 Mar 14:11:18.629 - 1 clients connected (0 slaves), 793352 bytes in use
[1120] 25 Mar 14:11:18.634 * Slave asks for synchronization
[1120] 25 Mar 14:11:18.634 * Full resync requested by slave.
[1120] 25 Mar 14:11:18.634 * Starting BGSAVE for SYNC
[1120] 25 Mar 14:11:18.634 * Background saving started by pid 1227 …
Run Code Online (Sandbox Code Playgroud)

redis sentinel

2
推荐指数
1
解决办法
7193
查看次数

标签 统计

redis ×2

asynchronous ×1

azure ×1

c# ×1

sentinel ×1

stackexchange.redis ×1