Redis 學習筆記(七)特殊資料型別

2021-10-25 01:39:07 字數 2308 閱讀 2531

在redis的特殊資料型別中選出三種資料型別進行分析:

geo只有六個命令:

geoadd 《經度》 《緯度》 《名稱》...  #將指定的地理空間位置(經度、緯度、名稱)新增到指定的key中

#例:geoadd china:city 116.4 39.9 beijing 121.47 31.23 shanghai

geopos 《名稱》... #獲取key中指定名稱的經緯度

#例:geopos china:city beijing shanghai

geodist 《名稱1> 《名稱2> [unit] #獲取key中指定兩位置的直線距離,[unit]選項為長度單位(m公尺、km千公尺、mi英里、ft英呎)

#例:geodist china:city beijing shanghai km (預設單位為m,可不寫)

georadius 《經度》 《緯度》 《半徑》 [unit] [withcoord] [withdist] [withhash] [count count]

#獲取給定的經緯度位置為中心,方圓半徑內的key中的所有位置元素

#withcoord選項為返回位置元素的經緯度

#withdist選項為返回位置元素與中心位置的距離,長度單位與半徑單位一致

#withhash選項為位置元素經過原始 geohash 編碼的有序集合分值,一般不會用到

#[count count]選項為設定返回幾個位置元素(在查詢時依然會對key中的匹配元素全部做處理,所以大範圍內查詢依然很慢,但會減少頻寬)

georadiusbymember 《名稱》 《半徑》 [unit] [withcoord] [withdist] [withhash] [count count]

#獲取以給定位置元素為中心,方圓半徑內的key中的所有位置元素

geohash 《名稱》... #獲取由二維經緯度轉換成的11個字元的geohash字串

geo的底層是由zset(有序集合)實現的,所以可以用zset的命令來操作geo。

例如geo中沒有刪除位置元素的命令,就可以用zrem命令:

zrange china:city 0 -1    #獲取全部位置元素

zrem china:city beijing #移除位置元素

基數是集合中不重複的元素個數。

應用場景:統計乙個**的訪問人數,即乙個人多次訪問也只算一人。

傳統的方式:將訪問的使用者id儲存到set集合中,統計set集合中元素個數。

問題:當有大量的使用者訪問**時,會導致記憶體占用資源過多。

而hyperloglog存放2^64個元素只需12kb的記憶體,所以做基數統計應首選hyperloglog!

hyperloglog只有三個命令:

pfadd ...  #將引數value存放到名為key的hyperloglog結構中

pfcount ... #當引數為乙個時:統計key中的近似基數;當有多個引數時:統計多個hyperloglog結構並集的近似基數

pfmerge ... #將多個hyperloglog合併到key中,合併後的key的基數接近於所有輸入hyperloglog的並集

hyperloglog允許0.81%的容錯率,如果統計功能不允許容錯的話還是老老實實地用set統計吧~

bitmaps本身並不是一種資料型別,而是乙個字串,可以對字串的二進位制位進行操作來記錄0和1兩種狀態。

應用場景可以是記錄使用者是否登入,員工是否打卡等。

命令:

setbit #設定key的下標i位置上的值為value,value值只能是0或1

getbit #獲取key的下標i位置上的值

bitcount [start end] #統計key中值為1的位元組數,[start end]選項與getrange命令類似

bitop [operation] ... #對乙個或多個儲存二進位制位的字串 key 進行位元操作,並將結果儲存到dekey上

#[operation] 選項為位元操作and(與)、or(或)、xor(異或)、not(非)。非的引數只能有乙個,其他都可多個引數

#例:key1 = 1001;key2 = 1101;

#bitop and dekey key1 key2 ==> dekey=1001

#bitop or dekey key1 key2 ==> dekey=1101

#bitop xor dekey key1 key2 ==> dekey=0010

#bitop not dekey key1 ==> dekey=0110

redis學習筆記之二 Redis的資料型別

n redis的key redis的key是字串型別,如果中間有空格或者轉義字元等,要用 1 命名建議 物件型別 物件id 物件屬性 2 多個單詞之間以 來分隔 3 key的命名,應該在可讀的情況下,盡量簡短 n redis的value支援五種型別 1 string 字串,可以儲存string in...

類 Python學習筆記(七)

2 建立例項 二 繼承 class dog 一次模擬小狗的簡單嘗試 def init self,name,age 初始化屬性name和age self.name name self.age age defsit self 模擬小狗被命令式蹲下 print self.name.title 蹲下 def...

Redis教程 七 HyperLogLog型別

redis教程 七 hyperloglog型別 redis 的鍵值可以支援資料型別 字串,列表,散表,集合,有序集合 hyperloglog 通過選用不同的資料結構,使用者可以使用 redis 解決各式各樣的問題。在2.8.9 版本新增了 hyperloglog 結構。基數 集合中不同元素的數量。比...