除了訪問資料,redis還可以支援mq等操作,這裡面有些小細節,需要注意一下:
----------------------------------------
1、事務處理
大家都說redis支援事務,但實際上redis的事務跟關聯式資料庫的事務不一樣。不支援rollback操作。
redis的事務會先有乙個將命令放入佇列的過程,如果成功放入佇列,返回值為queue,否則為失敗。如果某個命令放入佇列時報錯,那麼客戶端會終止事務,並且丟掉這個事務;但在2.6.5版本之前,即使發生了錯誤,也沒有丟棄事務,如果執行exec,則仍然會執行所有已放入佇列的命令。
綜上:只要成功放入佇列的命令,redis就會堅定不移的執行;執行過程中如果發生錯誤,也不會回滾,只是會把所有命令執行結果返回客戶端,需要客戶端自行處理。
所以,redis的事務實際不是我們理解的關聯式資料庫的事務,redis的事務實際上就是提供了一次性執行某些命令的方式,該執行過程中不會被其它客戶端打擾。redis的事務連原子性(資料庫事務的原子性,不回滾,所以不滿足)都不滿足!!!
2、慢查詢
redis是為高併發設計的,最高併發在8-11w/s。因為redis是單執行緒的,所以如果有操作速度比較慢,那後果將是極其嚴重的,因為這會阻塞其它客戶端對redis的訪問。
redis除了string,其它型別並沒有對value的大小做出限制,理論上可以存放redis最大記憶體大小的資料。假設我們要存乙個100m的檔案到redis,可想而知,肯定快不了;
redis關於慢查詢的配置有兩個:
slowlog-log-slower-than 10000 -- 慢查詢時間設定,大於此時間的操作會被記錄到慢查詢日誌中,單位是微秒,1ms = 1000 millionsecond
slowlog-max-len 128 --慢查詢日誌長度
慢查詢日誌是存放於記憶體中的乙個list,預設長度128,因為在記憶體中,操作速度極快,因此是否開啟慢查詢日誌對redis效能的影響微乎其微。
對於線上slow-max-len配置的建議:線上可加大slow-max-len的值,記錄慢查詢存長命令時redis會做截斷,不會占用大量記憶體,線上可設定1000以上;
對於線上slowlog-log-slower-than配置的建議:預設為10毫秒,根據redis併發量來調整,對於高併發比建議為1毫秒
注意:慢查詢只記錄命令在redis的執行時間,不包括排隊、網路傳輸時間。慢查詢是先進先出的佇列,訪問日誌記錄出列丟失,需定期執行slow get,將結果儲存到其它裝置中(如mysql);
如果發生了無法忍受的慢查詢,一般處理辦法有:
1、對資料切分,將大資料切分為多個小資料進行操作;
2、另起快取,專門用於慢查詢業務操作,避免拖慢系統公用redis速度。
另:這裡插一句,上面我們說假設要存100m的物件到redis,那麼如果真的這麼做,應該用redis的哪種資料型別呢?顯然是string,因為其它的都不合適嘛。一般這種操作都是壓縮後轉為位元組流處理,而且由於訪問較慢,一般不跟主redis庫放一起,以免影響業務高峰期的正常業務處理。除了放大檔案要比較警惕,redis自己的記憶體一般也不建議太大,原因參考:
其它待補充。
3、發布訂閱
參考:redis的發布訂閱就是用的 發布-訂閱模式(觀察者模式)實現的,存放了乙個map跟乙個list,map放所有的主題,list放客戶端列表,如果乙個主題有了訊息,會根據map的value找到list中的客戶端列表,然後逐個給客戶端發訊息。
4、持久化到硬碟
redis的持久化方案有rdb跟aof兩種,rdb就是快照模式,aof指日誌模式,預設採用rdb模式。
rdb模式因為快照生成的備份檔案字尾為.rdb而命名,aof是因為把所有操作儲存於乙個字尾為.aof的檔案二命名;
rdb的原理是根據conf設定的條件,如果滿足,則將另起執行緒,將當前redis中的資料被分到某個檔案;aof的原理是將redis收到的所有操作指令儲存到乙個日誌檔案。
rdb速度快,而且由於是另起執行緒進行儲存,基本對redis無影響,一般生產採用該模式。aof因為所有操作都要記錄乙個日誌檔案,會嚴重影響redis效能,但由於實時記錄,如果發生宕機,能非常好的還原資料。aof看似美好,實際幾乎沒人用,因為使用redis的出發點之一就是效能高,而這個會影響能能;資料的問題,一般採用雙機備份的機制,即一台redis主機對應一台redis備機,採用rdb機制,如果主機宕機,馬上切換到備機,如果備機也壞了,那最壞的情況還是有最近的rdb備份不是。
rdb跟aof的配置都在redis.conf中配置,rdb可以配置多條配置,同時生效。aof因為記錄了所有操作命令,檔案會比較大,因此有壓縮機制,也就是rewrite的過程,這個壓縮不是讀aof檔案進行去重操作,而是利用的快照機制來做的。
rdb檔案的儲存格式跟解讀參照:
5、運維監控
對redis實時監控的軟體,有redislive跟treenms兩個,treenms為國產軟體,也挺好的;
-------------------------------------
先這麼多吧,碰到了再補充
HTML CSS一些需要注意的基礎知識
border 0 邊框存在但不現實 並且佔記憶體 border none 邊框未渲染 html的書寫規範 1 標籤換行。2 標籤縮排。3 標籤要關閉。4 標籤名屬性不能為空。5 首先要!doctype宣告。6 編碼格式為utf 8。7 標籤要半形英文小寫。8 合理注釋。9 類名,id名要有語意的注釋...
HTML CSS一些需要注意的基礎知識
border 0 邊框存在但不現實 並且佔記憶體 border none 邊框未渲染 html的書寫規範 1 標籤換行。2 標籤縮排。3 標籤要關閉。4 標籤名屬性不能為空。5 首先要!doctype宣告。6 編碼格式為utf 8。7 標籤要半形英文小寫。8 合理注釋。9 類名,id名要有語意的注釋...
foreach 一些需要注意的地方
通常迴圈訪問陣列都用for迴圈 例如 for i 0 i i 3 i echo arr i 但通過手工 操作乙個大陣列來說,用foreach迴圈的 更少 上面的 可以這樣寫 foreach arr as value echo value 下面來仔細 下foreach使用中的一些問題 1.foreac...