目前最新版RedisStorage 是基于 redis 2.6.2基础上,加上 leveldb存储引擎。 这个项目是源于 公司项目的passport 用户认证改造。公司一个项目运行了N年。积累了几千万用户,并且每天不断的高速增长中。原有的mysql分表模式已经不适合。所以寻找nosql的解决方案。经过测试目前流行的NOSQL。 最终选中了leveldb. Leveldb是一个google实现的非常高效的kv数据库,目前的版本1.2能够支持十亿级别的数据量了。 在这个数量级别下还有着非常高的性能,主要归功于它的良好的设计。特别是LSM算法。LevelDB 是单进程的服务,性能非常之高,在一台4个Q6600的CPU机器上,每秒钟写数据超过40w,而随机读的性能每秒钟超过10w。.(leveldb也应用在淘宝上).可惜leveldb只是个存储引擎,没有一个好的服务端。经过几天折腾。我把leveldb加到redis里去。 这样既可以依托redis的高效稳定,又可以不用另起炉灶。一举两得。 现在redis 也有真正的持久存储功能。

现在RedisStorage 已经应用在用户库的存储,和用户签到功能上。

项目地址: 

https://github.com/qiye/redis-storage

作者: 七夜


redis new cmd 
1.  ds_set name qiye
2.  ds_get name
3.  ds_del name 
4.  ds_mset key value age 20
5.  ds_mget key age
6.  ds_del key age


复制代码

php code 
1.  include "redis.php";
2.  $db = new redis("127.0.0.1", 6379);
3.  $rc = $db->connect();
4.  if(!$rc)
5.  {
6.     echo "can not connect redis server\r\n";
7.     exit;
8.  }  
9.  $data = $db->multi(array('DEL test', 'SET test 1', 'GET test'));
10.  print_r($data);
11.  echo $db->set("name", "qiye");
12.  echo $db->get("name");
13.  $db->ds_set("name", "qiye");
14.  $db->ds_set("age", "20");
15.  $data = $db->ds_mget( "name", "age");
16.  print_r($data);


复制代码


可能很多人都不知道RedisStorage 和redis 之间的区别。

redis的存储是存储在内存里的,  RedisStorage可以选择存储在磁盘里. 
当redis崩溃的时候。redis 会从rdb或者aof文件重新读取数据到内存里。如果数据量很大的话。这个初始化是相当的慢。(这就是 redis的假数据持久)。 
RedisStorage 是直接存储在 磁盘里。所以不存在这个数据重加载问题。

还有redis 存储是受物理内存限制的,比如你有几千万或者几亿的数据。如果存储在redis里。那得需要多巨大的内存了。使用RedisStorage 就没有物理内存限制这个问题。最大可以存储十亿数据。

最后说一下淘宝的Tair ldb项目。同样基于leveldb 存储引擎。 广泛的用在 登录淘宝、查看商品详情页面、在淘江湖和好友“捣浆糊”等。 说明leveldb 数据引擎的可靠性和海量数据存储。 但是开源版的Tair ldb 并不好用。所以自己写了个基于 leveldb的 server端。