redis和memcache还有共享内存都是读取内存的数据,为了测试一下到底效率谁更胜一筹,我在我的Centos虚拟机下做了一次公平的测试。

测试参数

环境:Centos (配置忽略)、语言:PHP、WebServer:Nginx、测试次数:10000、字符类型及长度:字符串(1024)

准备测试

测试数据

<?php
//测试数据
$arr = array( =>
array ('id' => '','attacksdfdsfdsddddddddddd' => '5.45','atk_class' => '神圣级','wufang' => '4.9','def_class' => '超神级','cefang' => '4.9','mdf_class' => '超神级','hp' => '6.43','hp_class' => '神王级','dodge' => '','dodge_class' => 'SSSS','crit' => '','crit_class' => 'SSS','penetrate' => '','penetrate_class' => 'SSSS','mingzhong' => '','hit_class' => 'SSSS','anti_dizziness' => '','anti_dizzinesssdfdsfdsfdsfdsfds_class' => 'F','anti_critical' => '','anti_critical_class' => 'F','tenacity' => '','tenacity_class' => 'F',
),
=>
array ('id' => '414ddffff7','attack' => '5.45','atk_class' => '神圣级','wufang' => '4.95','def_class' => '超神级','cefang' => '4.95','mdf_class' => '超神级','hp' => '6.43','hp_class' => '神王级','dodge' => '','dodge_class' => 'SSSS','crit' => '','crit_class' => 'SSS','penetrate' => '','penetrate_class' => 'SSSS','mingzhong' => '','hit_class' => 'SSSS','anti_dizziness' => '','anti_dizziness_clsdfdsfdsfdsfdsfdsass' => 'F','anti_critical' => '','anti_critical_class' => 'F','tenacity' => '','tenacity_class' => 'F',
)); $str = json_encode($arr);
echo strlen($str); //输出1024

对redis进行10000次写入测试

<?php
$redis = new Redis();
$redis->connect('127.0.0.1',);
$redis->auth('310c8cabcdefghf2d8abcdefd44496ac80');
$start = microtime(true) ; for($i = ; $i<; $i++) {
$redis->set('key', $str);
}
echo microtime(true) - $start; //执行5次,大概平均结果为 1.7016470432281 秒

对共享内存(shm)进行10000次写入测试

<?php
$key = 0x4337b123;
$size = ;
$shmid = @shmop_open($key, 'c', , $size);
$start = microtime(true);
for($i = ; $i<; $i++) {
shmop_write($shmid, $str, );
}
@shmop_close($shmid);
echo microtime(true) - $start; //执行5次,大概平均结果为 0.0025370121002197 秒

对redis进行10000次读测试

<?php
$redis = new Redis();
$redis->connect('127.0.0.1',);
$redis->auth('310c8cabcdefghf2d8abcdefd44496ac80');
$start = microtime(true) ; for($i = ; $i<; $i++) {
$redis->get('key');
}
echo microtime(true) - $start; //执行5次,大概平均结果为 2.1236310005188 秒

对共享内存(shm)进行10000次读测试

<?php
$key = 0x4337b123;
$size = ;
$shmid = @shmop_open($key, 'c', , $size);
$start = microtime(true);
for($i = ; $i<; $i++) {
shmop_read($shmid, ,);
}
@shmop_close($shmid);
echo microtime(true) - $start; //执行5次,大概平均结果为 0.0021078586578369 秒

结果清单

Redis     读:2.1秒             写:1.7秒

Shm       读:0.0021秒      写:0.0025 秒

可见,效果差别悬殊。

