1. 程式人生 > >把leveldb嵌入到redis.實現真正的資料持久儲存

把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 也有真正的持久儲存功能。


現在RedisStorage 已經應用在使用者庫的儲存,和使用者簽到功能上。

專案地址: https://github.com/qiye/redis-storage

作者: 七夜
QQ:    531020471
QQ群: 62116204(已滿)
QQ群: 154249567 (未滿)
email: [email protected]
blog:  www.cellphp.com

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

相關推薦

leveldb嵌入redis.實現真正資料持久儲存

目前最新版RedisStorage 是基於 redis 2.6.2基礎上,加上 leveldb儲存引擎。 這個專案是源於 公司專案的passport 使用者認證改造。公司一個專案運行了N年。積累了幾千萬使用者,並且每天不斷的高速增長中。原有的mysql分表模式已經不適合。所

Redis實現分散式資料夾鎖

緣起 最近做一個專案,類似某度雲盤,另外附加定製功能,本人負責雲盤相關功能實現,這個專案跟雲盤不同的是,以專案為分配許可權的單位,同一個專案及子目錄所有有許可權的使用者可以同時操作所有檔案,這樣就很容易出現併發操作,而且表結構設計的時候,定下來檔案和資料夾都有個path欄位,儲存的是所在父級資料夾路徑,這

Spring Session + Redis 實現Session的分散式儲存

1 Redis的安裝及其基本使用 1.1 環境說明 CentOS7.3 Redis-3.2.10 1.2 Redis下載 [[email protected] Downloads]# wget http://download.

如何實現資料同時儲存到兩個資料表,使得同一次提交多個檔案的檔案ID號相同

情景說明: 假設我是一個檔案報告提交者,我想一次性提交需要交納的文件資訊。因此我的做法是,將一個個文字資訊通過TextBox控制元件新增顯示在GridView中,然後再將其儲存在對應的資料庫中。但是,我必須保證我這一次提交的資料,我作為提交者在第一個資料表中,僅有一條記錄,

位示圖演算法實現資料儲存

          今天在看排序演算法的時候,看到了用位示圖法實現的,上面說可以大大減少記憶體的使用,尤其針對大資料的儲存,資料量非常大的的時候,他的優點就比較明顯了,因為他儲存資料值依靠1個位來表示。具體是怎麼回事呢,繼續往下看。點陣圖法,點陣圖法,當然和位相關,下面我給

QT實現資料文字儲存的辦法及其操作

QT檔案型別 (1)文字檔案(QTextStream流):檔案內容是可讀的文字字元 (2)資料檔案(QDataStream流):檔案內容是直接的二進位制資料 QT對文字操作方式 1、QFile類,該類支援 對檔案或者是資料檔案的讀寫,提供的介面如下:

Redis之hash資料結構實現

  參考 https://www.cnblogs.com/ourroad/p/4891648.html https://blog.csdn.net/hjkl950217/article/details/78039691   在redis裡,雜湊又是另一種鍵值對結構。redis本身就

Redis 設計與實現[1] -- 資料結構與物件

1 簡單動態字串 Redis 沒有直接使用 C 語言傳統的字串表示,而是自己構建了一種簡單動態字串(SDS),使用 SDS 作為 REdis 的預設字串表示。 1.1 SDS 定義 struct sdshdr { // 記錄 buf 陣列中已經使用位元組的數量,等於 SDS 所儲

Redis五種資料型別及底層實現

Redis物件型別簡介 Redis是一種key/value型資料庫,其中,每個key和value都是使用物件表示的。比如,我們執行以下程式碼: redis>SET message "hello redis" 其中的key是message,是一個包含了字串"mess

redis——通過redis實現伺服器崩潰等資料恢復

由於redis儲存在記憶體中且提供一般程式語言常用的資料結構儲存型別,所以經常被用於做伺服器崩潰宕機的資料恢復處理。伺服器可以在某些指定過程中將需要儲存的資料以json物件等方式儲存到redis中,也就是我們常說的快照,當伺服器執行時讀取redis來判斷是否有待需要恢復資料繼

11、Spring技術棧-整合Redis,通過Redis的Master-Slave實現快取資料讀寫分離

1、Redis主從複製(Master-Salve Replication)簡介 Redis 支援簡單且易用的主從複製(master-slave replication)功能, 該功能可以讓從伺服器(slave server)成為主伺服器(master serv

redis實現秒殺功能例子(採用lua的原子性保證資料的一致性)

import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.spring

spring boot學習(06):Redis 實現資料快取和 Session 共享

前言 前面我們學習了redis的基本使用,我們知道redis最常用的應用場景,就是資料快取和session共享,Spring Boot 針對這兩個場景都做了一些優化,讓我們在實際專案中使用非常的方便。 資料快取 使用 Redis 做為資料快取

Redis 一、資料結構與物件--五大資料型別的底層結構實現

原文地址:http://m.blog.csdn.net/u011531613/article/details/70193720 redis上手比較簡單,但是它的底層實現原理一直很讓人著迷。具體來說的話,它是怎麼做到如此高的效率的?閱讀R edis設計與實現這本書,可以

利用netfilter機制,實現核心防火牆http請求和迴應的資料包截獲後,解釋出其中的http層資料

#include<linux/init.h> #include<linux/kernel.h> #include<linux/module.h> #include<linux/netfilter_ipv4.h> #includ

使用切面註解程式設計實現redis模糊刪除資料之一

之前使用spring-redis,發現沒有根據模糊查詢刪除redis,侷限性很大,比如我有兩個許可權表,模組許可權表baseModule,和按鈕許可權表baseButton。我把許可權進行了快取,然後在登陸時刪除快取,模組許可權的儲存名是baseModulePermissio

Spring整合Redis實現資料快取

一、什麼是RedisRedis 是一個開源(BSD許可)的,記憶體中的資料結構儲存系統,它可以用作資料庫、快取和訊息中介軟體。 它支援多種型別的資料結構,如 字串(strings), 雜湊(hashes), 列表(lists), 集合(sets), 有序集合(sorted s

SpringBoot學習筆記(6) SpringBoot資料快取Cache [Guava和Redis實現]

Spring定義了org.springframework.cache.CacheManager和org.springframework.cache.Cache介面來統一不同的快取技術,而Spring

Redis(三)--- Redis的五大資料型別的底層實現

1、簡介 Redis的五大資料型別也稱五大資料物件;前面介紹過6大資料結構,Redis並沒有直接使用這些結構來實現鍵值對資料庫,而是使用這些結構構建了一個物件系統redisObject;這個物件系統包含了五大資料物件,字串物件(string)、列表物件(list)、雜湊物件(hash)、集合(set)物件和

面試中經常問到的Redis七種資料型別,你都真正瞭解嗎?

前言 Redis不是一個簡單的鍵值對儲存,它實際上是一個支援各種型別資料結構的儲存。在傳統的鍵值儲存中,是將字串鍵關聯到字串值,但是在Redis中,這些值不僅限於簡單的字串,還可以支援更復雜的資料結構。下面就是Redis支援的資料結構: 字串(String):二進位制安全字串。 列表(List):根據插入順