推荐一下redis这个好东西
随着项目的发展,我们需要一个高可用性的缓存系统。在对比了memcache和几个流行的key/value数据库之后,我们最终选择了redis。redis绝对是个好东西。用redis之前,推荐看一下下面这几篇文章:
使用php操作redis有好几个选择,个人推荐 Rediska 和 phpredis,其中Rediska是一个纯php实现的类库,如果你需要多台服务器组建一个redis集群的话,推荐用这个,它支持基于CRC32的一致性哈希算法的分布式集群构建,另外也可以自己实现自己的分布式算法。而phpredis则是一个php的c扩展,需要自己编译然后在生产环境中加载,相比Rediska好处就是速度快一点,最终我们选择了phpredis,我们的项目对性能的要求还是比较苛刻一点,暂时也不需要构建一个集群。
另外,我们的项目特点比较特殊,对于value需要频繁修改,所以我自己在自己的机器上面小测了一下,使用的是redis的hash列表数据结构还有phpredis:
测试环境:
CPU:model name : Intel(R) Pentium(R) Dual CPU T2370 @ 1.73GHz
redis 2.01
phpredis (用来访问redis的扩展)
主要模拟了1K个应用在10W个修改的情况,测试结果:
10W个修改:
real 0m11.930s
user 0m2.976s
sys 0m3.856s
CPU:50%~60% MEM:1.5M+
从这个表现来看,基本上可以支撑1W+/s的并发修改场景,完全可以满足我们的需求了。
<?php $app_cnt = 1000; // 模拟的应用数 $test_cnt = 100000; // 模拟的访问次数 $redis = new Redis(); $redis->connect('127.0.0.1', 6379); $start_time_a = microtime(); for ($i = 0; $i < $test_cnt; $i++) { $key = 'app_' . rand(1, $app_cnt); if ($redis->exists($key)) { $redis->hIncrBy($key, 'req', 1); } else { $redis->hMSet($key, array( 'a' => 0, 'b' => 0, 'c' => 0, 'd' => time() + 60, 'e' => 0, 'f' => 0, 'g' => 0) ); $redis->hIncrBy($key, 'req', 1); } } $end_time_a = microtime(); $time = $end_time_a - $start_time_a; printf('all time:%s \n', $time); $redis->close(); ?>

好东西,果断收藏!~~~~~~
好东西,帮老公收藏~