目前最新版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
作者: 七夜
QQ: 531020471
QQ群: 62116204(已滿)
QQ群: 154249567 (未滿)
email: lijinxing@gmail.com
blog: www.cellphp.com
redis new cmd
- ds_set name qiye
- ds_get name
- ds_del name
- ds_mset key value age 20
- ds_mget key age
- ds_del key age
php code
- include "redis.php";
- $db = new redis("127.0.0.1", 6379);
- $rc = $db->connect();
- if(!$rc)
- {
- echo "can not connect redis server\r\n";
- exit;
- }
- $data = $db->multi(array('DEL test', 'SET test 1', 'GET test'));
- print_r($data);
- echo $db->set("name", "qiye");
- echo $db->get("name");
- $db->ds_set("name", "qiye");
- $db->ds_set("age", "20");
- $data = $db->ds_mget( "name", "age");
- print_r($data);
可能很多人都不知道RedisStorage 和redis 之間的區別。
redis的存儲是存儲在內存里的, RedisStorage可以選擇存儲在磁盤里.
當redis崩潰的時候。redis 會從rdb或者aof文件重新讀取數據到內存里。如果數據量很大的話。這個初始化是相當的慢。(這就是 redis的假數據持久)。
RedisStorage 是直接存儲在 磁盤里。所以不存在這個數據重加載問題。
還有redis 存儲是受物理內存限制的,比如你有幾千萬或者幾億的數據。如果存儲在redis里。那得需要多巨大的內存了。使用RedisStorage 就沒有物理內存限制這個問題。最大可以存儲十億數據。
最后說一下淘寶的Tair ldb項目。同樣基於leveldb 存儲引擎。 廣泛的用在 登錄淘寶、查看商品詳情頁面、在淘江湖和好友“搗漿糊”等。 說明leveldb 數據引擎的可靠性和海量數據存儲。 但是開源版的Tair ldb 並不好用。所以自己寫了個基於 leveldb的 server端。