博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
StackExchange.Redis 管道 批量 高性能插入数据
阅读量:5310 次
发布时间:2019-06-14

本文共 2437 字,大约阅读时间需要 8 分钟。

现在用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
(); 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
(); 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()方法。网上也有类似的文章 

 

转载于:https://www.cnblogs.com/majiang/p/6442291.html

你可能感兴趣的文章
5种语言混合编程:C++、JS、python、Lisp、汇编
查看>>
PHP伪静态
查看>>
chrome开发配置(二)获取源代码
查看>>
ROW_NUMBER、RANK、DENSE_RANK的用法(1) 基本语法
查看>>
Cstring获取第N个字符
查看>>
js 接收浏览器的参数值
查看>>
JSON
查看>>
Python提示信息表示内容
查看>>
manjaro i3 配置笔记
查看>>
Anaconda3 打开Navigator报错
查看>>
static_cast而后RTT1
查看>>
Apache 2.4.12 64位+Tomcat-8.0.32-windows-x64负载集群方案
查看>>
oc2---类
查看>>
3. 尾缀
查看>>
.net之工作流工程展示及代码分享(三)数据存储引擎
查看>>
HDU - 2680(逆向思维,djikstra
查看>>
overflow:auto学习
查看>>
Android屏幕设置只允许上下旋转
查看>>
Android杂谈--修改Android系统内/system目录权限使其可读写
查看>>
函数式语言
查看>>