我相信我们在这里缺少一些非常重要的东西,所以希望有人可以指出我正确的方向.先感谢您 :)
我们目前遇到的问题:有时异步操作(读取)不会从通过异步操作写入的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) 现在我们尝试使用redis 2.8.7作为缓存存储(来自使用booksleeve客户端的.NET Web应用程序).目前这似乎是非常有趣和令人兴奋的任务,redis文档非常好,但是由于缺乏实际的实践经验,我确实有一些关于如何正确完成预期配置的问题.
我把下一篇文章作为主要配置源:
最初的想法/假设 - 是使用Linux Ubuntu运行1个redis master和2个slave实例.为了提供实例的高可用性 - 我决定使用sentinel.所以我的预期配置目前看起来像这样:
虚拟机启动后,我可以看到我已成功连接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)