一、效果:每秒读取2000万条。写入2200万条。cpu开销很小二、原理:1.将数据以数组方式存储在内存中,php进程需要数据时直接通过内存地址访问数据,没有任何IO开销以及CPU开销。

三、具体实现:1.利用linux的写时复制技术。运行php主进程一次性读取所有的数据保存到数组中,然后通过workerman监听端口。每次收到请求时:创建一个子进程去执行任务,执行完成之后子进程自动结束。

2.子进程完全共享主进程的数组,不消耗内存。

四、代码[code] ini_set('memory_limit','5872M'); // 临时设置最大内存占用为5G

$a = [[[[]]]];

$start = microtime(true);

for ($i=0; $i<=200; $i++) {

for ($j=0; $j<=100; $j++) {

for ($k=0; $k<=1000; $k++) {

$a[$i][$j][$k] = '我是一条数据';

}

}

}

// 2000万数据,时间1秒,消耗内存720M。 相当于1000万-0.5秒-360M

echo microtime(true) - $start, "s。主进程写入完成,当前内存:" . (memory_get_usage() / 1024 / 1024) . "MB

";

$start = microtime(true);

for ($i=0; $i<=200; $i++) {

for ($j=0; $j<=100; $j++) {

for ($k=0; $k<=1000; $k++) {

$m = $a[$i][$j][$k] ;

}

}

}

echo microtime(true) - $start, "s。主进程读取完成,当前内存:" . (memory_get_usage() / 1024 / 1024) . "MB

";

$start = microtime(true);

$intNum= 1; // 进程总数

$pids= array(); // 进程PID数组

