`
ZacMa
  • 浏览: 39165 次
  • 来自: 深圳
社区版块
存档分类
最新评论

mysql和redis存查取简单对比<37>

阅读更多

简单总结下对redis和mysql的认识:

redis: 

存取速度非常快,通常比mysql快很多(根据数据量大小,下面有具体示例)

容易部署和维护, redis很容易部署,并且容易使用,不像sql有复杂的语句

非常适合结构不复杂的key,value试的存储

缺点是所有数据都存在于内存之中,即使你进行了固化,数据在内存中也仍然有一份,如果内存中的数据有改变,要自己手动固化,但是如果简单的用bgsave会对整个都固化,即使小量改变,仍然开销较大,而redis本身并未提供部分的固化

 

mysql

存取速度都比redis慢,但是结构化很完善,如果结构比较复杂的存储,非常适合

缺点是想非常深入了解,定制化使用比较困难,需要相当功底,不像redis,源代码量不大,相比起来简单很多

 

下面直奔主题,就是测试在同等机器配置下,同样数据量下,redis和mysql的存储速度

首先看php测试源码:

 

class DBConn{
    private static $db_host="localhost";//服务器
    private static $db_user="root";//用户名
    private static $db_psw="111111";//密码
    private static $db_name="test_zm";//数据库名
    private static $connection;
   
    static function getConn(){
        $connection=new mysqli(self::$db_host,self::$db_user,self::$db_psw,self::$db_name);

        return $connection;
    }
}
class UserModel{
    ////运用单例模式
    private static $cennct = null;
    private static $instance = null;
     
    private function __construct() {
    }
    public function __destruct() {
    }
      private static function conn() {
        return DBConn::getConn();                
      }
      private static function  getdb(){
        if (self::$cennct == null)
            self::$cennct = self::conn();
        return self::$cennct;
      }
    private static function getself(){
         if (!(self::$instance instanceof self)) {
            self::$instance = new UserModel();
         }
        return  self::$instance;
      }
     public function __clone(){
        trigger_error('Clone is not allow!',E_USER_ERROR);
    }
    // 获取单例
    final public static function getInstance() {
        return UserModel::getself();
    }
    function testinsert($key,$value) {
        $mysqli= self::getdb();
        $mysqli->query("set names utf-8");//转换字符编码格式
        $query="insert into testspeed (key1,value1) values (?,?)";
        $result=$mysqli->prepare($query);
        $result->bind_param("ss",$key,$value); //参数绑定                    
        $result->execute();
    }
   
    function testget($key) {
        $mysqli= self::getdb();
        $mysqli->query("set names utf-8");//转换字符编码格式
        $query="select value1 from testspeed where key1=?";
        $result=$mysqli->prepare($query);
        $result->bind_param("s",$key); //参数绑定                    
        $result->execute();
    }


    //关注用户
    function testdel($key){   
        $mysqli=self::getdb();
        $mysqli->query("set names utf-8");//转换字符编码格式
        $query="delete from testspeed where key1=?";
        $result=$mysqli->prepare($query);
        $result->bind_param("s",$key); //参数绑定                                                                   
        $result->execute();
    }
}

//测试
/*-------------------------------test-------------------------------*/

echo "-------------------------------------insert-------------------------\n";
$UserModel2 =  UserModel::getInstance();
$time = time();
echo "time=$time\n";
for($i = 0; $i < 100000; $i++)
{
    $UserModel2->testinsert("test$i","test$i");
}
$time = time();
echo "time=$time\n";

echo "-------------------------------------select-------------------------\n";
$time = time();
echo "time=$time\n";
for($i = 0; $i < 100000; $i++)
{
    $UserModel2->testget("test$i");
}
$time = time();
echo "time=$time\n";

echo "-------------------------------------delete-------------------------\n";
$time = time();
echo "time=$time\n";
for($i = 0; $i < 100000; $i++)
{
    $UserModel2->testdel("test$i");
}
$time = time();
echo "time=$time\n";

 

程序中用到的表结构:--
/*-- 表的结构 `testspeed`
CREATE TABLE IF NOT EXISTS `testspeed` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `key1` varchar(16) NOT NULL,
  `value1` varchar(16) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `key` (`key1`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
测试环境,双核奔腾E5800,3.2GHZ,内存4G
测试报告: 1000条数据,
插入1s,删除小于1s,查询小于1s
测试报告: 10000条数据,
插入2s,删除2s,查询1s
测试报告: 10w条数据,
插入15s,删除16s,查询21s

 

 

 

再看redis测试源码:

redis用的是predis客户端,predis的下载地址:https://packagist.org/packages/predis/predis

require __DIR__.'/shared.php';

//single_server这个变量在shared.php中定义
$client = new Predis\Client($single_server);

// 这里是php的大小端封包,pack()
// 这里按照erlang的封包结果来解包
//通过网页输入的id

echo "-------------------------------------set-------------------------\n";
$time = time();
echo "time=$time\n";
for($i = 0; $i < 100000; $i++)
{
    $response = $client->set("test$i","test$i");
}
$time = time();
echo "time=$time\n";

echo "-------------------------------------get-------------------------\n";
$time = time();
echo "time=$time\n";
for($i = 0; $i < 100000; $i++)
{
    $response = $client->get("test$i");
}
$time = time();
echo "time=$time\n";


echo "-------------------------------------delete-------------------------\n";
$time = time();
echo "time=$time\n";
for($i = 0; $i < 100000; $i++)
{
    $response = $client->del("test$i");
}
$time = time();
echo "time=$time\n";

测试环境,双核奔腾E5800,3.2GHZ, 内存4G
测试set 10w条不同key,不同value数据需要5s
测试 get 10w条不同key,value的数据需要4s
测试delete 10w条不同key,不同value数据需要4s

有以上看来,在同样配置的机器上,redis和mysql对同样的数据操作,

存储,查询,读取的速度,redis是mysql的3-5倍,并且该值会随着数据量的加大而有更大的差距,

并且mysql选择的存储引擎是myisam,是个纯内存引擎,如果是innodb类的,结果可能更悬殊,

所以数据量大的,机器性能又不高,就只能改为cache,而不是单纯的sql,

mysql慢的另一点是对事务的支持,isam引擎在写数据时候是全表锁的

 

 欢迎加入web聊天群:457101767,共同探讨web问题

 

 

分享到:
评论

相关推荐

    用于 Java 集成测试的 Redis 嵌入式服务器.zip

    用于 Java 集成测试的 Redis 嵌入式服务器嵌入式redis视窗Linux用于 Java 集成测试的 Redis 嵌入式服务器Maven 依赖...redis&lt;/artifactId&gt; &lt;version&gt;0.5&lt;/version&gt;&lt;/dependency&gt;用法运行 RedisServer 非常简单RedisSe

    Redis 模块的 Java 客户端.zip

    Redis Stack 功能JSON 数据类型(存储、更新和获取)哈希和 JSON 文档的搜索和查询时间序列数据支持概率数据结构布隆过滤器布谷鸟过滤器t-摘要前K计数分钟草图入门JavaMaven&lt;dependency&gt; &lt;groupId&gt;com.redis&lt;/...

    Redis 客户端的 OpenTracing 工具.zip

    &lt;version&gt;VERSION&lt;/version&gt;&lt;/dependency&gt;绝地武士 3pom.xml&lt;dependency&gt; &lt;groupId&gt;io.opentracing.contrib&lt;/groupId&gt; &lt;artifactId&gt;opentracing-redis-jedis3&lt;/artifactId&gt; &lt;version&gt;VERSION&lt;/version&gt;&lt;/dependency&gt;...

    springboot整合Redis哨兵,实现消息队列场景

    &lt;artifactId&gt;spring-boot-starter-data-redis&lt;/artifactId&gt; &lt;version&gt;${spring-boot.version}&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;redis.clients&lt;/groupId&gt; &lt;artifactId&gt;jedis&lt;/artifactId&gt; ...

    springboot+lombock+swagger2+easypoi+redis

    lombock应用,excel导入导出,swagger2集成,初步集成redis 部分pom.xml &lt;dependency&gt; &lt;groupId&gt;cn.afterturn&lt;/groupId&gt; &lt;artifactId&gt;easypoi-base&lt;/artifactId&gt; &lt;version&gt;3.0.3&lt;/version&gt; &lt;/...

    基于Python+Django+MySQL+Redis实现的医院挂号系统

    Python+Django+MySQL+Redis的医院挂号系统 1.0版本功能:&lt;br&gt; 患者:登录、注册、挂号(选择科室、选择医生、选择时间、填写病情、支付宝支付)、展示挂号单。&lt;br&gt; 医生:登录、展示并处理挂号单。&lt;br&gt; 管理员:增...

    flask+sqlite+redis开发的一款非常简单的实时redis监视器.zip

    flask+sqlite+redis开发的一款非常简单的实时redis监视器# 安装说明#&gt;安装依赖yum -y 安装 python python-devel python-setuptoolseasy_install——升级pippip 安装--升级-r 要求.txt#高级配置#&gt;最终数据rm -rf ...

    arm架构,redis镜像

    arm架构,redis镜像

    Redis与Spring+Maven整合,附整合过程教学文档

    RedisTemplate&lt;String, Object&gt; template = new RedisTemplate&lt;&gt;(); template.setConnectionFactory(factory); // 配置序列化方式等 return template; } } ``` 2. 在需要使用Redis的地方,通过`@Cacheable`、`...

    用于单元测试的简单 redis java mock.zip

    &lt;dependency&gt; &lt;groupId&gt;com.github.zxl0714&lt;/groupId&gt; &lt;artifactId&gt;redis-mock&lt;/artifactId&gt; &lt;version&gt;0.1&lt;/version&gt;&lt;/dependency&gt;如何使用非常简单的方法。private static RedisServer server = null;@Beforepublic...

    Redis RedisJSON 的 Java 客户端(包装器).zip

    官方发布 &lt;dependencies&gt; &lt;dependency&gt; &lt;groupId&gt;com.redislabs&lt;/groupId&gt; &lt;artifactId&gt;jrejson&lt;/artifactId&gt; &lt;version&gt;1.4.0&lt;/version&gt; &lt;/dependency&gt; &lt;/dependencies&gt;快照 &lt;repositories&gt; &lt;repository&gt; &lt;id&gt;...

    springboot+security+jwt+redis 实现微信小程序登录及token权限鉴定.zip

    项目配置依赖 &lt;dependency&gt; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-starter-data-redis&lt;/artifactId&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; ...

    java 版 redis 服务器,java redis mock.zip

    Redis 服务器纯Java...maven 依赖&lt;dependency&gt; &lt;groupId&gt;com.github.microwww&lt;/groupId&gt; &lt;artifactId&gt;redis-server&lt;/artifactId&gt; &lt;version&gt;0.3.1&lt;/version&gt; &lt;scope&gt;test&lt;/scope&gt;&lt;/dependency&gt;使用 RedisServer serve

    dokku 的 redis 插件.zip

    &lt;bucket-name&gt; [--use-iam] # create a backup of the redis service to an existing s3 bucketredis:backup-auth &lt;service&gt; &lt;aws-access-key-id&gt; &lt;aws-secret-access-key&gt; &lt;aws-default-region&gt; &lt;aws-signature-v

    redis jar 兼容版

    &lt;artifactId&gt;spring-data-redis&lt;/artifactId&gt; &lt;version&gt;版本号&lt;/version&gt; &lt;/dependency&gt; &lt;!-- 可能还需要Spring Data Commons --&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework.data&lt;/groupId&gt; &lt;artifactId&gt;...

    Java操作Redis,实现String、List、Map的set和get

    &lt;groupId&gt;redis.clients&lt;/groupId&gt; &lt;artifactId&gt;jedis&lt;/artifactId&gt; &lt;version&gt;3.7.0&lt;/version&gt; &lt;/dependency&gt; ``` **操作String** 对于String类型的存储,使用`set`和`get`方法。以下是一个简单的示例: ```...

    redis命令大全

    * msetnx &lt;key1&gt; &lt;value1&gt; &lt;key2&gt; &lt;value2&gt; …:同时设置多个 key-value 对,当且仅当所有给定 key 都不存在 * del &lt;key&gt;:删除一个或多个 key * keys &lt;pattern&gt;:返回所有符合给定模式的 key 列表 * randomkey:...

    REDIS-BASH - 用于访问 Redis 的 Bash 库.zip

    使用客户端和 pubsub 演示客户$ redis-bash-cli &lt;PARAMETERS&gt; &lt;COMMAND&gt; &lt;ARGUMENTS&gt;参数-h Host - Defaults localhost.-p Port - Defaults 6379.-n DB - Select the database DB.-r N - Repeat command N times.-a ...

    redis需要的Jar包

    &lt;groupId&gt;redis.clients&lt;/groupId&gt; &lt;artifactId&gt;jedis&lt;/artifactId&gt; &lt;version&gt;3.x.x&lt;/version&gt; &lt;!-- 使用最新版本 --&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.slf4j&lt;/groupId&gt; &lt;artifactId&gt;slf4j-simple&lt;/...

    HttpSession基于Redis,支持RESTful API .zip

    HttpSession基于Redis,...快速入门maven&lt;dependency&gt; &lt;groupId&gt;com.github.x-hansong&lt;/groupId&gt; &lt;artifactId&gt;redis-http-session&lt;/artifactId&gt; &lt;version&gt;1.0&lt;/version&gt;&lt;/dependency&gt;gradledependencies { compile ...

Global site tag (gtag.js) - Google Analytics