溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

redis面試中常被問到的重點有哪些

發布時間:2022-02-14 13:36:01 來源:億速云 閱讀:143 作者:iii 欄目:關系型數據庫
# Redis面試中常被問到的重點有哪些

Redis作為高性能的鍵值存儲系統,在面試中經常被深入考察。以下是Redis面試中的核心知識點整理,涵蓋基礎概念、數據結構、持久化機制、高可用方案等關鍵內容。

---

## 一、Redis基礎概念

### 1. Redis是什么?
- **內存數據庫**:數據主要存儲在內存中,讀寫性能極高(10萬+ QPS)
- **鍵值存儲**:支持多種數據結構(String/Hash/List/Set/ZSet等)
- **單線程模型**:基于Reactor模式的事件驅動架構(6.0后支持多線程IO)

### 2. Redis vs Memcached
| 特性          | Redis                          | Memcached              |
|---------------|--------------------------------|------------------------|
| 數據類型       | 5種核心+擴展類型               | 僅字符串               |
| 持久化         | 支持RDB/AOF                   | 不支持                 |
| 集群模式       | Redis Cluster/Codis           | 需客戶端分片           |
| 線程模型       | 單線程(IO多線程可選)         | 多線程                 |

---

## 二、核心數據結構與使用場景

### 1. String(字符串)
- **底層實現**:SDS(Simple Dynamic String)
- **典型場景**:
  - 緩存(用戶會話、頁面緩存)
  - 計數器(`INCR article:readcount:1001`)
  - 分布式鎖(`SETNX lock:order 1 EX 30`)

### 2. Hash(哈希表)
- **底層結構**:ziplist(元素少時)/ hashtable
- **使用示例**:
  ```bash
  HSET user:1001 name "張三" age 28
  HGETALL user:1001

3. List(列表)

  • 實現方式:quicklist(ziplist鏈表)
  • 應用場景
    • 消息隊列(LPUSH+BRPOP)
    • 最新消息排行(LTRIM保持固定長度)

4. Set(集合)

  • 特點:無序、元素唯一
  • 實際應用
    • 共同好友(SINTER user:1001:friends user:1002:friends
    • 抽獎活動(SRANDMEMBER lottery:users 3

5. Sorted Set(有序集合)

  • 底層結構:ziplist + skiplist
  • 經典案例
    • 排行榜(ZADD leaderboard 95 "player1"
    • 延遲隊列(score設為執行時間戳)

三、持久化機制

1. RDB(快照)

  • 觸發方式
    • 手動執行SAVE/BGSAVE
    • 配置自動保存(save 900 1
  • 優缺點
    • ? 恢復速度快
    • ? 可能丟失最后一次快照后的數據

2. AOF(追加日志)

  • 寫回策略
    • appendfsync always(每次寫操作)
    • appendfsync everysec(默認,每秒)
    • appendfsync no(由系統決定)
  • 重寫機制
    • BGREWRITEAOF壓縮日志文件

3. 混合持久化(Redis 4.0+)

  • 結合RDB和AOF優勢:
    • 定期全量備份(RDB)
    • 增量寫入AOF日志

四、高可用架構

1. 主從復制

  • 復制流程
    1. 從節點執行SLAVEOF 127.0.0.1 6379
    2. 主節點生成RDB文件發送給從節點
    3. 后續通過傳播寫命令保持同步

2. Sentinel(哨兵)

  • 核心功能
    • 監控節點狀態
    • 自動故障轉移(選舉新主節點)
    • 配置中心(通知客戶端新主節點地址)
  • 部署建議:至少3個Sentinel實例

3. Redis Cluster

  • 數據分片
    • 16384個哈希槽(0-16383)
    • CLUSTER ADDSLOTS分配槽位
  • 節點通信
    • Gossip協議交換信息
    • 每秒1次PING/PONG

五、性能優化

1. 內存管理

  • 內存淘汰策略
    • volatile-lru:從已設置過期時間的鍵中淘汰最近最少使用的
    • allkeys-lru:從所有鍵中淘汰LRU
  • 優化建議
    • 使用SCAN替代KEYS
    • 控制Hash/List的元素數量

2. 管道(Pipeline)

# Python示例
pipe = r.pipeline()
for i in range(1000):
    pipe.set(f"key:{i}", i)
pipe.execute()

3. 慢查詢分析

  • 配置閾值(毫秒):
    
    slowlog-log-slower-than 10
    slowlog-max-len 128
    
  • 查看慢日志:
    
    SLOWLOG GET 5
    

六、事務與Lua腳本

1. 事務特性

  • ACID表現
    • 原子性:單條命令原子執行,事務整體不保證
    • 隔離性:串行執行
  • 命令序列
    
    MULTI
    SET book:1 "Redis實戰"
    INCR sales:count
    EXEC
    

2. Lua腳本

  • 優勢
    • 減少網絡開銷(多個操作合并)
    • 原子性執行
  • 示例
    
    -- 限流腳本
    local key = KEYS[1]
    local limit = tonumber(ARGV[1])
    local current = tonumber(redis.call('GET', key) or 0
    if current + 1 > limit then
    return 0
    else
    redis.call('INCR', key)
    return 1
    end
    

七、緩存問題解決方案

1. 緩存穿透

  • 現象:大量查詢不存在的數據
  • 解決方案
    • 布隆過濾器(BF.ADD
    • 緩存空值(SET null 60

2. 緩存雪崩

  • 預防措施
    • 隨機過期時間(EXPIRE key 3600 + rand(600)
    • 多級緩存(本地緩存+Redis)

3. 緩存擊穿

  • 熱點Key處理
    • 互斥鎖(SETNX lock:key 1
    • 永不過期策略(邏輯過期時間)

八、生產環境實踐

1. 監控指標

  • 關鍵指標
    • 內存使用率(used_memory
    • 命中率(keyspace_hits/(keyspace_hits+keyspace_misses)
    • 連接數(connected_clients

2. 安全配置

  • 必要措施
    • 啟用密碼(requirepass
    • 禁用危險命令:
    rename-command FLUSHALL ""
    rename-command CONFIG ""
    

3. 版本選擇

  • 建議
    • 生產環境使用穩定版(偶數版本如7.2.x)
    • 新特性關注:
      • Redis 6.0:多線程IO
      • Redis 7.0:Function API

九、高頻面試題示例

  1. Redis為什么快?

    • 內存操作
    • IO多路復用
    • 單線程避免鎖競爭
  2. 如何實現分布式鎖?

    • SETNX + EXPIRE(Redlock算法)
    • 對比Zookeeper/Etcd方案
  3. BigKey如何處理?

    • 拆分(HSCAN分批刪除)
    • 使用Lazy Free(UNLINK
  4. 集群數據如何遷移?

    • MIGRATE命令
    • 第三方工具(redis-shake)

掌握以上知識點后,建議通過以下方式深化理解: 1. 動手搭建Redis集群環境 2. 使用redis-benchmark進行壓測 3. 閱讀Redis核心源碼(如dict.c/ae.c) “`

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女