当前位置: 首页 > news >正文

同一源代码再建设一个网站学网页设计制作

同一源代码再建设一个网站,学网页设计制作,wordpress 还原,营销推广活动方案Redis进阶#xff1a;管道 管道是啥#xff1f;我们做开发的同学们经常会在 Linux 环境中用到管道命令#xff0c;比如 ps -ef | grep php 。在之前学习 Laravel框架时的 【Laravel6.4】管道过滤器https://mp.weixin.qq.com/s/CK-mcinYpWCIv9CsvUNR7w 这篇文章中#xff0c… Redis进阶管道 管道是啥我们做开发的同学们经常会在 Linux 环境中用到管道命令比如 ps -ef | grep php 。在之前学习 Laravel框架时的 【Laravel6.4】管道过滤器https://mp.weixin.qq.com/s/CK-mcinYpWCIv9CsvUNR7w 这篇文章中我们也详细的讲过管道这个概念。如果有不清楚的小伙伴可以回去复习一下哦。 在 Redis 中也有管道的概念。不过说白了就是为了节省网络连接的通信成本而让多个操作一次发送。没错概念就是这么简单。不过咱们还是要好好掰扯掰扯到底是为啥要这样。 请求与响应 Redis 服务大部分情况下也是一个传统的 TCP 服务客户端需要通过 TCP 连接到服务端然后把命令发送到服务端服务端处理完成后再返回给客户端。用我们这些 Web 工程师最熟悉的概念来说就是一个请求和响应的过程。 既然有了这个过程那么必然的在请求和响应的传输过程中网络带来的性能损耗肯定是会存在的。内网或本机传输还好外网传输则可能会要了老命了。从一个请求发出到一个响应接收到这中间消耗的时间叫做 RTTRound Trip Time 往返时间。 设想如果我们执行一个命令RTT 用了 250ms 那么一秒我们就只能执行 4 个命令。本身对于 Redis 来说执行速度是非常快的毕竟咱们操作的是内存。结果因为 RTT 的原因被网络传输的速度给拖慢了这就得不偿失了嘛。 那么是不是可以把多条命令合在一起然后一起发送出去呢这样同样的 RTT 时间我们就可以执行更多的命令从而达到提高效率的目的。 没错就是管道啦。 管道 这个东西不新鲜怎么说呢MySQL 会吧大批量插入的时候我们最优先选择的一个处理方案是啥 insert into t values (xxx,xxx),(xxx,xxx),(xxx,xxx) 是不是这样的批量插入为的是什么一样的减少来回连接 MySQL 的开销从而加快插入速度。 在 Redis 中也有类似的命令要是想不起来 MSET 这个命令的话那么您得回到基础篇再好好复习一下了。不过不只是插入对于其它命令来说我们通过管道的方式也能在一次请求中进行批量的执行。如果使用命令行的话可以这样测试 ➜  (printf PING\r\nPING\r\nPING\r\n; sleep 1) | nc localhost 6379 PONG PONG PONG 一次性发送了 3 个 PING 返回了 3 个 PONG 。或者使用命令行客户端。 ➜ printf *3\r\n\$3\r\nSET\r\n\$1\r\na\r\n\$3\r\n111\r\n*2\r\n\$4\r\nincr\r\n\$1\r\na\r\n |  redis-cli --pipeAll data transferred. Waiting for the last reply... Last reply received from server. errors: 0, replies: 2➜  redis-cli 127.0.0.1:6379 get a 112 在应用程序的客户端中使用就更加方便了我们直接就来进行速度的测试使用 SET 插入十万条数据然后看一下不使用管道和使用管道之间的区别。 首先是不使用管道的Go语言测试。 // main.go t1 : time.Now()for i : 1; i  100000; i {rdb.Set(info:strconv.Itoa(i), val, -1) }t2 : time.Now()fmt.Println(t2.Sub(t1))// 命令行执行结果 ➜ go run main.go  5.374380805s 循环插入十万条数据耗时 5.37 秒。接下来我们再使用管道来进行插入。 // main.go t1 : time.Now()pipe : rdb.Pipeline() for i : 1; i  100000; i {pipe.Set(info:strconv.Itoa(i), val, -1) } pipe.Exec()t2 : time.Now()fmt.Println(t2.Sub(t1))// 命令行执行结果 ➜  go run main.go 299.236659ms 是不是要起立鼓掌了299 毫秒搞定。这里的示例语言用的是 Go 使用的是 go-redis 这个包。我这里没有开协程也是线性执行的哦。抛开语言因素咱们用 PHP 再试一把。 // pipe.php $redis  new \Redis(); $redis-connect(127.0.0.1); $redis-flushDB();$t1  microtime(true);$pipe  $redis-pipeline(); for($i0;$i100000;$i){$pipe-set(info:.$i, val); } $pipe-exec();$t2  microtime(true); echo $t2-$t1;// 命令行执行结果 ➜ php pipe.php 0.2947039604187 好嘛这回还快了 5 毫秒294 毫秒就搞定了。 管道就这么无敌吗也不是全是使用管道发送命令时服务器将被迫回复一个队列答复占用很多内存。所以如果你需要发送大量的命令最好是把他们按照合理数量分批次的处理例如 10000 条命令读回复然后再发送另一个 10000 条的命令等等。这样速度几乎是相同的但是在每次回复这 10000 条命令队列时需要非常大量的内存用来组织返回数据内容。 其实话说回来Redis 足够快平常我们的 Redis 服务也不会放到外网基本都是内网连接总体来说效率应该还是没问题的除非真的是遇到上面这种需要不停执行大量命令的极端情况。因此这套功能使用过的同学可能真的不多。 额外 为啥我们在本地 127.0.0.1 的这个回环连接循环执行 SET 会这么慢呢照理说本地是没有网络开销的呀只是内存、CPU的通信问题嘛。 好吧都提到内存和CPU了那咱们也应该知道系统进程不是总在执行同一个进程的会有时间片调度的。当写入一个新命令的时候会进入到回环接口的缓冲区中然后等待系统内核安排CPU执行调度因此也会有像网络延迟一样的效果。 我们可以配置 redis.conf 打开 unixsocket 连接方式。unixsocket 是通过描述符连接的方式不走网络回环请求MySQL 也有这样的连接方式但是只能本地使用也就是说真实业务场景下这样用得不多。 unixsocket /tmp/redis.sock unixsocketperm 700 然后在命令行使用 redis-cli -s /tmp/redis.sock 连接同样也可以在程序代码中使用 unix:/tmp/redis.sock进行连接。然后再次测试不使用管道执行十万条的 SET 结果就像下面这样了。 ➜ go run main.go 428.709968ms 可以看出速度还是没有使用管道来得快。 管道与脚本 脚本还记得吧就是我们之前学习过的 Lua 脚本。如果是非常大量的管道操作可以通过脚本得到更高效的处理不过呢前提就是你得先会 Lua 所以说这是应对更加极端情况下的一种选择大部分情况下我们使用普通的管道就已经非常够用了。 另外就是Lua 以及 MSET 之类的批量命令是原子的而 Pipeline 不是它只是将命令一起发送到服务端后还是一条一条按顺序地执行。 总结 又是一个好玩的功能吧不过确实也是一个非常冷门的功能毕竟这货在日常的普通使用中就已经够快了而且就像在文章中一直说过的一次性非常大量的命令执行这种极端业务需求也是不常见的。所以至少了解一下吧遇到的时候至少不会抓瞎。 参考文档 https://redis.io/docs/manual/pipelining/ 代码地址 [https://github.com/zhangyue0503/dev-blog/tree/master/redis/2022/source](
http://www.dnsts.com.cn/news/203147.html

