Redis管道设计

作者: 8033b4d1f3ec | 来源:发表于2018-06-22 20:22 被阅读15次

在大量请求发生的情况下,缓存本身设计已经足够的快速,这时候你会发现性能瓶颈已经不在于缓存读取上面了,而在于往返的请求。假如有如下一段代码:

public string getUserInfo(int userId){
   UserInfo userInfo=redis.getUserInfo(userId);
   int followCount=redis.getFollowCount(userId);
   int fansCount=redis.getFansCount(userId);
   int skuCount=redis.getSkuCount(userId);
   JsonObject result=new JsonObject();
   result.add(“user",gson.toJson(userInfo));
   result.add("followCount",followCount);
   result.add("fansCount",fansCount);
   result.add("skuCount",skuCount);
   return result.toString();
}

这个api中访问了4次redis,因为每个变量都存储在不同的业务和redis db中,这样在返回用户相关信息的时候,需要多次从redis读取数据,读取数据的过程类似tcp/ip握手,在下一次命令请求发起的时候,必须等到上一次命令返回。

考虑上述代码发生的一个场景,由于做了活动,导致pc端和手机端都需要大量请求获取用户信息api,假设10w的请求打到了getUserInfo api上,那么会发生多少次请求,getUserInfo一共访问了4个变量,所以请求量就是40w ,所以在大量请求的情况下,性能瓶颈就产生了,大量的请求导致耗时。

非常幸运的是,redis本身提供了管道命令,管道命令的原理就是通过把命令打包,合并请求,将多次请求作为一次发送,这样可以有效节省请求时间,这个命令在大量请求的情况下非常有用。getUserInfo api用管道命令可以减少3/4的请求量。此外,管道命令还适合在复杂的业务中,多次操作redis的情况。这好比搬家的时候,你没有工具,每次只能依靠自己的手,每次搬少量的东西,这样每次往返,这样必然导致搬家的时间延长,如果你有工具,可以一次搬很多东西,这样就能有效的减少搬家的时间。

参考资料:
http://www.redis.net.cn/tutorial/3523.html

http://doc.redisfans.com/topic/protocol.html

相关文章

  • Redis管道设计

    在大量请求发生的情况下,缓存本身设计已经足够的快速,这时候你会发现性能瓶颈已经不在于缓存读取上面了,而在于往返的请...

  • Redis管道技术的使用

    目录 Redis 管道技术 SpringDataRedis 使用管道 Redis 管道的性能测试 使用管道技术的注...

  • 高级篇之一

    Redis高级功能之分管道技术、消息队列 一、管道技术 我们先来试试管道技术,Redis 管道技术可以在服务端未响...

  • Redis管道

    客户端和Redis使用TCP协议连接。不论是客户端向redis发送命令还是redis向客户端返回命令的执行...

  • redis管道

    redis单个请求与批量操作对比   Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。这意味...

  • Redis管道

    Redis之管道的使用原文地址: https://blog.piaoruiqing.com/blog/2019/...

  • Redis-管道

    Redis管道的使用原文介绍:http://redis.cn/topics/pipelining.html[htt...

  • go redis

    go 操作redis操作 Pipelining(管道) 发布/订阅 事务

  • redis pipeline 管道

  • 5 redis管道

    什么是redis管道首先看一个例子 public static void test100w(){ 我本机的执行结果...

网友评论

    本文标题:Redis管道设计

    本文链接:https://www.haomeiwen.com/subject/fndlyftx.html