redis原理及使用

一. 基本數(shù)據(jù)結(jié)構(gòu)

  1. 數(shù)據(jù)結(jié)構(gòu)類型
    string, hash, list, set, zset

  2. String 類型
    (1)基本操作
    SET key value. // 存入字符串鍵值對
    MSET key value [key value ...] // 批量存儲字符串鍵值對
    GET key // 獲取一個字符串鍵值
    DEL key [key ...] // 刪除一個鍵
    EXPIRE key seconds // 設(shè)置一個鍵的過期時間(秒)
    (2)原子操作
    INCR key // 將key中儲存的數(shù)字值加1
    DECR key // 將key中儲存的數(shù)字值減1
    INCRBY key increment // 將key所儲存的值加上increment
    DECRBY key decrement // 將key所儲存的值減去decrement
    (3)對象緩存
    SET user:1 value(json格式數(shù)據(jù))
    (4)分布式鎖
    SETNX product:10001 true //返回1代表獲取鎖成功
    SETNX product:10001 true //返回0代表獲取鎖失敗
    。。。
    執(zhí)行業(yè)務(wù)操作
    DEL product:10001 //執(zhí)行完業(yè)務(wù)釋放鎖
    SET product:10001 true ex 10 nx //防止程序意外終止導(dǎo)致死鎖
    (5)應(yīng)用場景

  • 計算器:INCR article:readcount:{文章id}
  • 分布式系統(tǒng)全局序列號:INCRBY orderId 1000
  1. Hash類型
    (1)常規(guī)操作
    HSET key field value // 存儲一個哈希表key的鍵值
    HGET key field //獲取哈希表key對應(yīng)的field鍵值
    HMGET key field [field ...] //批量獲取哈希表key中多個field鍵值
    HGETALL key //返回哈希表key中所有的鍵值
    (2)應(yīng)用場景
  • 對象緩存:HMSET user {userId}:name zhuge{userId}:balance 1888
  • 電商購物車:
    添加商品>hset cart:1001 10088 1
    增加數(shù)量>hincrby cart:1001 10088 1
    商品總數(shù)>hlen cart:1001
    刪除商品>hdel cart:1001 10088
    獲取購物車所有商品>hgetall cart:1001
    (3)hash結(jié)構(gòu)優(yōu)缺點
  • 優(yōu)點
    1)同類數(shù)據(jù)歸類整合儲存,方便數(shù)據(jù)管理
    2)相比string操作消耗內(nèi)存與cpu更小
    3)相比string儲存更節(jié)省空間
  • 缺點
    1)過期功能不能使用在field上,只能用在key
    2)Redis集群架構(gòu)下不適合大規(guī)模使用
  1. List結(jié)構(gòu)
    (1)常用操作
    LPUSH key value [value ...] //將一個或多個值value插入到key列表的表頭(最左邊)
    RPUSH key value [value ...] //將一個或多個值value插入到key列表的表尾(最右邊)
    LRANGE key start stop //返回列表key中指定區(qū)間內(nèi)的元素
    (2)組合成常用數(shù)據(jù)結(jié)構(gòu)
    Stack = LPUSH + LPOP
    Queue = LPUSH + RPOP
    Blocking MQ = LPUSH + BRPOP
    (3)應(yīng)用場景
    微博消息及微信公眾號
    LPUSH msg:{諸葛老師-ID} 10018
    LPUSH msg:{諸葛老師-ID} 10086
    LRANGE msg:{諸葛老師-ID} 0 4

  2. Set類型
    (1)常規(guī)操作
    SADD key member [member ...] //往集合key中存入元素
    SMEMBERS key //獲取集合key中所有元素
    SCARD key //獲取集合key的元素個數(shù)
    (2)Set集合運算


    Set集合運算.png
  • 求交集:
    SINTER set1 set2 set3 -> {c}
  • 求并集:
    SUNION set1 set2 set3 -> {a, b, c, d, e}
  • 求差集:
    SDIFF set1 set2 set3 -> {a, b, c} - {b, c, d, e} = {a}
    (3)應(yīng)用場景
  • 微信抽獎小程序
    1)點擊參與抽獎
    加入集合
    SADD key {userlD}
    2)查看參與抽獎
    所有用戶
    SMEMBERS key
    3)抽取count名中獎?wù)?br> SRANDMEMBER key [count] / SPOP key [count]
  • 微博微信點贊收藏
    1)點贊:SADD like:{消息ID} {用戶ID}
    2)獲取點贊的用戶列表:SMEMBERS like:{消息ID}
    3)獲取點贊用戶數(shù):SCARD like:{消息ID}
  1. Zset有序集合
    為每一個插入元素帶上分值,底層使用了跳表實現(xiàn)
    (1)常規(guī)操作
    ZADD key score member [[score member]…] //往有序集合key中加入帶分值元素
    ZREM key member [member…] //從有序集合key中刪除元素
    ZSCORE key member //返回有序集合key中元素member的分值
    (2)集合操作
    ZUNIONSTORE destkey numkeys key [key ...] //并集計算
    ZINTERSTORE destkey numkeys key [key…] //交集計算
    (3)應(yīng)用場景
  • 排場榜


    排場榜.png

redis I/O多路復(fù)用模型

I/O多路復(fù)用模型.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容