[TOC]
* Redis是使用c語言開發的。
* Redis是一個基于內存的高性能key-value數據庫。
* Redis是單線程
* 每秒可以處理超過10萬次讀寫操作
* 單個value的最大限制是1GB
* 默認端口6379
## Reids三種不同刪除策略
**定時刪除**:在設置鍵的過期時間的同時,創建一個定時任務,當鍵達到過期時間時,立即執行對鍵的刪除操作
**惰性刪除**:放任鍵過期不管,但在每次從鍵空間獲取鍵時,都檢查取得的鍵是否過期,如果過期的話,就刪除該鍵,如果沒有過期,就返回該鍵
**定期刪除**:每隔一點時間,程序就對數據庫進行一次檢查,刪除里面的過期鍵,至于要刪除多少過期鍵,以及要檢查多少個數據庫,則由算法決定。
## Reids6種淘汰策略
>* **noeviction**:不刪除策略, 達到最大內存限制時, 如果需要更多內存, 直接返回錯誤信息。大多數寫命令都會導致占用更多的內存(有極少數會例外。
>* **allkeys-lru**:所有key通用; 優先刪除最近最少使用(less recently used ,LRU) 的 key。
>* **volatile-lru**:只限于設置了 expire 的部分; 優先刪除最近最少使用(less recently used ,LRU) 的 key。
>* **allkeys-random**:所有key通用; 隨機刪除一部分 key。
>* **volatile-random**:只限于設置了**expire**的部分; 隨機刪除一部分 key。
>* **volatile-ttl**:只限于設置了**expire**的部分; 優先刪除剩余時間(time to live,TTL) 短的key。
## LRU算法實現:
1. 通過雙向鏈表來實現,新數據插入到鏈表頭部;
2. 每當緩存命中(即緩存數據被訪問),則將數據移到鏈表頭部;
3. 當鏈表滿的時候,將鏈表尾部的數據丟棄。
>LinkedHashMap:HashMap和雙向鏈表合二為一即是LinkedHashMap。HashMap是無序的,LinkedHashMap通過維護一個額外的雙向鏈表保證了迭代順序。該迭代順序可以是插入順序(默認),也可以是訪問順序。
## 緩存穿透、緩存擊穿、緩存雪崩
**緩存穿透**:指查詢一個一定不存在的數據,如果從存儲層查不到數據則不寫入緩存,這將導致這個不存在的數據每次請求都要到DB去查詢,可能導致DB掛掉。
>解決方案:
>1. 查詢返回的數據為空,仍把這個空結果進行緩存,但過期時間會比較短;
>2. 布隆過濾器:將所有可能存在的數據哈希到一個足夠大的bitmap中,一個一定不存在的數據會被這個bitmap攔截掉,從而避免了對DB的查詢。
**緩存擊穿**:對于設置了過期時間的key,緩存在某個時間點過期的時候,恰好這時間點對這個Key有大量的并發請求過來,這些請求發現緩存過期一般都會從后端DB加載數據并回設到緩存,這個時候大并發的請求可能會瞬間把DB壓垮。
>解決方案:
>1. 使用互斥鎖:當緩存失效時,不立即去Ioaddb,先使用如Redis的setnx去設置一個互斥鎖,當操作成功返回時再進行Ioaddb的操作并回設緩存,否則重試get緩存的方法。
>2. 永遠不過期:物理不過期,但邏輯過期(后臺異步線程去刷新)。
**緩存雪崩**:設置緩存時采用了相同的過期時間,導致緩存在某一時刻同時失效,請求全部轉發到DB,DB瞬時壓力過重雪崩。
* 與緩存擊穿的區別:雪崩是很多key,擊穿是某一個key緩存。
>解決方案:
>將緩存失效時間分散開,比如可以在原有的失效時間基礎上增加一個隨機值,比如1-5分鐘隨機,這樣每一個緩存的過期時間的重復率就會降低,就很難引發集體失效的事件
- 簡介
- PHP
- 字符串函數
- 數組函數
- 正則
- 加密函數
- 面向對象
- 關鍵字
- 設計模式
- 魔術方法
- 機制擴展
- 會話機制
- PHP框架
- laravel
- 問題
- swoole
- easyswoole
- workerman
- 數據庫
- Sphinx
- MongoDB
- MemCache
- Redis
- 基礎操作
- 數據類型
- 持久化
- 分布式鎖
- 內存模型
- redis高級特性
- MySql
- 基礎操作
- 數據類型
- 數據表引擎
- 鎖機制
- 事務處理
- 存儲過程
- 觸發器
- 索引
- 關聯查詢
- 分析SQL語句-優化查詢
- 分區分表
- 主從復制
- MySql安全性
- 網絡協議
- HTTP
- header詳解
- 狀態碼
- nginx-配置
- 邏輯算法
- 時間和空間復雜度
- 常見算法
- 數據結構
- 核心
- 進程、線程、協程
- 存儲容量-計量單位
- 開發軟件及配置
- 版本控制器
- Git
- Fidder
- Fidder-Android7
- 自動化部署
- Jenkins
- supervisor
- Elasticsearch
- LogStash
- RabbitMQ
- AB測試
- JAVA-JDK
- FileBeat
- PhpStorm
- Composer
- Linux
- API安全
- 高并發及大流量相關概念
- 網站優化
- WEB
- Electron