发布于 1970-01-01 08:00
  • 9 个回答
    • 错在你不该在while里写connect...哪有每次都去连接的?

      2022-12-01 14:07 回答
    • 首先,建立一个到Memcached的TCP连接的开销肯定要比打开一个本地文件大,而在你的cli测试中,反复建立了上万次连接,而在Web上(比如PHP-FPM,MOD_PHP),可以使用到Memcached的持久连接,也就是一个PHP-FPM工作进程保持一个Memcached的长连接,用于处理多个不同的请求:
      http://php.net/manual/zh/memcached.construct.php

      <?php
      $mc = new Memcached('story_pool');

      其次,操作系统会缓存本地文件到内存(就是Linux上的buffers/cache),读性能肯定是不错的,但是频繁的写性能肯定没有Memcached好,因为Memcached读写操作都保证在内存中完成。

      另外,Memcached能实现分布式(由客户端实现,比如PHP的PECL扩展memcached),这个也是本地文件缓存不具备的优势。Memcached的分布式体现在将不同的键保存到不同的服务器上。
      http://php.net/manual/zh/memcached.addserver.php

      注意:PHP有两个针对Memcached的PECL扩展,一个叫做memcache,一个叫做memcached:
      http://php.net/manual/zh/intro.memcache.php
      http://php.net/manual/zh/intro.memcached.php
      其中基于libmemcached的扩展memcached实现了分布式,而memcache则没有实现。

      2022-12-01 14:07 回答
    • 上面说的对,你的测试方法是错误的,因为memcache已经达到最大连接数了,所以报错

      不过我想知道你用的是什么磁盘,SSD or FIO or SAS,IOPS是多少;说明一下,memcache中key最大值为250B,value最大值为1M,一般情况下value大于1M,也就是超过memcache中page的大小时候,memcache也就无能为力了,不过你可以通过更改源代码来实现或者换redis(value最大值512M)

      其实也不必测试,memcache数据全部放在内存中,然而内存和磁盘不是一个级别,我们可以分析一下:

      1纳秒等于10亿分之一秒,= 10 ^ -9 秒

      Numbers Everyone Should Know
      L1 cache reference 读取CPU的一级缓存     0.5 ns
      Branch mispredict(转移、分支预测)     5 ns
      L2 cache reference 读取CPU的二级缓存     7 ns
      Mutex lock/unlock 互斥锁\解锁     100 ns
      Main memory reference 读取内存数据     100 ns
      Compress 1K bytes with Zippy 1k字节压缩     10,000 ns
      Send 2K bytes over 1 Gbps network 在1Gbps的网络上发送2k字节     20,000 ns
      Read 1 MB sequentially from memory 从内存顺序读取1MB     250,000 ns
      Round trip within same datacenter 从一个数据中心往返一次,ping一下500,000 ns
      Disk seek  磁盘搜索     10,000,000 ns 
      Read 1 MB sequentially from network 从网络上顺序读取1兆的数据     10,000,000 ns
      Read 1 MB sequentially from disk 从磁盘里面读出1MB     30,000,000 ns 
      Send packet CA->Netherlands->CA 一个包的一次远程访问     150,000,000 ns

      我们关注一下内存和磁盘的访问速度,上面是指随机访问,那么相差1000 000倍,但如果是顺序访问的话大约为 7倍

      2022-12-01 14:07 回答
    • 楼主应该好好看看设计模式,你的面试官没说错你。。。可能初级程序员都懂得缓存对象吧。。谁会每次循环都连接一次memcached?

      2022-12-01 14:07 回答
    • 如果用file存的话, 100w 请求,你去看下服务器的硬盘读写。服务器早挂掉了。

      2022-12-01 14:07 回答
    • 磁盘IO延迟和资源开销和文件系统开销也挺大得。

      2022-12-01 14:07 回答
    • 我只想问哈楼主是用什么测出PHP运行时间的?

      2022-12-01 14:07 回答
    • 事实证明 你就是1、2年的初级。 但是当时面试官否认掉你 没跟你讲明原因吗?

      还有给你 也是给所有人一个忠心的建议,切忌不要太浮躁! 或是自我膨胀,以当前时间为节点来看,自己永远是井底之蛙,不经历一些事情有可能不会明白。

      2022-12-01 14:07 回答
    • 哈哈哈哈哈哈哈哈哈 有趣 还以为是个重大发现

      2022-12-01 14:07 回答
    撰写答案
    今天,你开发时遇到什么问题呢?
    立即提问
    PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有