Centos下10000次循环测试php对Redis和共享内存(shm)读写效率的更多相关文章

  1. Centos下安装Lamp和vsftpd、redis

    yum安装httpd和php.mysql服务 yum search httpd //搜索httpd开头的软件包 yum install httpd.x86_64 //找到apache 对应的软件包名 ...

  2. 设置Redis最大占用内存

    https://blog.csdn.net/happyrabbit456/article/details/54945667 Redis需要设置最大占用内存吗?如果Redis内存使用超出了设置的最大值会 ...

  3. linux下共享内存mmap和DMA(直接访问内存)的使用 【转】

    转自:http://blog.chinaunix.net/uid-7374279-id-4413316.html 介绍Linux内存管理和内存映射的奥秘.同时讲述设备驱动程序是如何使用“直接内存访问” ...

  4. Linux下多任务间通信和同步-mmap共享内存

    Linux下多任务间通信和同步-mmap共享内存 嵌入式开发交流群280352802,欢迎加入! 1.简介 共享内存可以说是最有用的进程间通信方式.两个不用的进程共享内存的意思是:同一块物理内存被映射 ...

  5. Linux下进程间通信方式——共享内存

    1.什么是共享内存? 共享内存就是允许两个或多个进程共享一定的存储区.就如同 malloc() 函数向不同进程返回了指向同一个物理内存区域的指针.当一个进程改变了这块地址中的内容的时候,其它进程都会察 ...

  6. CentOS下Redis服务器安装配置

    说明: 操作系统:CentOS 1.安装编译工具 yum install wget  make gcc gcc-c++ zlib-devel openssl openssl-devel pcre-de ...

  7. CentOS下redis集群安装

    环境: 一台CentOS虚拟机上部署六个节点,创建3个master,3个slave节点 1.下载并解压 cd /root wget http://download.redis.io/releases/ ...

  8. CentOS 下 redis 安装与配置

    CentOS 下 redis 安装与配置   1.到官网上找到合适版本下载解压安装 [root@java src]# wget -c http://redis.googlecode.com/files ...

  9. Redis 对比 Memcached 并在 CentOS 下进行安装配置

    了解一下 Redis Redis 是一个开源.支持网络.基于内存.键值对的 Key-Value 数据库,使用 ANSI C 编写,并提供多种语言的 API ,它几乎没有上手难度,只需要几分钟我们就能完 ...

随机推荐

  1. Python小数据池,代码块

    今日内容一些小的干货 一. id is == 二. 代码块 三. 小数据池 四. 总结 python小数据池,代码块的最详细.深入剖析   一. id is == 二. 代码块 三. 小数据池 四. ...

  2. 如何在Android的ListView中构建CheckBox和RadioButton列表(支持单选和多选的投票项目示例)

    引言 我们在android的APP开发中有时候会碰到提供一个选项列表供用户选择的需求,如在投票类型的项目中,我们提供一些主题给用户选择,每个主题有若干选项,用户对这些主题的选项进行选择,然后提交. 本 ...

  3. JSPatch解析

    defineClass('JPViewController', { handleBtn: function(sender) { var tableViewCtrl = JPTableViewContr ...

  4. 委托 匿名 lambda表达式

    #region 委托 delegate int ACT(int a, int b); static void Main(string[] args) { ACT act = new ACT(add); ...

  5. Kotlin enum class 匿名类实例

    Kotlin里的枚举类里有新玩意:就是枚举类的常量可以同时看成是一个同名匿名类 既然是类就可以与方法关联 看看官网的代码 如果你有过其它语言的使用枚举的经历,你可能对这个定义和说明很迷惑 我给你一个例 ...

  6. cocos2d JS-(JavaScript) 类型检测与判断

    //检测类型 var str = "Hello World"; if (typeof str=="string") {//使用typeof来判断对象类型的一个例 ...

  7. C++调用openssl库生成RSA加密秘钥对

    直接上代码.默认生成的是pkcs#1格式 // ---- rsa非对称加解密 ---- // #define KEY_LENGTH 1024 // 密钥长度 #define PUB_KEY_FILE ...

  8. 原型链(_proto_) 与原型(prototype) 有啥关系?

    prototype对象里面方法及属性是共享的...... 1.JavaScript 中每一个对象都拥有原型链(__proto__)指向其构造函数的原型( prototype),object._prot ...

  9. 解决React Native使用Fetch API请求网络报Network request failed

    问题来源: 1 . 在测试fetch数据请求时,Xcode9.0以上的无法请求https, 需要在Xcode中加载项目后修改Info.plist的相关配置,具体如下参考 问题及解决方法一模一样,不再重 ...

  10. netcore swagger xml发布丢失问题

    1.netcore2.1.2,swagger.aspnetcore 1.1.0版本.发布netcore项目时swagger的接口文档xml 遗漏,始终发布不上去.后来查阅资料,讲的好像是netcore ...