久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      了解Redis這個核心數(shù)據(jù)類型

      了解Redis這個核心數(shù)據(jù)類型

      string 字符串

      tring 類型是二進制安全的,即 string 中可以包含任何數(shù)據(jù)。

      Redis 中的普通 string 采用 raw encoding 即原始編碼方式,該編碼方式會動態(tài)擴容,并通過提前預(yù)分配冗余空間,來減少內(nèi)存頻繁分配的開銷。

      在字符串長度小于 1MB 時,按所需長度的 2 倍來分配,超過 1MB,則按照每次額外增加 1MB 的容量來預(yù)分配。

      Redis 中的數(shù)字也存為 string 類型,但編碼方式跟普通 string 不同,數(shù)字采用整型編碼,字符串內(nèi)容直接設(shè)為整數(shù)值的二進制字節(jié)序列。

      在存儲普通字符串,序列化對象,以及計數(shù)器等場景時,都可以使用 Redis 的字符串類型,字符串?dāng)?shù)據(jù)類型對應(yīng)使用的指令包括 set、get、mset、incr、decr 等。

      list 列表

      list 列表,是一個快速雙向鏈表,存儲了一系列的 string 類型的字串值

      對于常規(guī)的 pop、push 元素,性能很高,時間復(fù)雜度為 O(1),因為是列表直接追加或彈出。但對于通過隨機插入、隨機刪除,以及隨機范圍獲取,需要輪詢列表確定位置,性能就比較低下了。

      操作 list 列表時,可以用 lpush、lpop、rpush、rpop、lrange 來進行常規(guī)的隊列進出及范圍獲取操作,在某些特殊場景下,也可以用 lset、linsert 進行隨機插入操作,用 lrem 進行指定元素刪除操作;最后,在消息列表的消費時,還可以用 Blpop、Brpop 進行阻塞式獲取,從而在列表暫時沒有元素時,可以安靜的等待新元素的插入,而不需要額外持續(xù)的查詢。

      set 集合

      set 是 string 類型的無序集合,set 中的元素是唯一的,即 set 中不會出現(xiàn)重復(fù)的元素。Redis 中的集合一般是通過 dict 哈希表實現(xiàn)的,所以插入、刪除,以及查詢元素,可以根據(jù)元素 hash 值直接定位,時間復(fù)雜度為 O(1)。

      操作

      • sismember 指令判斷該 key 對應(yīng)的 set 數(shù)據(jù)結(jié)構(gòu)中,是否存在某個元素,如果存在返回 1,否則返回 0;

      • sdiff 指令來對多個 set 集合執(zhí)行差集;

      • sinter 指令對多個集合執(zhí)行交集;

      • sunion 指令對多個集合執(zhí)行并集;

      • spop 指令彈出一個隨機元素;

      • srandmember 指令返回一個或多個隨機元素。

      在社交系統(tǒng)中,可以用于存儲關(guān)注的好友列表,用來判斷是否關(guān)注,還可以用來做好友推薦使用。另外,還可以利用 set 的唯一性,來對服務(wù)的來源業(yè)務(wù)、來源 IP 進行精確統(tǒng)計。

      sorted set 有序集合

      有序集合中,每個元素都會關(guān)聯(lián)一個 double 類型的 score 分數(shù)值。有序集合通過這個 score 值進行由小到大的排序。有序集合中,元素不允許重復(fù),但 score 分數(shù)值卻允許重復(fù)。

      操作

      • zscan 指令:按順序獲取有序集合中的元素;

      • zscore 指令:獲取元素的 score 值;

      • zrange指令:通過指定 score 返回指定 score 范圍內(nèi)的元素;

      • 在某個元素的 score 值發(fā)生變更時,還可以通過 zincrby 指令對該元素的 score 值進行加減。

      • 通過 zinterstore、zunionstore 指令對多個有序集合進行取交集和并集,然后將新的有序集合存到一個新的 key 中,如果有重復(fù)元素,重復(fù)元素的 score 進行相加,然后作為新集合中該元素的 score 值。

      可以用有序集合來統(tǒng)計排行榜,實時刷新榜單,還可以用來記錄學(xué)生成績,從而輕松獲取某個成績范圍內(nèi)的學(xué)生名單,還可以用來對系統(tǒng)統(tǒng)計增加權(quán)重值,從而在 dashboard 實時展示。

      hash 哈希

      bitmap

      位圖是一串連續(xù)的二進制數(shù)字,底層實際是基于 string 進行封裝存儲的

      按 bit 位進行指令操作的。bitmap 中每一 bit 位所在的位置就是 offset 偏移,可以用 setbit、bitfield 對 bitmap 中每個 bit 進行置 0 或置 1 操作,也可以用 bitcount 來統(tǒng)計 bitmap 中的被置 1 的 bit 數(shù),還可以用 bitop 來對多個 bitmap 進行求與、或、異或等操作。

      了解Redis這個核心數(shù)據(jù)類型

      bitmap 位圖的特點是按位設(shè)置、求與、求或等操作很高效,而且存儲成本非常低,用來存對象標(biāo)簽屬性的話,一個 bit 即可存一個標(biāo)簽??梢杂?bitmap,存用戶最近 N 天的登錄情況,每天用 1 bit,登錄則置 1。

      個性推薦在社交應(yīng)用中非常重要,可以對新聞、feed 設(shè)置一系列標(biāo)簽,如軍事、娛樂、視頻、圖片、文字等,用 bitmap 來存儲這些標(biāo)簽,在對應(yīng)標(biāo)簽 bit 位上置 1。對用戶,也可以采用類似方式,記錄用戶的多種屬性,并可以很方便的根據(jù)標(biāo)簽來進行多維度統(tǒng)計。bitmap 位圖的重要指令包括:setbit、 getbit、bitcount、bitfield、 bitop、bitpos 等。

      使用經(jīng)歷

      統(tǒng)計用戶登錄情況 : 1 2 3 5 天內(nèi)登錄
      bitmap : 1 1 1 0 1

      GEO 地理位置

      在存儲某個位置點時,首先利用 Geohash 算法,將該位置二維的經(jīng)緯度,映射編碼成一維的 52 位整數(shù)值,將位置名稱、經(jīng)緯度編碼 score 作為鍵值對,存儲到分類 key 對應(yīng)的 sorted set 中。

      需要計算某個位置點 A 附近的人時,首先以指定位置 A 為中心點,以距離作為半徑,算出 GEO 哈希 8 個方位的范圍, 然后依次輪詢方位范圍內(nèi)的所有位置點,只要這些位置點到中心位置 A 的距離在要求距離范圍內(nèi),就是目標(biāo)位置點。輪詢完所有范圍內(nèi)的位置點后,重新排序即得到位置點 A 附近的所有目標(biāo)。

      使用 geoadd,將位置名稱(如人、車輛、店名)與對應(yīng)的地理位置信息添加到指定的位置分類 key 中;

      使用 geopos 方便地查詢某個名稱所在的位置信息;

      使用 georadius 獲取指定位置附近,不超過指定距離的所有元素;

      Redis GEO 地理位置,利用 Geohash 將大量的二維經(jīng)緯度轉(zhuǎn)一維的整數(shù)值,這樣可以方便的對地理位置進行查詢、距離測量、范圍搜索。但由于地理位置點非常多,一個地理分類 key 下可能會有大量元素,在 GEO 設(shè)計時,需要提前進行規(guī)劃,避免單 key 過度膨脹。

      Redis 的 GEO 地理位置數(shù)據(jù)結(jié)構(gòu),應(yīng)用場景很多,比如查詢某個地方的具體位置,查當(dāng)前位置到目的地的距離,查附近的人、餐廳、電影院等。GEO 地理位置數(shù)據(jù)結(jié)構(gòu)中,重要指令包括 geoadd、geopos、geodist、georadius、georadiusbymember 等。

      使用 geodist 來獲取指定的兩個位置之間的距離。

      hyperLogLog 基數(shù)統(tǒng)計

      hyperLogLog 是用來做基數(shù)統(tǒng)計的數(shù)據(jù)類型,當(dāng)輸入巨大數(shù)量的元素做統(tǒng)計時,只需要很小的內(nèi)存即可完成。HyperLogLog 不保存元數(shù)據(jù),只記錄待統(tǒng)計元素的估算數(shù)量,這個估算數(shù)量是一個帶有 0.81% 標(biāo)準差的近似值,在大多數(shù)業(yè)務(wù)場景,對海量數(shù)據(jù),不足 1% 的誤差是可以接受的。

      Redis 的 HyperLogLog 在統(tǒng)計時,如果計數(shù)數(shù)量不大,采用稀疏矩陣存儲,隨著計數(shù)的增加,稀疏矩陣占用的空間也會逐漸增加,當(dāng)超過閥值后,則改為稠密矩陣,稠密矩陣占用的空間是固定的,約為12KB字節(jié)。

      通過 hyperLoglog 數(shù)據(jù)類型,你可以利用 pfadd 向基數(shù)統(tǒng)計中增加新的元素,可以用 pfcount 獲得 hyperLogLog 結(jié)構(gòu)中存儲的近似基數(shù)數(shù)量,還可以用 hypermerge 將多個 hyperLogLog 合并為一個 hyperLogLog 結(jié)構(gòu),從而可以方便的獲取合并后的基數(shù)數(shù)量。

      hyperLogLog 的特點是統(tǒng)計過程不記錄獨立元素,占用內(nèi)存非常少,非常適合統(tǒng)計海量數(shù)據(jù)。在大中型系統(tǒng)中,統(tǒng)計每日、每月的 UV 即獨立訪客數(shù),或者統(tǒng)計海量用戶搜索的獨立詞條數(shù),都可以用 hyperLogLog 數(shù)據(jù)類型來進行處理。

      相關(guān)學(xué)習(xí)推薦:Laravel

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號