把leveldb嵌入到redis.实现真正的数据持久存储

目前最新版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 也有真正的持久存储功能。php


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

项目地址: https://github.com/qiye/redis-storage

做者: 七夜
QQ:    531020471
QQ群: 62116204(已满)
QQ群: 154249567 (未满)
email: lijinxing@gmail.com
blog:  www.cellphp.com 

redis new cmdmysql

  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 codegit

  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端。github

相关文章
相关标签/搜索