StackExchange.Redis 管道 批量 高性能插入数据
来源:互联网 发布:算法导论 原书第3版 编辑:程序博客网 时间:2024/06/05 05:29
现在用redis来做数据缓存的越来越多了,很多项目都有初始化redis数据的过程,由于初始化的数据比较大,那么该过程越快越好。这里我们以HashSet方法为例,
这里我们推荐用HashEntry[] hashFields方法传入多个fields,应为它发送的HMSET指令即批量插入数据,另一个方法发送的HSET指令。
在阅读StackExchange.Redis里面我确实没有找到pipe指令,后来发现该指令的实现是:通过CreateBatch方法实现的。源码的单元测试例子是:
using System;using System.Collections.Generic;using System.Threading.Tasks;using NUnit.Framework;namespace Tests{ [TestFixture] public class Batches { [Test] public void TestBatchNotSent() { using (var muxer = Config.GetUnsecuredConnection()) { var conn = muxer.GetDatabase(0); conn.KeyDeleteAsync("batch"); conn.StringSetAsync("batch", "batch-not-sent"); var tasks = new List<Task>(); var batch = conn.CreateBatch(); tasks.Add(batch.KeyDeleteAsync("batch")); tasks.Add(batch.SetAddAsync("batch", "a")); tasks.Add(batch.SetAddAsync("batch", "b")); tasks.Add(batch.SetAddAsync("batch", "c")); Assert.AreEqual("batch-not-sent", (string)conn.StringGet("batch")); } } [Test] public void TestBatchSent() { using (var muxer = Config.GetUnsecuredConnection()) { var conn = muxer.GetDatabase(0); conn.KeyDeleteAsync("batch"); conn.StringSetAsync("batch", "batch-sent"); var tasks = new List<Task>(); var batch = conn.CreateBatch(); tasks.Add(batch.KeyDeleteAsync("batch")); tasks.Add(batch.SetAddAsync("batch", "a")); tasks.Add(batch.SetAddAsync("batch", "b")); tasks.Add(batch.SetAddAsync("batch", "c")); batch.Execute(); var result = conn.SetMembersAsync("batch"); tasks.Add(result); Task.WhenAll(tasks.ToArray()); var arr = result.Result; Array.Sort(arr, (x, y) => string.Compare(x, y)); Assert.AreEqual(3, arr.Length); Assert.AreEqual("a", (string)arr[0]); Assert.AreEqual("b", (string)arr[1]); Assert.AreEqual("c", (string)arr[2]); } } }}
var batch = conn.CreateBatch();这里的batch实际就是管道。真正的执行需要调用 batch.Execute()方法。网上也有类似的文章 redis大幅性能提升之使用管道(PipeLine)和批量(Batch)操作
0 0
- StackExchange.Redis 管道 批量 高性能插入数据
- redis---批量插入数据
- mysql 批量插入数据 redis
- StackExchange.Redis官方文档(七)【性能分析】
- StackExchange.Redis
- StackExchange.Redis官方文档(三)【管道和多路复用器】
- Redis从文件中批量插入数据
- Redis使用pipeline批量插入hash数据
- Redis从文件中批量插入数据
- JDBC批量插入数据的性能测试
- .NET 批量插入数据,先查后插,性能优化
- Android批量插入数据性能优化
- sqlite批量插入数据性能优化
- StackExchange.Redis 使用资料
- [StackExchange]Redis 发布订阅
- 【07-Redis从文件中批量插入数据】
- Redis管道获取数据
- sqlite 批量插入性能
- [NOIP2008]笨小猴,火柴棒等式,传纸条,双栈排序
- Android Spinner在使用时的一个特性
- iOS 越狱开发那些事儿之四
- Git常用命令(一)
- Node.js 笔记四: 简单爬虫
- StackExchange.Redis 管道 批量 高性能插入数据
- 在Express的页面模板中的变量的定义与使用总结
- Hash表
- C#总结--骑士飞行棋
- struct inode
- Git客户端安装图文详解如何安装配置GitHub操作流程攻略
- leetcode--485. Max Consecutive Ones
- 打素数表
- 飞花的线代