1、五種基礎數據結構
- 字符
- hash 數組+鏈表
- set
- sorted set
- list
2、集群模式(cluster, Sentinel)
- cluster:redis3.0主推模式,采用哈希槽分片,優勢是易擴容
- Sentinel:哨兵模式、主備。高可用
3、持久化機制
- AOF:命令追加,優點:不會丟數據,缺點:恢復比較慢
- RDB:存儲快照,優點:恢復比較快,方便持久化,缺點:可能會丟數據
4、淘汰策略
?在redis.conf 中配置 maxmemory指定redis能使用的最大內存,達到內存最大限制時。redis會根據m- axmemory-policy,來決定具體的行為,淘汰策略:
- noeviction:不刪除策略,達到maxmemory,直接返回錯誤
- allkeys-lru:所有key通用,優先刪除最少使用的key
- volatile-lru:只限于設置了expire的部分,優先刪除最少使用的key
- allkeys-random:所有key通用,隨即刪除一部分
- volatile-random:只限于設置了expire的部分,隨機刪除一部分
- volatile-ttl:只限于設置了expire的部分,優先刪除快過期的key
5、過期策略
- 定期刪除:redis每隔100ms就隨機抽取一些設置了過期時間的key,檢查是否過期,符合則刪除
- 惰性刪除:每次get的時候會檢查是否過期,過期則刪除
?目前redis采用的是定期刪除+惰性刪除兩種策略
6、緩存穿透
?產生原因:請求的數據在緩存中大量不命中。導致請求走數據庫
?解決辦法:如果參數不合法可以使用BloomFilter攔截;設置一個較短過期時間的空對象到緩存中
7、緩存雪崩
?產生原因:redis掛掉,請求全走數據庫,對緩存數據設置了相同的過期時間,導致某段時間內緩存失效,請求全走數據庫
?解決辦法:過期時間加隨機值;事發前:實現redis的高可用,事發中:可以設置本地緩存+限流,事發后:redis持久化恢復
8、緩存與數據庫的雙寫一致性
?先刪除緩存,再更新數據庫
?先更新數據庫,在刪除緩存
9、keys 和 scan 命令
?keys時間復雜度為O(n),阻塞
?scan cursor [MATCH pattern] [COUNT count] 時間,非阻塞,游標掃描
10、查看redis的使用
?info命令
10、如何使用redis存放熱點key
?解決方案:限定Redis最大占用內存,Redis會根據自身數據淘汰策略,留下熱數據到內存