人們常說寫代碼進步最快的方式之一是閱讀成熟開源項目的代碼,從中可以學習到許多良好的代碼風格、問題抽象實踐。今天我選擇了下面這個代碼質量被廣泛認可的開源項目源碼進行閱讀:
redis sharding方案 Redis集群的目的是實現數據的橫向伸縮,把一塊數據分片保存到多個機器,可以橫向擴展數據庫大小,擴展帶寬,計算能力等。
Redis是一種高級key-value數據庫。它跟memcached類似,不過數據可以持久化,而且支持的數據類型很豐富。有字符串,鏈表,集 合和有序集合。支持在服務器端計算集合的并,交和補集(difference)等,還支持多種排序功能。所以Redis也可以被看成是一個數據結構服務 器。
鍵值存儲,它是數據結構服務器:字符串string,hash,鏈表list,集合set和有序集合zset。支持push,pop和add,remove。為了保證效率,都是存儲在內存中。周期性把數據更新到磁盤中,或者記錄到log里面,類似于mysql的binlog。
最近整理Redis,對sentinel有了更深入的理解,特地總結如下
ooredis是一個Redis的Python庫,基于redis-py
目前redis僅支持主從復制模式,可以支持在線備份、讀寫分離等功能,實際應用中通常通過sentinel服務做主從切換的管理,這增加了管理的復雜度和維護成本,基于此360基礎架構組聯合DBA從redis內部實現了雙主功能。
Storm集成Redis:一、Storm集成redis前的準備 ????首先是需要安裝storm和redis環境,具體安裝方法可分別去http://st...
數據庫主要類型有對象數據庫,關系數據庫,鍵值數據庫等等,對象數據庫太超前了,現階段不提也罷;關系數據庫就是平常說的MySQL,PostgreSQL這些熟的不能再熟的東西,至于鍵值數據庫則是本文要著重說的,其代表主要有MemcacheDB,Tokyo Cabinet等等。
Redis 集群是一個分布式(distributed)、容錯(fault-tolerant)的 Redis 實現, 集群可以使用的功能是普通單機 Redis 所能使用的功能的一個子集(subset)。 Redis 集群中不存在中心(central)節點或者代理(proxy)節點, 集群的其中一個主要設計目標是達到線性可擴展性(linear scalability)。
我們知道了過期時間保存在 expires 字典里, 又知道了該如何判定一個鍵是否過期, 現在剩下的問題是, 如果一個鍵是過期的, 那它什么時候會被刪除?
redis集群方案
Redis Memcached 特性,技術選型時需要注意到的問題。 如果簡單地比較Redis與Memcached的區別,大多數都會得到以下觀點: 1 Redis不僅僅支持簡單的k/v類型的數據,同時還提供list,set,hash等數據結構的存儲。
Redis,是一個key-value存儲系統,與memcached類似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、 set(集合)、zset(sorted set --有序集合)和hashs(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。與memcached一樣,為了保證效率,數據都是緩存在內存中。區別的是redis會周期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,并且在此基礎上實現了master-slave(主從)同步。
Redis 是 key-value 的NOSQL、獨愛那些小而熱的數據、典型"蘿莉控"
redis的幾個事物命令: WATCH 監視一個(或多個) key ,如果在事務執行之前這個(或這些) key 被其他命令所改動,那么事務將被打斷; UNWATCH 取消 WATCH 命令對所有 key 的監視;
在某些使用場景中,我們并不需要使用redis的持久化,反而需要發揮redis的內存數據庫特性,實現完全內存運行,達到需要的高性能。
馬上要從有道離職。除了MSRA實習外人生第一份正式工作即將結束,在這個隆重的時刻自然是需要寫點東西紀念一番。感性的文字不著急寫,作為一個搞技術的,當然還是先寫點技術文章爭取對同行有所幫助。所以第一篇呢,湊個熱鬧,redis3.0正式版剛發布,就先說說redis cluster吧。
Redis Hash是value內部為一個HashMap,如果該Map的成員數比較少,則會采用類似一維線性的緊湊格式來存儲該Map, 即省去了大量指針的內存開銷,這個參數控制對應在redis.conf配置文件中下面2項:
redis作為強大的Key-Value服務,如何和R進行結合,這里做一些簡單的記錄