相关文章:

  • 网站建站要多少钱温猛设计工作室
  • pyton怎么做网站的代码广州外贸网站效果
  • 成都模板网站建设无锡建站模板系统
  • 做论坛网站4g空间够不够用汕头seo推广优化
  • 网站做优化必须要ftp吗邢台网站设计哪家专业
  • 吕梁网站设计南京网站关键词优化咨询
  • 做风险投资网站校园推广渠道
  • 京东网站是谁做的智慧团建登录入口官方网站
  • 网站页面优化简单吗wordpress开通多站点好处
  • 用focusky做h5微网站昆明网站词排名优化
  • 松江微网站建设轻松筹网站可以做吗
  • 怎样做自己的 优惠卷网站免费建设网站入驻
  • 怎么用wordpress建电商网站中级经济师考试题库1000题
  • wordpress中添加登陆页面跳转临沂网站关键字优化
  • 模板网站建设 报价淄博做网站建设
  • 好看的网站在哪里好找org域名做网站
  • 太仓高端网站制作顺企网下载安装
  • 旅游网站开发的国内外现状wordpress 繁体转简
  • php 资讯网站个人网站做的类型
  • 宁波seo推广推荐网站seo基本流程
  • 佛山国内快速建站做网站广告中敏感词会涉及到工商
  • asp网站后台管理系统密码破解防盗网站人做清洁
  • 海南工程建设资料备案网站龙岩网站设计培训
  • 青岛君哲网站建设公司怎么样wordpress 评论栏
  • 优秀集团网站设计百度推广是必须先做网站吗
  • 建设网站的公司专业服务免费开源代码网站
  • 建设部网站有建筑施工分包商标注册查询网址
  • 我公司要网站建设北京网站优化企业
  • 维护网站一年多少钱长沙网站推广平台
  • wordpress 多站点 拷贝微信公众号管理工具