简单总结下对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问题
相关推荐
lombock应用,excel导入导出,swagger2集成,初步集成redis 部分pom.xml <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-base</artifactId> <version>3.0.3</version> </...
<artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 在 application 配置文件中 书写 redis 配置 spring.redis.host=127.0.0.1 #Redis服务器连接端口 spring.redis.port=6379 #Redis...
<!-- https://mvnrepository.com/artifact/com.orange.redis-embedded/embedded-redis --> <dependency> <groupId>... <artifactId>embedded-redis</artifactId> <version>0.6</version> </dependency>
嵌入式redis 视窗 Linux Redis嵌入式服务器用于Java集成测试Maven依赖Maven Central: < dependency> < groupId>com.github.kstyrc</ groupId> < artifactId>embedded-redis</ artifactId> < version>0.6</ version>...
独库redis dokku 的官方 redis 插件。 当前默认安装 。...redis:backup <service> <bucket> [--use-iam] # creates a backup of the redis service to an existing s3 bucket redis:backup-auth <service>
java bitset 源码 redis-bloomFilter redis-bloomFilter是...<artifactId>redis-bloomfilter</artifactId> <version>1.1.0</version> </dependency> 示例 BloomFilter demo Redis-bloomFilter基于Guava的BloomFilter
用法< repository>< id>git-47billion</ id>< name>47billion's Git based repo</ name>< url>https://github.com/47billion/maven-repo/raw/master</ url></ repository> < dependencies> < dependency> < groupId>...
save_mysql_redis.pysave_mysql_redis.pysave_mysql_redis.pysave_mysql_redis.pysave_mysql_redis.pysave_mysql_redis.pysave_mysql_redis.pysave_mysql_redis.pysave_mysql_redis.pysave_mysql_redis.pysave_mysql...
< artifactId>resteasy-cache-redis</ artifactId> < version>1.0.0</ version> </ dependency> 注意:目前,此工件仅在jCenter上可用(也许吗?)。 希望Maven Central即将面世。 用 在您的javax.ws.rs.core....
4. 运行环境 linux和windows等都支持,只要有Java环境和对应的数据库 redis 5. 运行条件 Java 1.8 Mysql5.7 Java项目框架 和 WEB PC 项目运行环境 1.SpringBoot 2.2.6.RELEASE<br> 2.Maven 3.6.1<br> 3.swagger-...
<section name="RedisConfig" type="Redis.Helper.RedisConfigInfo,Redis.Helper"/> </configSections> <!--Redis配置--> <RedisConfig WriteServerList="密码@192.168.1.232:6379" ReadServerList="密码@192....
● 把Redis的Map封装成RedisMap<T>类(key强制为String),暴露API模仿Java的Map ● 把Redis的Set封装成RedisSet<T>类,暴露API模仿Java的Set ● 把Redis的List封装成RedisList<T>类,暴露API模仿Java的List ● 把...
springboot+maven+mysql+redis框架 1. 创建独立的Spring应用程序 2. 嵌入的Tomcat,无需部署WAR文件 3. 简化Maven配置 4. 自动配置Spring 5. 提供生产就绪型功能,如指标,健康检查和外部配置 6. 绝对没有代码生成和...
即Redis和文件缓存中都找不到配置项时,客户端会从配置文件(app.properties)中加载。 在本地开发环境,可以不连接Redis,只使用配置文件(app.properties),以便于测试。 服务端 GUI尚未实现,暂时只能在key=config:{...
< manager className = “ ru.zinin.redis.session.RedisManager ” jedisJndiName = “ custom / jndi / path ” /> 嵌入式配置 见我们的嵌入式示例 添加tomcat-redis-session作为maven依赖关系: < 依赖关系 >...
【资源说明】 ...**React+SpringBoot+MyBatis+SpringSecurity+MySql+Redis**<br/> Linux服务器+Nginx+FastDFS文件服务器<br/><br/> 更多细节点:<br/>AOP、IP-验证码、布隆过滤器、支付宝支付<br/><br/>
<groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>4.3.0</version> </dependency> 对于许多应用程序,最好使用连接池。实例化 Jedis 连接池: JedisPool pool = new JedisPool(...
引入Redis依赖 <!--SpringBoot与Redis整合依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
地位安装专家< dependency> < groupId>org.rarefiedredis.redis</ groupId> < artifactId>redis-java</ artifactId> < version>0.0.5</ version></ dependency>用法去做线程安全RedisMock对象本身是完全线程安全的。...
< artifactId>spring-boot-starter-data-redis</ artifactId> </ dependency> < dependency> < groupId>redis.clients</ groupId> < artifactId>jedis</ artifactId> </ dependency> Redis 配置 @...