今天小编给大家分享的是Springboot下使用Redis管道(pipeline)进行批量操作的介绍,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会免费云主机域名有所收获的哦。
之前有业务场景需要批量插入数据到Redis中,做的过程中也有一些感悟,因此记录下来,以防忘记。下面的内容会涉及到分别使用for、管道处理批量操作,比较其所花费时间。分别使用RedisCallback、SessionCallback进行Redis pipeline 操作解释RedisCallback、SessionCallback这两种用法的区别以下内容结合了redis官方文档,总结出自己的想法。Redis Pipeline官网地址:https://redis.io/docs/manual/pipelining/Redis的传输层是基于TCP协议,一次操作请求的完成,存在网络传输来回的开销,即使Redis每秒能接受10万的请求,但也会因为网络传输而浪费很多时间,导致降低整体的性能。所以面对大量的批量处理,可以使用Redis的管道(pipeline),优势在于多次指令操作只会使用一次的网络传输的开销。PS:像批量插入、批量获取,RedisTemplate提供了multiSet、multiGet的方法可以进行操作,不过像multiSet并不支持批量设置key的过期时间,可以考虑业务场景进行使用在进行批量操作的前提下不使用管道的时候,每一次Redis执行命令,都要涉及到读(read)和写(write)的系统调用,系统会将用户端切换到内核端。上下文切换会有一定的消耗使用管道的话,多条命令只需要一个读(read),多条响应只需要一个写(write),可想而知,这其中省下了很多的消耗。环境配置JDK8Spring boot 2.6.13spring-boot-starter-data-redis分别使用for、管道处理批量操作,比较其所花费时间PS: 本地,且只有一个客户端的情况下测试(做不到严谨性,见谅)目前只是本地跑(网络传输所带来的开销本身会很小),如果redis服务端是在其他地区的服务器上,这两种方式所需的时间相差还会越来越大。执行结果:执行结果:上面代码显示了RedisCallback、SessionCallback这两种都能实现相同的效果,那么这两个又有什么区别呢?SessionCallback 的使用比RedisCallback要友好一些SessionCallback的execute方法提供给使用者使用的是RedisOperations接口类,RedisTemplate实现类RedisCallback的doInRedis方法提供给使用者使用的是RedisConnection接口类,也就是LettuceConnection是实现类RedisConnection提供了字节数组类型的get和set方法,有关序列化部分的细节还需要我们去关心。(和使用原生jdbc感受差不多),而RedisTemplate负责序列化和连接管理,不需要让使用者关系这一块的部分。总结: 个人感觉从日常使用上应该都倾向于SessionCallback,而个别特殊有关底层的业务,可能就需要RedisCallback。关于Springboot下使用Redis管道(pipeline)进行批量操作的介绍就分享到这里了,希望以上内容可以对大家有一定的参考价值,可以学以致用。如果喜欢本篇文章,不妨把它分享出去让更多的人看到。
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。