《閑扯Redis一》五種數據類型之String型



一、前言

Redis 提供了5種數據類型:String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Zset(有序集合),理解每種數據類型的特點對於redis的開發和運維非常重要。

原文解析

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM