一、前言
Redis 提供了5種數據類型:String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Zset(有序集合),理解每種數據類型的特點對於redis的開發和運維非常重要。
String是Redis的最基本的數據類型,可以理解為與 Memcached 一模一樣的類型,即Key-Value型的數據,String類型是二進制安全的,另外 Redis 的 String 可以包含任何數據,簡單的字符串、復雜的字符串(xml、json)、數字(整數、浮點數)、二進制(圖片、音頻、視頻),一個 Redis 中字符串 value 最多可以是 512M。
二、String 類型操作命令
命令 | 描述 | 用法 |
---|---|---|
SET | 1.將字符串值Value關聯到Key 2.Key已關聯則覆蓋,無視類型 3.原本Key帶有生存時間TTL,那么TTL被清除 |
SET key value [EX seconds] [PX milliseconds] [NX|XX] |
GET | 1.返回key關聯的字符串值 2.Key不存在返回nil 3.Key存儲的不是字符串,返回錯誤,因為GET只用於處理字符串 |
GET key |
MSET | 1.同時設置一個或多個Key-Value鍵值對 2.某個給定Key已經存在,那么MSET新值會覆蓋舊值 3.如果上面的覆蓋不是希望的,那么使用MSETNX命令,所有Key都不存在才會進行覆蓋 4.MSET是一個原子性操作,所有Key都會在同一時間被設置,不會存在有些更新有些沒更新的情況 |
MSET key value [key value ...] |
MGET | 1.返回一個或多個給定Key對應的Value 2.某個Key不存在那么這個Key返回nil |
MGET key [key ...] |
SETEX | 1.將Value關聯到Key 2.設置Key生存時間為seconds,單位為秒 3.如果Key對應的Value已經存在,則覆蓋舊值 4.SET也可以設置失效時間,但是不同在於SETNX是一個原子操作,即關聯值與設置生存時間同一時間完成 |
SETEX key seconds value |
SETNX | 1.將Key的值設置為Value,當且僅當Key不存在 2.若給定的Key已經存在,SEXNX不做任何動作 |
SETNX key value |
三、應用場景
- 緩存功能:字符串最經典的使用場景,redis最為緩存層,Mysql作為儲存層,絕大部分請求數據都是redis中獲取,由於redis具有支撐高並發特性,所以緩存通常能起到加速讀寫和降低 后端壓力的作用。
- 計數器:許多運用都會使用redis作為計數的基礎工具,他可以實現快速計數、查詢緩存的功能,同時數據可以一步落地到其他的數據源。如:視頻播放數系統就是使用redis作為視頻播放數計數的基礎組件。
- 共享session:出於負載均衡的考慮,分布式服務會將用戶信息的訪問均衡到不同服務器上,用戶刷新一次訪問可能會需要重新登錄,為避免這個問題可以用redis將用戶session集中管理,在這種模式下只要保證redis的高可用和擴展性的,每次獲取用戶更新或查詢登錄信息都直接從redis中集中獲取。
- 限速:處於安全考慮,每次進行登錄時讓用戶輸入手機驗證碼,為了短信接口不被頻繁訪問,會限制用戶每分鍾獲取驗證碼的頻率。
四、特殊的String操作:INCR/DECR
INCR/DECR操作可以利用Redis自動幫助我們對一個Key對應的Value進行加減,在實際工作中還是很常用的。
INCR/DECR操作在 Redis 中的相關命令:
命令 | 描述 | 用法 |
---|---|---|
INCR | 1)Key中存儲的數字值+1,返回增加之后的值 2)Key不存在,那么Key的值被初始化為0再執行INCR 3)如果值包含錯誤類型或者字符串不能被表示為數字,那么返回錯誤 4)值限制在64位有符號數字表示之內即-9223372036854775808~9223372036854775807 |
INCR key |
DECR | 1)Key中存儲的數字值-1 2)其余同INCR |
DECR key |
INCRBY | 1)將key所存儲的值加上增量返回增加之后的值 2)其余同INCR |
INCRBY key increment |
DECRBY | 1)將key所存儲的值減去減量decrement 2)其余同INCR |
DECRBY key decrement |
五、INCR/DECR 應用場景
- 原先單機環境中統計在線人數,變成分布式部署之后可以使用INCR/DECR
- 由於Redis本身極高的讀寫性能,一些秒殺的場景庫存增減可以基於Redis來做而不是直接操作DB