redis摘要

redis筆記
1)sds:1:避免重複的申請內存 2:不須要掃描所有字符串就能夠獲取字符串的長度(c 語言的原始字符串是須要的) 3:防止了字符串的合併溢出,4:二進制安全
2)字典:rehash,每次分配兩個哈希表,慢慢作rehash,一直遷移完畢,rehash過程當中,刪除,查找,跟新要更新連個hash表
3)跳躍表:使用的比較少,實現有序的排序集合,集羣幾點中作部分數據結構,zset用來保證數據的有序存儲
4)OBJECT ENCODING  n 查看一個字段的編碼。獲取OBJECT REFCOUNT a 的值引用計數器
所以,儘管共享更復雜的對象能夠節約更多的內存,但受到CPU時間的限制,Redis只對包含整數值的字符串對象進行共享。
OBJECT IDLETIME命令能夠打印出給定鍵的空轉時長,這一空轉時長就是經過將當前時間減去鍵的值對象的lru時間計算得出的,OBJECT IDLETIME  命令的實現是特殊的,這個命令在訪問鍵的值對象時,不會修改值對象的lru屬性
Redis數據庫中的每一個鍵值對的鍵和值都是一個對象。
Redis共有字符串、列表、哈希、集合、有序集合五種類型的對象,每種類型的對象至少都有兩種或以上的編碼方式,不一樣的編碼能夠在不一樣的使用場景上優化對象的使用效率。
5)Redis的對象系統帶有引用計數實現的內存回收機制,當一個對象再也不被使用時,該對象所佔用的內存就會被自動釋放。
6)Redis會共享值爲0到9999的字符串對象。
7)對象會記錄本身的最後一次被訪問的時間,這個時間能夠用於計算對象的空轉時間。
8)當使用Redis命令對數據庫進行讀寫時,服務器不只會對鍵空間執行指定的讀寫操做,還會執行一些額外的維護操做,其中包括:
在讀取一個鍵以後(讀操做和寫操做都要對鍵進行讀取),服務器會根據鍵是否存在來更新服務器的鍵空間命中(hit)次數或鍵空間不命中(miss)次數,這兩個值能夠在INFO stats命令的keyspace_hits屬性和keyspace_misses屬性中查看。
在讀取一個鍵以後,服務器會更新鍵的LRU(最後一次使用)時間,這個值能夠用於計算鍵的閒置時間,使用OBJECT idletime <key>命令能夠查看鍵key的閒置時間。
■的鍵進行修改以後,會將這個鍵標記爲髒(dirty),從而讓事務程序注意到這個鍵已經被修改過redis

9)RDB 生成命令 1:save ,數據庫會阻塞,不提供服務,1:bgsave:fork一個子進程完成,RDB的載入是redis啓動的時候執行的,redis並無提供載入rdb的命令。
優先使用AOF來載入,除非aof關閉了,才使用rdb。bgsve 禁止和save同事執行算法

10)od -c dump.rdb  查看rdb文件
11)由服務器直接調用aof_rewrite函數的話,那麼在重寫AOF文件期間,服務期將沒法處理客戶端發來的命令請求
很明顯,做爲一種輔佐性的維護手段,Redis不但願AOF重寫形成服務器沒法處理請求,因此Redis決定將AOF重寫程序放到子進程裏執行,這樣作能夠同時達到兩個目的:
■ 子進程進行AOF重寫期間,服務器進程(父進程)能夠繼續處理命令請求。
■ 子進程帶有服務器進程的數據副本,使用子進程而不是線程,能夠在避免使用鎖的狀況下,保證數據的安全性數據庫

12)服務器使用兩種模式來限制客戶端輸出緩衝區的大小 1:若是緩存區的大小超過硬性的要求,馬上關閉客戶端 2:超過軟性的大小,沒有超過硬性大小,則記錄。後續一直超出,或者處理時間超過設置,則關閉客戶端
13)調用addReply將結果返回給client緩存

  1)該函數會調用prepareClientToWrite()首先將要返回給客戶端的結果按照必定的格式保存到緩衝區中 
  2)而後調用aeCreateFileEvent(server.el, c->fd, AE_WRITABLE,sendReplyToClient, c) 在該鏈接fd上註冊寫事件。 
  這樣當server下一次執行aeMain函數時,就會檢測到有寫事件發生,就會調用sendReplyToClient()函數了。
  3)在sendReplyToClient()函數中,就會調用write系統調用將結果經過socket返回給client了。安全

  這樣整個set key value命令就執行完了服務器


14)redis集羣會將16384個slot分部到全部集羣裏面,假如客戶單訪問一個命令,節點判斷是不是本身的slot,是就執行, 不是則返回給客戶頓錯誤,而且從新定向到新的節點,集羣節點的redis只能使用0號數據庫。選取主節點使用:raft算法
15)redis支持lua腳本
16)bitset, 使用sds逆序儲存,每隔buff儲存8位
17)客戶端能夠成爲一個哨兵
18)記錄慢查詢
19)Redis-Sentinel是Redis官方推薦的高可用性(HA)解決方案,當用Redis作Master-slave的高可用方案時,假如master宕機了,Redis自己(包括它的不少客戶端)都沒有實現自動進行主備切換,而Redis-sentinel自己也是一個獨立運行的進程,它能監控多個master-slave集羣,發現master宕機後能進行自懂切換數據結構

20)數據結構:string,list,set,sorted set,hashsocket

相關文章
相關標籤/搜索