列表物件的編碼可以是ziplist或者linkedlist
ziplist是一種壓縮鍊錶,他的好處是更能節省記憶體空間,因為它所儲存的內容都是在連續的記憶體區域當中的。當列表物件元素不大,每個元素不大,每個元素也不大的時候,就採用ziplist儲存。但當資料量過大時就ziplist就不是那麼好用了。因為為了保證他儲存內容中的連續性,插入的複雜性是o(n),即每次插入都會重新進行realloc。
1. 快取式的web應用程式架構:
在web層和db層之間加一層cache層,主要目的:減少資料庫讀取負擔,提高資料讀取速度。cache訪問的媒介是記憶體,可以考慮採用分布式的cache層,這樣更容易破除記憶體容量的限制,同時增加了靈活性。
2. 頁面靜態化:
效率最高,消耗最小的就是純淨態化html頁面,所以我們盡可能使我們的**上的頁面採用靜態頁面來實現,這個最簡單的方式其實也是最有效的方法。使用者可以直接獲取頁面,不用像mvc結構走那麼多流程,比較適合於頁面資訊大量被前台呼叫,但是更新頻率很小的情況。
3. 使用儲存過程:
處理一次請求需要多次訪問資料庫的操作,可以把操作整合到儲存過程,這樣只要一次資料庫訪問就可以了。
4. 增加資料庫索引
string(字串),hash(雜湊),list(列表),set(集合) 及 zset(有序集合)
方案一:可以使用獨佔鎖的方式,類似作業系統的mutex機制,不過實現相對複雜,成本較高。
方案二:使用樂觀鎖的方式進行解決(成本較低,非阻塞,效能較高)
1. mysql replication 是mysql官方提供的主從同步方案,用於將乙個mysql例項的資料,同步到另乙個例項中。replication為保證資料安全做了重要的保證,也是現在運用最廣的mysql容災方案。replication 用兩個或以上的例項搭建了mysql主從複製集群,提供單點寫入,多點讀取的服務,實現了讀的 scale out。
2. sentinel 是redis官方為集群提供的高可用解決方案。在實際專案可以使用sentinel去做redis自動故障轉移,減少人工介入的工作量。另外sentinel也給客戶端提供了監控訊息的通知,這樣客戶端可根據訊息型別去判斷伺服器的狀態,去做對應的適配操作。
mongodb和redis都是nosql,採用結構型資料儲存。二者在使用場景中,存在一定的區別,這也主要由於二者在記憶體對映的處理過程,持久化的處理方式不同。mongodb建議集群部署,更多的考慮到集群方案,redis更偏重於程序順序寫入,雖然支援集群,也僅限於主從模式。
redis優點:
1. 讀寫效能優異
2. 支援資料持久化,支援aof和rdb兩種持久化方式
3. 支援主從複製,主機會自動將資料同步到從機,可以進行讀寫分離。
4. 資料結構豐富:支援string,hash,set,sortedset,list 等資料結構。
缺點:1. redis不具備自動容錯和恢復功能,主機從機的宕機都會導致前端部分讀寫請求失敗,需要等待機器重啟或者手動切換前端的ip才能恢復。
2. 主機宕機,宕機前有部分資料未能及時同步到從機,切換ip後還會引入資料不一致的問題,降低了系統的可用性。
3. redis的主從複製採用全亮複製,複製過程中主機會fork出乙個子程序對記憶體做乙份快照,並將子程序的記憶體快照儲存為檔案傳送給從機,這一過程需要確保主機有足夠多的空域記憶體。若快照檔案較大,對集群的服務能力會產生較大的影響,而且複製過程是在從機新加入集群或者從機和主機網路斷開重連時都會進行,也就是網路波動都會造成主機和從機間的一次全量的資料複製,這對實際的系統運營造成了不小的麻煩。
mongodb優點:
1. 弱一致性(最終一致),更能保證使用者的訪問速度。
2. 文件結構的儲存方式,能夠更便捷的獲取數。
4. 支援複製集,主備,互為主備,自動分片等特性。
5. 動態查詢
6. 全索引支援擴充套件到內部物件和內嵌陣列。
缺點:1. 不支援事務
2. mongodb占用空間過大
3. 維護工具不夠成熟
redis事務允許一組命令在單一步驟中執行。事務有兩個屬性,說明如下:
1. 事務是乙個單獨的隔離操作:事務中的所有命令都會序列化,按順序的執行。事務在執行的過程中,不會被其他客戶端傳送來的命令請求所打斷。
2. redis事務是原子性的。原子意味著要麼所有的命令都執行,要麼都不執行。
乙個事務從開始到執行會經歷一下三個階段:
開始事務
命令入隊
執行事務
redis支援五種資料型別string(字串),hash(雜湊)list(列表)set(集合)及zset(sortedset:有序集合)
一 string
1. string 是 redis最為常用的一種資料型別,string 的資料結構為key/value型別,string可以包含任何資料。
2. 常用命令:set,get,decr,incr,mget等。
二 hash
1. hash型別可以看成是乙個key/value都是string的map容器。
2. 常用命令:hget,hset,hgetall等。
三 list
1. list用於儲存乙個有序的字元穿列表,常用的操作是想佇列兩端新增元素或者獲得列表的某一片段。
2. 常用命令:lpush,rpush,rpop,lrange
四 set
1. set可以理解為一組無序的字元集合,set中相同的元素時不會重複出現的,相同的元素只保留乙個。
2. 常用命令: sadd.spop,smembers,sunion等。
五 sorted set(有序集合)
1. 有序集合是在集合的基礎上為每乙個元素關聯乙個分數,redis通過分數為集合中的成員進行排序。
2. 常用命令:zadd,zrange,zcard等。
redis知識點小結
這兩天和哥們聊天,他說最近在面試中頻頻被問到關於redis的相關問題,不可否認,目前非關係型資料庫的使用很普遍,尤其是redis更是被很多網際網路公司所鍾愛,面試中也成為了肯定會被問到的乙個點。剛好今天有抽出點時間,就對我所認識的redis的簡單的知識點做一些小小的總結。我們在了解乙個新鮮事物 新的...
Redis 框架知識點
redis 1.特點 效能極高 記憶體型資料庫,讀寫速度極快 豐富的資料型別 可以資料持久化 出於效能考慮,不是高可靠 設定過期時間 可以進行資料淘汰 不完整的事務 無法回滾,資料一致性無法保證 2.使用場景 對速度有要求,並可能需要設定過期時間,主要用於資料快取 3.客戶端 服務端 命令 啟動re...
Redis經典知識點
redis是什麼?redis是乙個開源的,使用c語言編寫的,支援網路互動的,可基於記憶體也可持久化的key value儲存系統。什麼是redis持久化?redis有哪幾種持久化方式?優缺點是什麼?使用redis有哪些好處?資料儲存在記憶體中,讀寫速度快 支援的資料型別資源豐富 支援事務,操作都是原子...