Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5096611
  • 博文数量: 921
  • 博客积分: 16037
  • 博客等级: 上将
  • 技术积分: 8469
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-05 02:08
文章分类

全部博文(921)

文章存档

2020年(1)

2019年(3)

2018年(3)

2017年(6)

2016年(47)

2015年(72)

2014年(25)

2013年(72)

2012年(125)

2011年(182)

2010年(42)

2009年(14)

2008年(85)

2007年(89)

2006年(155)

分类: 数据库开发技术

2011-03-26 16:32:18

随着项目的发展,我们需要一个高可用性的缓存系统。在对比了memcache和几个流行的key/value数据库之后,我们最终选择了。redis绝对是个好东西。用redis之前,推荐看一下下面这几篇文章:

使用php操作redis有好几个选择,个人推荐 和 ,其中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的并发修改场景,完全可以满足我们的需求了。

 

  1. <?php
  2. $app_cnt = 1000; // 模拟的应用数

  3. $test_cnt = 100000; // 模拟的访问次数


  4. $redis = new Redis();
  5. $redis->connect('127.0.0.1', 6379);
  6. $start_time_a = microtime();
  7. for ($i = 0; $i < $test_cnt; $i++) {
  8.   $key = 'app_' . rand(1, $app_cnt);
  9.   if ($redis->exists($key)) {
  10.     $redis->hIncrBy($key, 'req', 1);
  11.   }
  12.   else {
  13.     $redis->hMSet($key, array(
  14.       'a' => 0,
  15.       'b' => 0,
  16.       'c' => 0,
  17.       'd' => time() + 60,
  18.       'e' => 0,
  19.       'f' => 0,
  20.       'g' => 0)
  21.     );
  22.     $redis->hIncrBy($key, 'req', 1);
  23.   }
  24. }
  25. $end_time_a = microtime();
  26. $time = $end_time_a - $start_time_a;
  27. printf('all time:%s \n', $time);
  28. $redis->close();
阅读(1734) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~