关于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批量写入的介绍的主要内容,如果未能解决你的问题,请参考以下文章