StackExchange.Redis 管道 批量 高性能插入数据
现在用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();
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();
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(, arr.Length);
Assert.AreEqual("a", (string)arr[]);
Assert.AreEqual("b", (string)arr[]);
Assert.AreEqual("c", (string)arr[]);
}
}
}
}
var batch = conn.CreateBatch();这里的batch实际就是管道。真正的执行需要调用 batch.Execute()方法。网上也有类似的文章 redis大幅性能提升之使用管道(PipeLine)和批量(Batch)操作
StackExchange.Redis 管道 批量 高性能插入数据的更多相关文章
- JMeter 利用Jmeter批量数据库插入数据
利用Jmeter批量数据库插入数据 by:授客 QQ:1033553122 1. 启动Jmeter 2. 添加 DBC Connection Configuration 右键线程组-> ...
- c# redis 利用锁(StackExchange.Redis LockTake)来保证数据在高并发情况下的正确性
之前有写过一篇介绍c#操作redis的文章 http://www.cnblogs.com/axel10/p/8459434.html ,这篇文章中的案例使用了StringIncrement来实现了高并 ...
- PreparedStatement批量(batch)插入数据
JDBC操作数据库的时候,需要一次性插入大量的数据的时候,如果每次只执行一条SQL语句,效率可能会比较低.这时可以使用batch操作,每次批量执行SQL语句,调高效率. public Boolean ...
- mysql常用的统计类sql ,以及批量循环插入数据
今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ...
- sql批量修改插入数据
1.批量修改 select 'update 读者库 set 单位代码='''+新单位代码+''' where 单位代码='''+单位代码+'''' from 读者单位 ,)<'L' and is ...
- [C#] ServiceStack.Redis如何批量的pop数据?
要安全的批量pop数据,有两个办法: 1.用事务(不用事务的话可能导致重复读.ServiceStack的pipeline是没有自带事务的.) 2.执行lua脚本 我这里提供用事务的实现方法: publ ...
- 利用Jmeter批量数据库插入数据
1. 启动Jmeter 2. 添加 DBC Connection Configuration 右键线程组->添加->配置元件->JDBC Connection Configu ...
- 转JMeter 利用Jmeter批量数据库插入数据
1. 启动Jmeter 2. 添加 DBC Connection Configuration 右键线程组->添加->配置元件->JDBC Connection Configu ...
- HBase 高性能获取数据(多线程批量式解决办法) + MySQL和HBase性能测试比较
摘要: 在前篇博客里已经讲述了通过一个自定义 HBase Filter来获取数据的办法,在末尾指出此办法的性能是不能满足应用要求的,很显然对于如此成熟的HBase来说,高性能获取数据应该不是问题. ...
随机推荐
- VSCode配置python调试环境
VSCode配置python调试环境 很久之前的一个东东,翻出来看看 VSCode配置python调试环境 * 1.下载python解释器 * 2.在VSCode市场中安装Python插件 * 4.在 ...
- 使用JSONP实现跨域通信
引语 Ajax 允许在不干扰 Web 应用程序的显示和行为的情况下在后台进行数据检索.Ajax 允许在不干扰 Web 应用程序的显示和行为的情况下在后台进行数据检索.由于受到浏览器的限制,该方法不允许 ...
- LeetCode(61):旋转链表
Medium! 题目描述: 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5->NULL, ...
- python接口自动化测试十六:unittest完成用例
import unittestimport requests def add(a, b): print('前置条件!!!!!:如登录') return a + b class TestAAA(unit ...
- Python3-RabbitMQ 3.7.2学习——环境搭建(一)
学习消息队列,就要把环境先装好,本人使用的是python3.5.2和RabbitMQ 3.7.2,在装RabbitMQ之前,先要装Erlang,一定要. 1.环境:win10系统 python3 ...
- 【HTTP】 Fiddler简介
1.为什么是Fiddler? 抓包工具有很多,小到最常用的web调试工具firebug,达到通用的强大的抓包工具wireshark.为什么使用fiddler?原因如下: a.Firebug虽然可以抓包 ...
- 2018-2019 2 20165203 《网络对抗技术》 Exp3 免杀原理与实践
2018-2019 2 20165203 <网络对抗技术> Exp3 免杀原理与实践 免杀原理与实践说明及基础问答部分 实验任务 正确使用msf编码器(0.5分),msfvenom生成如j ...
- 2018-2019-2 网络对抗week1 Kali安装 20165333陈国超
Kali安装 安装过程是按照网上的教程装的,链接点击[https://blog.csdn.net/KNIGH_YUN/article/details/79949512] 安装成功的截图 主要说一下安装 ...
- ERP合同列表页面自动导航(三十二)
合同审核完成页面: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="CRMC ...
- python常用内建模块--collections
1.namedtuple #namedtuple是一个函数,它用来创建一个自定义的tuple对象,并且规定了tuple元素的个数,并可以用属性而不是索引来引用tuple的某个元素.#这样一来,我们用n ...