把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

相關文章
相關標籤/搜索