关于Redis批量写入的介绍

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Redis批量写入的介绍相关的知识,希望对你有一定的参考价值。

参考技术A 最近测试redis性能,需要批量插入1千万条以上的数据,

就简单进行了研究,大概有以下几种方法:

一:java程序调用,简单的for循环,通过Jedis的方法,直接插入,

       至于速度,不用看,不用试,根本不行,就不给实现了。

二:通过shell脚本,也比较简单,但也是因为要通过port端口的形式,

       连接到redis,速度也是慢的不行,放弃。

三:通过redis提供管道,感觉这种方法是最靠谱的,一下是实现:

 步骤1:首先简单写一个shell脚本:

目的是生成一个用批量插入的脚本文件,

步骤2:这里linux或者windows上生成的文件不能直接当做redis语句来跑,

简单来说,就是因为linux,windows和dos的换行并不一样,

所以需要简单转换一下:

转换的方法有好多种:

1:一般Linux发行版中都带有这个小工具,只能把DOS转换为UNIX文件,命令如下:

上面的命令会去掉行尾的^M符号。(如果机器上没有安装nuix2dos,直接用方法2即可)

2:用vim,vim是vi的改进版本,使用方式:

一行命令即可,保存退出,

步骤3:就是跑脚本了,通过redis提供的管道--pipe形式,

三步即可,完成redis的批量插入,速度,在2000万条的情况下,生成脚本的速度稍慢,插入的速度还在几分钟,

速度可以说是非常快了~

本文来自PHP中文网的 redis教程 ​栏目: https://www.php.cn/redis/

关于redis批量获取数据pipeline

参考技术A Redis是建立在TCP协议上的CS架构,客户端client对redis server采取请求响应的方式交互.每次交互会有网络延迟,大约30ms.
假设有这样一个场景,redis中存储上千个key值,获取每个key对应field的value,那么要向redis请求上千次 hget(key, field),获取响应也是对应的次数.如果能一次性将所有请求提交给server端,执行完成后批量获取响应,只需向redis请求1次,性能获大幅提升

没有用pipeline之前,基本上获取所有数据需要90多s,现在只需0.3s,性能提升清晰可见

实现以下场景:定时任务每隔1s执行任务函数,但是任务函数执行完成的时间比1s要长,此时启动定时任务要加上两个参数,否则会报错

可允许的实例个数,如果没有设置,则默认为1,表示id相同的任务实例数
像上面的例子中,会报skipped: maximum number of running instances reached (1)的错误,意思APScheduler试图重新执行作业,但前一个仍在运行。

这个参数可以理解为任务的超时容错配置,给executor 一个超时时间,这个时间范围内要是该跑的还没跑完,就别再跑了
像上面的例子中,会报Run time of job …… next run at: ……)” was missed by的错误

以上是关于关于Redis批量写入的介绍的主要内容,如果未能解决你的问题,请参考以下文章

Hbase 客户端批量写入数据

python怎么将数据写入到redis

redischannel写入失败

数据写入redis并返回怎么处理

关于redis批量获取数据pipeline

Elasticsearchelasticsearch里面的关于批量读取mget的用法