首頁 > 資料庫 > Redis > redis用在哪裡

redis用在哪裡

步履不停
發布: 2019-06-25 11:45:28
原創
2514 人瀏覽過

redis用在哪裡

1. 高並發快取/共享session:

    UserInfo getUserInfo (long id) {}

#    取:

    userRedisKey = "user:info:" id;

    value = redis.get(userRedisKey );

    if (value != null) {

userInfo = deserialize(value);

           return userInfo;

    }

#    儲存:

    }

#    儲存:

   InfoInfo = ***getoo);

    redis.setex(userRedisKey, 3600, serialize(userInfo));

    用string儲存序列化後的數據,不夠立體直觀,可以轉為hmset儲存為哈希結構,存取更直觀

 

2. 簡單分散式鎖定

    setnx只有在不存在時才設定成功,其餘只能等待。單線程

 

3. 計數器incr,因為是單線程,比cas等少了cpu消耗,性能更高

    long incrVideoCounter ( long id) {

          key = "video:playCount:" id;

          return redis.incr(key);

#4. 實現棧/隊列

    棧:       lpush lpop

    隊列:    lpush rpop 

 

5. 流量控制/限速

    phoneNum = "12345678999";

    key = "shortMsg:limit:"  phoneNum;

##   dis. key, 1, "EX 60", "NX");

    if (isExists != null || redis.incr(key) <= 5) {

           //透過

    } else {

          //不通過

    }

 

6. 消息隊列

    使用lpush brpop可實現阻塞佇列,生產者從列表左端lpush插入元素,多個消費者從右端brpop阻塞取得佇列尾部元素

 

#7. 每個使用者有自己的文章,現在要分頁展示文章清單

    hmset article:1 title xx context XXXX

##    hmset article:1 title xx context XXXX

    lpush user:1:articles srticle:1 articles:3

    articles = lrange user:1:articles 0 9

    for article in {articles}

          hgetall {article}

#          hgetall {article}

> #8. 追蹤按讚等

    讚: zincrby user:ranking:2016_03_15 mike 1

    取消: zrem user:ranking:2016_03_15 mike

取得讚  最多的10位使用者: zrevrangebyrank user:ranking:2016_03_15 0 9

    顯示使用者資訊與分數: hgetall user:info:tom /  zscore user:ranking:2016_03_15 mike /  zscore user:ranking:2016_03_15 mike /

9. bitmaps 計算大數據集合見的關係等 ## 

10. 排行榜

     mike上傳了一個影片並獲得了3個讚  zadd user:ranking:2016_03_15 mike 3

     又有人給了一個讚# 

11. 共同關注

     為使用者新增追蹤標籤  sadd user:1:tags tag1 tag2    user:1

     共同關注  sinter user:1:tags user:2:tags

     sinter/sunion/sdiff

 

12.發佈訂閱

     subscribe video:changes:     publish video:changeds "video1,video2"

   (video)

 

每種資料type對應了多種底層資料結構實作(object encoding),可以透過資料大小長度場景等切換,達到更高的效率

持久化RDB(子進程創建,二進位文件,恢復快,不夠實時)/AOF(appendonly。文字文件,即時寫入操作先aop_buffer,然後透過配置寫入磁碟間隔,寫入磁碟,達到一定大小合併)

批次hmget等操作要轉為hscan等漸進式遍歷方法,否則容易阻塞

緩衝:客戶端緩衝(輸入/輸出),複製積壓緩衝,aof緩衝

複製: 全量/增量 複製偏移量/複製積壓緩衝(寫入命令發送給從伺服器同時也維護一個先進先出的佇列,等於主服務還保存著最近傳播的命令)/ID

sentinal: 實現高可用,本身是特殊的redis節點,可以自己配置集群,透過心跳等機制監控redis資料集群,當某一節點出現故障不可用,可以及時發現並自動遷移

cluster: 分佈式集群,容錯選主等。將實體結點對應到16383個插槽實現動態性

更多Redis相關技術文章,請造訪Redis教學欄位進行學習!

以上是redis用在哪裡的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板