redis本質上是乙個key-value型別的記憶體資料庫,整個資料庫載入在記憶體中進行操作,定期通過非同步操作把資料庫資料flush到硬碟上進行儲存。因為是純記憶體操作,redis的效能非常出色,每秒可以處理超過10萬次讀寫操作,是已知效能最快的key-value db。
redis支援多種資料結構:string、list、hash、set、 sorted set,單個value的最大限制是1gb。使用redis可以用list來做fifo雙向鍊錶,實現乙個輕量級的高效能訊息佇列服務;用set做高效能的tag系統。redis還可以對存入的key-value設定expire時間。
redis由於資料庫容量受到物理記憶體的限制,不能用作海量資料的高效能讀寫(可以用mongodb或者elasticsearch),因此它的適用場景主要是在較小資料量的高效能操作和運算上。(可以做中介軟體)
allkeys-lru:所有key通用,優先刪除最近最少使用的key(least recently used,lru);
allkeys-random:所有key通用,隨機刪除一部分key;
volatile-lru:只限於設定了expire的部分,嘗試**最少使用的鍵;
volatile-random:只限於設定了expire的部分,隨機刪除一部分expire的key;
volatile-ttl:只限於設定了expire的部分,優先刪除剩餘時間端的key(time to time , ttl)
redis為了達到最快的讀寫速度將資料都讀到記憶體中,並通過記憶體的方式將資料寫入磁碟。所以redis具有快速和資料持久化的特徵;如果不將資料放在記憶體中,磁碟i/o速度將嚴重影響redis的效能。
事務是乙個單獨的隔離操作:事務中的所有命令都會序列化、按順序地執行。事務在執行的過程中,不會被其他客戶端發來的命令請求所打斷。
事務是乙個原子操作:事務中的命令要麼全部被執行,要麼全部都不執行。
客戶端向服務端傳送乙個查詢請求,並監聽socket返回,通常是以阻塞模式,等待服務端響應;
服務端處理命令,並將結果返回給客戶端;
redis管道技術可以在服務端未響應時,客戶端可以繼續想伺服器端傳送請求,並最終一次性讀取所有服務端的響應。
分割槽可以讓redis管理更大的記憶體,redis可以使用所有機器的記憶體。
如果沒有分割槽,redis最多使用一台機器的記憶體。
分割槽使得redis的計算能力通過簡單地增加計算機的數量得到成倍提公升;redis的網路頻寬也會隨著計算機和網絡卡的增加而成倍增長。
快取穿透是指查詢乙個一定不存在的資料,由於快取不命中,接著查詢資料庫也無法查詢出結果,因此也不會寫入到快取中,這將會導致每個查詢都會去請求資料庫,造成快取穿透。
解決方案:
這兩種方法的比較:
解決快取穿透
適用場景
維護成本
布隆過濾
1、 資料命中不高
2、資料頻繁變化,實時性高
1、**維護複雜
2、快取空間占用少
快取空物件
1、資料命中不高
2、資料頻繁變化,實時性高
1、**維護簡單
2、需要過多的快取空間
3、資料不一致問題
快取雪崩是指,由於快取層承載著大量請求,有效的保護了儲存層,但是如果快取層由於某些原因整體不能提供服務,於是所有的請求都會到達儲存層,儲存層的呼叫量會暴增,造成儲存層也會掛掉(如快取層大量的key在同一時間過期,這樣大量key的請求就會直接訪問儲存層)
解決方案:
Redis高階高階(二)
一 訊息通知 在一些 上,經常會有一些發布 訂閱或者郵件訂閱的功能,尤其一些部落格上。其實這種問題很常見,當頁面需要進行如傳送郵件 複雜的計算時會阻塞頁面的渲染。為了避免使用者等待太久,應該使用其他程序單獨完成此類操作,這裡郵件訂閱可以用任務佇列來實現,具體來說,當需要傳送郵件時,將其存入佇列中,另...
Qmake高階概念
迄今為止,我們見到的qmake專案檔案都非常簡單,僅僅是一些name value和name value的列表行。qmake提供了很多更強大的功能,比如你可以使用乙個簡單的專案檔案來為多個平台生成makefile。到目前為止,你已經看到在專案檔案中使用的 操作符和 操作符。這裡能夠提供更多的可供使用的...
redis高階命令
sort 命令 1 修飾符 desc 降序排列 2 允許元素按照字段序列排序 alpha 此時的排序相當於字串排序,數字轉化為字元 12 排在 2 的前面 3 可以指定避開某些元素,然後開始排序,並返回前n個,語法為 sort key skip count 比如 sort list 3 10 表示大...