for($i= 0; $i

{

$pids[$i] = pcntl_fork();// 产生子进程,而且从当前行之下开试运行代码,而且继承父进程的所有变量

if($pids[$i] == -1){echo"couldn't fork". "\n";

}elseif(!$pids[$i]){

$m= 0;

$start = microtime(true);

for ($i=0; $i<=200; $i++) {

for ($j=0; $j<=100; $j++) {

for ($k=0; $k<=1000; $k++) {

$m = $a[$i][$j][$k] ;

}

}

}

echo microtime(true) - $start, "s。子进程读取完成,当前内存:" . (memory_get_usage() / 1024 / 1024) . "MB

";

sleep(100);

exit(0);//子进程要exit否则会进行递归多进程,父进程不要exit否则终止多进程

}

}

echo microtime(true) - $start, "s。子进程创建完成,当前内存:" . (memory_get_usage() / 1024 / 1024) . "MB

";

sleep(200);[/code]

五:代码运行结果:

1.0883929729462s。主进程写入完成,当前内存:719.90679168701MB

0.66096806526184s。主进程读取完成,当前内存:719.90679168701MB

0.0097589492797852s。子进程创建完成,当前内存:719.90715026855MB

0.72923994064331s。子进程读取完成,当前内存:719.90715026855MB

php 数据 缓存,php终极数据缓存,比redis、GlobalData等快200倍以上,极致性能相关推荐

  1. 【大数据】AI、IoT、区块链这些技术与大数据融合,大数据基础软件干货不容错过

    作者:刘学习  | 小编:阿软 在IT产业发展中,包括CPU.操作系统在内的基础软硬件地位独特,不但让美国赢得了产业发展的先机,成就了产业巨头,而且因为技术.标准和生态形成的壁垒,主宰了整个产业的发展 ...

  2. java stringbuffer 转数组_JAVA之旅(十七)——StringBuffer的概述,存储,删除,获取,修改,反转,将缓存区的数据存储到数组中,StringBuilder...

    JAVA之旅(十七)--StringBuffer的概述,存储,删除,获取,修改,反转,将缓存区的数据存储到数组中,StringBuilder 讲完String,我们来聊聊他的小兄弟 一.StringB ...

  3. mysql缓存淘汰机制_Redis缓存总结:淘汰机制、缓存雪崩、数据不一致....

    在实际的工作项目中, 缓存成为高并发.高性能架构的关键组件 ,那么Redis为什么可以作为缓存使用呢?首先可以作为缓存的两个主要特征: 在分层系统中处于内存/CPU具有访问性能良好, 缓存数据饱和,有 ...

  4. Redis 缓存和 MySQL 数据如何实现一致性?

    需求起因 在高并发的业务场景下,数据库大多数情况都是用户并发访问最薄弱的环节.所以,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问MySQL等数据库. 这个业务场景,主要 ...

  5. 数据结构(字典,跳跃表)、使用场景(计数器、缓存、查找表、消息队列、会话缓存、分布式锁)、Redis 与 Memcached、 键的过期时间、数据淘汰策略、持久化(RDB、AOF)

    1. 数据结构 1.1 字典 dictht 是一个散列表结构,使用拉链法保存哈希冲突的 dictEntry /* This is our hash table structure. Every dic ...

  6. redis 查询缓存_Redis缓存总结:淘汰机制、缓存雪崩、数据不一致....

    在实际的工作项目中, 缓存成为高并发.高性能架构的关键组件 ,那么Redis为什么可以作为缓存使用呢?首先可以作为缓存的两个主要特征: 在分层系统中处于内存/CPU具有访问性能良好, 缓存数据饱和,有 ...

  7. android对象缓存,Android简单实现 缓存数据

    前言 1.每一种要缓存的数据都是有对应的versionCode,通过versionCode请求网络获取是否需要更新 2.提前将要缓存的数据放入assets文件夹中,打包上线. 缓存设计 代码实现 /* ...

  8. Redis概述_使用命令对redis的数据进行增删改查_Jedis连接redis进行数据操作_redis进行数据缓存案例

    学习目标 redis 概念 下载安装 命令操作 1. 数据结构 持久化操作 使用Java客户端操作redis Redis 前言(从百度上抄的, 看看了解一下, 懒得排版了) 1. 概念: redis是 ...

  9. 交换机分布缓存_网络交换机缓存在数据中心的作用

    什么产生了缓存?网络交换机要配置多少缓存才够用?缓存容量是否有标准可以衡量? 当网络交换机接口收到超出其所能处理的流量后,它会选择要么将其缓存,或者将其丢弃. 缓存通常都是因为网络接口速率不同造成的, ...

最新文章

  1. ssacnf和sprintf实战取ip地址
  2. CentOS下Clonezilla通过网络自动备份还原系统
  3. 2018.11:大数据在政府统计中的应用、瓶颈及融合路径(余芳东)
  4. 全球及中国再生橡胶产业发展动态及十四五运营状况分析报告2021版
  5. Netweaver是如何判断哪些对象可以被增强的
  6. [深度学习] 自然语言处理 --- 文本分类模型总结
  7. Web Hacking 101 中文版 八、跨站请求伪造
  8. 【Kafka】docker下kafka报错 IOException: Connection to xxx:19093 (id: 1002 rack: null) failed
  9. 四、shell编程练习题(1-20)
  10. the database profile could not loaded. Check log for details
  11. 重构:如何去掉代码中的S味
  12. matlab色度椭圆,matlab画色度图
  13. 90%人不知道的大厂面试流程和技巧
  14. idea 安装Vue插件 超详细
  15. 在屏幕上绘制圆形函数
  16. sko.GA实现遗传算法的源码解析
  17. centos7 配置phpAdmin
  18. 利用github进行账号授权登录
  19. vue 项目开发 lenovo商城
  20. c语言程序设计图书管理,C语言程序设计报告 图书馆信息管理系统

热门文章

  1. 圆满收官!我的2022 秋招总结与建议
  2. 卷起来了,写了一套Tensorflow和Pytorch的学习笔记(20G/代码/PPT/视频)
  3. java motherfree video_Java Config 下的Spring Test方式
  4. Java并发(二)——ThreadLocal
  5. Linux编程(1)_关于linux基础知识
  6. python编程入门----numpy不常见的小细节
  7. Kubernetes Resource QoS Classes介绍
  8. python接口自动化(十)--post请求四种传送正文方式(详解)
  9. 【二十三】win 10 :Jmeter 报告可视化 —— 配置生成测试报告仪表板,Jmeter + Jenkins 自动化构建生成 HTML 报告
  10. linux可配置哪些服务,不可不知 十大热门Linux服务器配置