Redis 是高性能鍵值存儲,支持 String、List、Set、ZSet、Hash 五大數據結構,操作原子性強,支持持久化(RDB/AOF)與主從同步。官方基準:50 並發 10 萬請求,讀 8.1 萬/s,寫 11 萬/s(256B 字符串)。
wget https://redis.googlecode.com/files/redis-2.4.7.tar.gz
tar zxvf redis-2.4.7.tar.gz && cd redis-2.4.7 && make
# 生成:redis-server, redis-cli, redis-benchmark, redis-stat
src/redis-server & # 後台啟動
src/redis-cli # 客戶端連接
redis> set name helloworld
redis> get name
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.2.1</version>
</dependency>
API 文檔:Jedis 2.1.0。Key 無長度限制,支持模糊匹配(KEYS pattern)。
場景:商品列表分頁,高併發讀。
方案:
LRANGE start stop 獲取分頁 ID,再批量取 VO性能:List 基於雙向鏈表,分頁復雜度 O(S+N),響應時間 30ms。
難點:List 不支持批量 SET,單個 LPUSH 導致列表閃爍影響前端。
解決:先推入臨時 Key(tmp:list),完成後 RENAME tmp:list list 原子切換,零閃爍。
Redis 有序集合(ZSet)底層採用 跳表:多層級索引鏈表,查詢/插入 O(log N),實現比紅黑樹簡單。參考博客深入理解原理。
| 問題 | 對策 |
|---|---|
| 強依賴 Redis,掛掉直接返回空頁 | 完善監控:Key QPS、內存佔用、後台 KV 操作介面 |
| 過期時間設置不便 | MSET 無 TTL 參數,需配合 Lua 腳本或管道批量 SETEX |
| 數據實時性 | 定時任務 1 分鐘刷新,接受極短延遲換取高性能 |
# 安裝啟動
tar zxvf redis-2.8.9.tar.gz && cd redis-2.8.9 && make && make install
redis-server & # 後台運行
redis-cli # 客戶端
127.0.0.1:6379> keys *
127.0.0.1:6379> set key "hello world"
127.0.0.1:6379> get key
# 停止
redis-cli shutdown
# 或 kill -9 PID(Redis 處理 SIGTERM 安全關閉)
Redis 豐富數據結構+原子操作極大擴展緩存場景。列表分頁配合 RENAME 原子切換解決閃爍;跳表支撐高性能有序集合。運維層面需建立監控體系,合理設置 TTL,接受最終一致性換取極致讀性能。