Redis?命令詳解與實戰(zhàn)案例
Redis 命令詳解與實戰(zhàn)案例
一、Redis 基礎介紹
Redis(Remote Dictionary Server)是一個開源的、基于內(nèi)存的鍵值存儲系統(tǒng),支持多種數(shù)據(jù)結構,可用作數(shù)據(jù)庫、緩存和消息代理。它提供字符串(Strings)、哈希(Hashes)、列表(Lists)、集合(Sets)、有序集合(Sorted Sets)等多種數(shù)據(jù)結構的存儲。
二、Redis 核心數(shù)據(jù)結構與命令
1. 字符串(Strings)
最基礎的數(shù)據(jù)類型,可存儲文本、數(shù)字或二進制數(shù)據(jù)(最大512MB)。
常用命令:
| 命令 | 語法 | 說明 |
|---|---|---|
| SET | SET key value [EX seconds] | 設置鍵值對(帶過期時間) |
| GET | GET key | 獲取鍵值 |
| INCR | INCR key | 值增加1(整數(shù)操作) |
| DECR | DECR key | 值減少1(整數(shù)操作) |
| APPEND | APPEND key value | 追加值到現(xiàn)有字符串 |
| STRLEN | STRLEN key | 獲取字符串長度 |
實戰(zhàn)案例:
# 設置用戶會話 > SET user:1000:session "session_token" EX 3600# 1小時后過期 # 網(wǎng)站訪問計數(shù)器 > SET visits 0 > INCR visits# 訪問量+1 (integer) 1 > INCR visits (integer) 2 # 緩存商品信息 > SET product:1234:name "iPhone 15 Pro" > GET product:1234:name "iPhone 15 Pro"
2. 哈希(Hashes)
鍵值對集合,適合存儲對象(如用戶信息)。
常用命令:
| 命令 | 語法 | 說明 |
|---|---|---|
| HSET | HSET key field value | 設置哈希字段值 |
| HGET | HGET key field | 獲取哈希字段值 |
| HGETALL | HGETALL key | 獲取所有字段和值 |
| HDEL | HDEL key field | 刪除字段 |
| HINCRBY | HINCRBY key field increment | 增加數(shù)值字段的值 |
實戰(zhàn)案例:
# 存儲用戶信息 > HSET user:1000 name "Alice" age 30 email "alice@example.com" (integer) 3 # 獲取用戶信息 > HGET user:1000 name "Alice" > HGETALL user:1000 1) "name" 2) "Alice" 3) "age" 4) "30" 5) "email" 6) "alice@example.com" # 更新用戶年齡 > HINCRBY user:1000 age 1 (integer) 31
3. 列表(Lists)
有序字符串集合,支持從兩端插入/刪除元素,實現(xiàn)隊列和棧。
常用命令:
| 命令 | 語法 | 說明 |
|---|---|---|
| LPUSH | LPUSH key value [value …] | 左側插入元素 |
| RPUSH | RPUSH key value [value …] | 右側插入元素 |
| LPOP | LPOP key | 左側彈出元素 |
| RPOP | RPOP key | 右側彈出元素 |
| LRANGE | LRANGE key start stop | 獲取列表片段 |
| LTRIM | LTRIM key start stop | 修剪列表 |
實戰(zhàn)案例:
# 消息隊列(生產(chǎn)者) > LPUSH notifications "Order #1001 shipped" > LPUSH notifications "User login alert" # 消息隊列(消費者) > RPOP notifications "Order #1001 shipped" # 最新動態(tài)(保留最近的10條) > LPUSH user:1000:activity "Liked post #123" > LTRIM user:1000:activity 0 9# 只保留前10條
4. 集合(Sets)
無序的唯一字符串集合,支持交集、并集等操作。
常用命令:
| 命令 | 語法 | 說明 |
|---|---|---|
| SADD | SADD key member [member …] | 添加成員 |
| SREM | SREM key member [member …] | 移除成員 |
| SMEMBERS | SMEMBERS key | 獲取所有成員 |
| SISMEMBER | SISMEMBER key member | 檢查成員是否存在 |
| SINTER | SINTER key [key …] | 多個集合的交集 |
實戰(zhàn)案例:
# 用戶標簽系統(tǒng) > SADD user:1000:tags "sports" "music" "tech" > SADD user:1001:tags "music" "food" "travel" # 查找共同興趣 > SINTER user:1000:tags user:1001:tags 1) "music" # 內(nèi)容去重 > SADD article:1234:viewers "user1000" "user1001" > SADD article:1234:viewers "user1000"# 重復添加無效 (integer) 0
5. 有序集合(Sorted Sets)
帶分數(shù)的有序集合,元素按分數(shù)排序,適合排行榜場景。
常用命令:
| 命令 | 語法 | 說明 |
|---|---|---|
| ZADD | ZADD key score member | 添加成員(帶分數(shù)) |
| ZRANGE | ZRANGE key start stop [WITHSCORES] | 按索引范圍獲取成員 |
| ZREVRANGE | ZREVRANGE key start stop [WITHSCORES] | 按索引倒序獲取成員 |
| ZRANK | ZRANK key member | 獲取成員排名(升序) |
| ZREVRANK | ZREVRANK key member | 獲取成員排名(降序) |
實戰(zhàn)案例:
# 游戲排行榜 > ZADD leaderboard 2500 "PlayerA" > ZADD leaderboard 3200 "PlayerB" > ZADD leaderboard 1800 "PlayerC" # 獲取前3名 > ZREVRANGE leaderboard 0 2 WITHSCORES 1) "PlayerB" 2) "3200" 3) "PlayerA" 4) "2500" 5) "PlayerC" 6) "1800" # 更新玩家分數(shù) > ZADD leaderboard 3500 "PlayerB"# 更新分數(shù)
三、Redis 高級功能與命令
1. 鍵管理命令
| 命令 | 語法 | 說明 |
|---|---|---|
| KEYS | KEYS pattern | 查找匹配的鍵 |
| DEL | DEL key [key …] | 刪除鍵 |
| EXPIRE | EXPIRE key seconds | 設置鍵過期時間 |
| TTL | TTL key | 查看鍵剩余生存時間 |
| TYPE | TYPE key | 查看鍵的數(shù)據(jù)類型 |
實戰(zhàn)案例:
> SET session:abc123 "user_data" EX 1800# 30分鐘后過期 > TTL session:abc123 (integer) 1798 > KEYS session:*# 查找所有會話鍵 1) "session:abc123"
2. 事務操作(MULTI/EXEC)
> MULTI# 開始事務 > SET balance:1000 500 > DECRBY balance:1000 100# 扣款100 > INCRBY sales:2023 100# 增加銷售額 > EXEC# 執(zhí)行事務 1) OK 2) (integer) 400 3) (integer) 100
3. Lua 腳本支持
# 原子性更新計數(shù)器并返回新值
> EVAL "local current = redis.call('GET', KEYS[1]);
if current then
current = tonumber(current) + 1
else
current = 1
end;
redis.call('SET', KEYS[1], current);
return current" 1 page:views4. 發(fā)布/訂閱(Pub/Sub)
# 終端1:訂閱頻道 > SUBSCRIBE news # 終端2:發(fā)布消息 > PUBLISH news "Breaking: Redis 7 released!"
四、Redis 最佳實踐與性能優(yōu)化
1. 鍵命名規(guī)范
- 使用冒號分隔的命名空間:
user:1000:profile - 避免過長的鍵名(影響內(nèi)存和性能)
- 示例:
order:2023:09:1234
2. 內(nèi)存優(yōu)化技巧
# 使用哈希壓縮小型對象 > HSET user:1000 name "Alice" age 30 # 比多個獨立鍵更節(jié)省內(nèi)存: # SET user:1000:name "Alice" # SET user:1000:age 30
3. 批量操作提升性能
# 管道(Pipeline)操作
(echo -en "PING\r\nPING\r\nPING\r\n"; sleep 1) | nc localhost 6379
# 現(xiàn)代客戶端支持(如Redis-py)
pipe = redis.pipeline()
pipe.set('key1', 'value1')
pipe.get('key2')
pipe.execute()4. 持久化策略選擇
| 策略 | 特點 |
|---|---|
| RDB | 定時快照,恢復快,可能丟失最后一次快照后的數(shù)據(jù) |
| AOF | 記錄所有寫操作,數(shù)據(jù)更安全,文件較大 |
| RDB+AOF | 推薦方案,結合兩者優(yōu)勢(Redis 4.0+ 支持) |
五、Redis 實戰(zhàn)應用場景
1. 緩存穿透解決方案
# 布隆過濾器防止緩存穿透 > BF.RESERVE products 0.01 1000000 > BF.ADD products "product:1234" > BF.EXISTS products "product:5678"# 返回0表示不存在
2. 分布式鎖實現(xiàn)
# 獲取鎖(SET擴展命令)
> SET lock:order_1234 UUID NX EX 30
# 釋放鎖(Lua腳本保證原子性)
> EVAL "if redis.call('GET', KEYS[1]) == ARGV[1] then
return redis.call('DEL', KEYS[1])
else
return 0
end" 1 lock:order_1234 UUID3. 實時排行榜
# 添加分數(shù) > ZADD leaderboard 95 "PlayerA" 87 "PlayerB" 92 "PlayerC" # 獲取前10名 > ZREVRANGE leaderboard 0 9 WITHSCORES # 獲取玩家排名 > ZREVRANK leaderboard "PlayerB"
六、Redis 命令速查表
| 類別 | 常用命令 |
|---|---|
| 通用 | KEYS, DEL, EXISTS, EXPIRE, TTL, TYPE |
| 字符串 | SET, GET, INCR, DECR, APPEND, STRLEN |
| 哈希 | HSET, HGET, HGETALL, HDEL, HINCRBY |
| 列表 | LPUSH, RPUSH, LPOP, RPOP, LRANGE, LTRIM |
| 集合 | SADD, SREM, SMEMBERS, SISMEMBER, SINTER |
| 有序集合 | ZADD, ZRANGE, ZREVRANGE, ZRANK, ZREVRANK |
| 事務 | MULTI, EXEC, DISCARD, WATCH |
| 發(fā)布訂閱 | PUBLISH, SUBSCRIBE, UNSUBSCRIBE |
通過掌握這些核心命令和實戰(zhàn)案例,您將能夠高效地利用 Redis 構建高性能應用系統(tǒng)。建議結合 Redis 官方文檔(https://redis.io/commands)深入學習每個命令的詳細參數(shù)和使用場景。
到此這篇關于Redis 命令詳解與實戰(zhàn)案例的文章就介紹到這了,更多相關Redis 命令實戰(zhàn)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
一文詳解Redis在Ubuntu系統(tǒng)上的安裝步驟
安裝redis在Ubuntu上有多種方法,下面這篇文章主要給大家介紹了關于Redis在Ubuntu系統(tǒng)上安裝的相關資料,文中通過圖文以及代碼介紹的非常詳細,需要的朋友可以參考下2024-07-07
Redis實現(xiàn)和數(shù)據(jù)庫的數(shù)據(jù)同步
本文介紹了Redis與傳統(tǒng)數(shù)據(jù)庫數(shù)據(jù)同步的幾種常見方法,包括CacheAside、WriteThrough、WriteBehind,以及如何通過分布式事務、樂觀鎖、數(shù)據(jù)過期策略和消息隊列來解決數(shù)據(jù)一致性問題,每種方法都有其適用場景和優(yōu)缺點,需要根據(jù)具體需求進行選擇2025-01-01
解決linux下redis數(shù)據(jù)庫overcommit_memory問題
這篇文章介紹了解決linux下redis數(shù)據(jù)庫overcommit_memory問題的方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-02-02
CentOS7.5使用mysql_multi方式安裝MySQL5.7.28多實例(詳解)
這篇文章主要介紹了CentOS7.5使用mysql_multi方式安裝MySQL5.7.28多實例,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2020-01-01

