redis和memcache非常像的,都是key,value的方式,将数据存放内存中。最近在学习redis,在网上看了一些这方面的资料,有三种观点:
1,redis读写内存比memcache快
2,memcache读写内存比redis快
3,memcache读写内存比redis快,但是redis整体性能优于memcache
所以我做了一下测试。关于redis和memcache的安装,请参考
linux redis 安装配置,以及redis php扩展
1,redis的测试文件
PHP function get_data (){ MysqL_connect("localhost","root","") or die("Could not connect: " . MysqL_error()); MysqL_select_db("ugc"); $result = MysqL_query("SELECT task_id FROM ugc_tasks"); $return = array(); while ($row = MysqL_fetch_array($result,MysqL_ASSOC)) { $return[] = $row; } MysqL_free_result($result); return $return; } $redis = new redis(); $redis->connect('127.0.0.1',6379); if ($redis->exists('test')) { $value = $redis->get("test"); }else{ $value = get_data(); $redis->set('test',json_encode($value)); } print_r(json_decode($value)); ?>
2,redis的测试结果
第一次
root@ubuntu:/home/zhangying/download/webbench-1.5# webbench -c 10000 -t 30 http://localhost/PHP-redis/test_redis.PHP
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004,GPL Open Source Software.
Benchmarking: GET http://localhost/PHP-redis/test_redis.PHP
10000 clients,running 30 sec.
Speed=48324 pages/min,40318471 bytes/sec.
Requests: 22599 susceed,1563 Failed.
telnet 127.0.0.1 6379 telnet登录一下,把test对应的值清除掉,保重测试的公平性
del test
第二次
root@ubuntu:/home/zhangying/download/webbench-1.5# webbench -c 10000 -t 30 http://localhost/PHP-redis/test_redis.PHP
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004,running 30 sec.
Speed=53570 pages/min,41217689 bytes/sec.
Requests: 23106 susceed,3679 Failed.
telnet 127.0.0.1 6379
del test
第三次
root@ubuntu:/home/zhangying/download/webbench-1.5# webbench -c 10000 -t 30 http://localhost/PHP-redis/test_redis.PHP
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004,running 30 sec.
Speed=49450 pages/min,39694073 bytes/sec.
Requests: 22301 susceed,2424 Failed.
telnet 127.0.0.1 6379
del test
3,memcache测试文件
PHP function get_data (){ MysqL_connect("localhost",MysqL_ASSOC)) { $return[] = $row; } MysqL_free_result($result); return $return; } $mem = new Memcache; $mem->connect("127.0.0.1",11211) or die ("Could not connect"); $value = $mem->get('test1'); if (empty($value)) { $value = json_encode(get_data()); $mem->set('test1',$value,600); } print_r(json_decode($value)); ?>
4,memcache测试结果
第一次
root@ubuntu:/home/zhangying/download/webbench-1.5# webbench -c 10000 -t 30 http://localhost/PHP-redis/test_memcache.PHP
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004,GPL Open Source Software.
Benchmarking: GET http://localhost/PHP-redis/test_memcache.PHP
10000 clients,running 30 sec.
Speed=61632 pages/min,52228667 bytes/sec.
Requests: 29205 susceed,1611 Failed.
telnet 127.0.0.1 11211 telnet登录一下,把test1对应的值清除掉,保重测试的公平性
delete test1
第二次
root@ubuntu:/home/zhangying/download/webbench-1.5# webbench -c 10000 -t 30 http://localhost/PHP-redis/test_memcache.PHP
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004,running 30 sec.
Speed=64160 pages/min,52601449 bytes/sec.
Requests: 29426 susceed,2654 Failed.
telnet 127.0.0.1 11211
delete test1
第三次
root@ubuntu:/home/zhangying/download/webbench-1.5# webbench -c 10000 -t 30 http://localhost/PHP-redis/test_memcache.PHP
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004,running 30 sec.
Speed=65190 pages/min,52506614 bytes/sec.
Requests: 29348 susceed,3247 Failed.
telnet 127.0.0.1 11211
delete test1
从上面比较结果,可以看出,memcache比redis快的。redis对key,value的管理,更灵活。有很多人把redis归于nosql的范围,细细想,还真是那么一回事。redis还可以把内在中的数据,放到磁盘中,这一点上,redis更像memcachedb。关于使用哪一种,看个人喜好而定了。