Redis | 使用場景

redis的使用場景

一、計數器

能夠對string進行自增和自減,從而實現計數器的功能。git

二、緩存

將熱點數據緩存起來,同時設置內存的最大使用量和淘汰策略來保證緩存的命中率。web

三、session服務器

使用redis做爲統一的session服務器,則後端能夠進行集羣部署。redis

四、分佈式鎖的實現

在分佈式場景下,沒法使用單機環境下的鎖來實現對多個節點上的進程進行同步,可使用redis的SETNX(SET If Not Exists)命令,來實現分佈式鎖。算法

問題:在執行setnx以後執行expire以前用戶進程意外crash,這個鎖不久永遠得不到釋放了嗎?後端

set指令有很是複雜的參數,能夠同時把setnx和expire合成一條指令來用的!緩存

多個進程執行如下Redis命令:服務器

SETNX lock.foo <current Unix time + lock timeout + 1>session

  • 若是 SETNX 返回1,說明該進程得到鎖,SETNX將鍵 lock.foo 的值設置爲鎖的超時時間(當前時間 + 鎖的有效時間)。
  • 若是 SETNX 返回0,說明其餘進程已經得到了鎖,進程不能進入臨界區。進程能夠在一個循環中不斷地嘗試 SETNX 操做,以得到鎖。

五、共同好友

Set能夠實現交集、並集等操做,從而實現共同好友等功能;編輯器

sadd key value  //往集合添加元素,key是指向一個set
sinter key1 key2 ... //查詢集合的交集
複製代碼

六、排行榜

ZSet能夠實現有序性操做,從而實現排行榜等功能;(以訪問量爲分數進行排列)分佈式

七、附近的人、店鋪

geohash地理空間索引。

  • GEOADD: 將給定的位置對象(緯度、經度、名字)添加到指定的key;
  • GEOPOS: 從key裏面返回全部給定位置對象的位置(經度和緯度);
  • GEODIST: 返回兩個給定位置之間的距離;
  • GEOHASH: 返回一個或多個位置對象的Geohash表示;
  • GEORADIUS: 以給定的經緯度爲中心,返回目標集合中與中心的距離不超過給定最大距離的全部位置對象;
  • GEORADIUSBYMEMBER: 以給定的位置對象爲中心,返回與其距離不超過給定最大距離的全部位置對象。
geoadd key longitude latitude member  //經度-維度-成員,添加到指定的集合中。能夠一個省一個集合
 geoadd beijing 116.182881 39.72877 良鄉大學城北 geoadd beijing 116.182881 39.72877 良鄉大學城南 geoadd beijing 116.318427 39.986771 新東方大廈 geoadd beijing 116.319873 39.987953 中鋼大廈  geodist 返回兩個位置之間的距離 geodist beijing 新東方大廈 良鄉大學城北 m //m爲距離單位,km,mi,ft  geopos 返回指定位置的經緯度 geopos beijing 新東方大廈  georadius 返回以給定的經緯度爲中心,長度範圍內的成員。 georadius beijing 116.3180199 39.398575 100 km withcoord //withcoord指定返回的格式  georadiusbymember 返回指定成員長度範圍內的其餘成員。(能夠實現附近的人) georadiusbymember beijing 新東方大廈 20 km 複製代碼

八、基數統計

  • HyperLogLog 是用來作基數估計的算法(是會存在誤差的)
  • HyperLogLog 的優勢是,在輸入元素的數量或者體積很是很是大時, 計算基數所需的空間老是固定的、而且是很小的。
  • 和布隆過濾器同樣,HyperLogLog一樣 不存儲元數據,只作統計信息。
  • HyperLogLog是一種算法,並非redis都用,是不過redis幫咱們封裝好了而已;
  • 在 Redis 裏面,每一個 HyperLogLog 鍵只須要花費 12 KB 內存,就能夠計算接近 2^64 個不一樣元素的基數。
  • **什麼是基數:**好比數據集 {1, 3, 5, 7, 5, 7, 8}, 那麼這個數據集的基數集爲 {1, 3, 5 ,7, 8}, 基數(不重複元素)爲5。 基數估計就是在偏差可接受的範圍內,快速計算基數。

若是用set做統計,須要保護海量的數據,那內存還不炸了;

位圖也能夠作統計,儘管相比set內存消耗要少一些,但內存的消耗量仍是不少;

pfadd key element //添加元素到指定的HyperLogLog,不存在則返回1,存在則返回0
pfcount key //返回HyperLogLog的基數估算值
pfmerge key1 key2 ...//將多個HyperLogLog合併成一個
複製代碼

通常使用:統計數據量大,單條數據佔用內存也大的狀況,且容許存在偏差。

  • 統計註冊 IP 數 (一個ip,4byte)
  • 統計每日訪問 IP 數
  • 統計用戶天天搜索不一樣詞條的個數(詞條就更大了)

本文使用 mdnice 排版

相關文章
相關標籤/搜索