中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Redis的特殊數據類型如何使用

發布時間:2022-02-18 17:15:39 來源:億速云 閱讀:131 作者:iii 欄目:開發技術

這篇文章主要介紹“Redis的特殊數據類型如何使用”,在日常操作中,相信很多人在Redis的特殊數據類型如何使用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Redis的特殊數據類型如何使用”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

    一、HyperLogLog 基數統計

    1.1 什么是基數?

    我們直接通過一個例子就可以明白什么是基數統計,比如數據集 {1, 2, 3, 3, 5, 5,}, 那么這個數據集的基數集為 {1,2,3,5}, 基數(不重復元素)為4。也就是說是不重復元素的個數。

    1.2 使用基數統計的好處

    每個 HyperLogLog 鍵只需要花費 12 KB 內存,就可以計算接近 2^64 個不同元素的基數。這和計算基數時,元素越多耗費內存就越多的集合形成鮮明對比。如果要從內存角度來比較的話Hyperloglog是首選。

    1.3 應用場景

        網頁的uv(一個人訪問一個網站多次,但是還是算做一個人)

    • 傳統的方式:set(因為set不允許重復,如果重復就覆蓋)保存用戶的id,然后就可以統計,set中元素數量作為標準判斷,這個方式如果保存大量的用戶id,就會比較麻煩并且在大型網站中會占用大量的內存。我們的目的是為了計數,而不是保存用戶id。

    • 使用HyperLogLog:一個HyperLogLog 鍵只需要12KB,能夠計算的數量卻非常巨大,占用的內存空間大大減少。

    1.4 注意事項 

    如果允許容錯(0.81% 錯誤率,計數的話可以忽略不計),那么一定可以使用Hyperloglog!如果不允許容錯,就使用set或者自己的數據類型即可!

    1.5 基本命令

    序號命令及描述
    1PFADD key element [element ...]
    添加指定元素到 HyperLogLog 中。
    2PFCOUNT key [key ...]
    返回給定 HyperLogLog 的基數估算值。
    3PFMERGE destkey sourcekey [sourcekey ...]
    將多個 HyperLogLog 合并為一個 HyperLogLog

    1.6 使用

    127.0.0.1:6379> pfadd mykey1 a b c d e f   #給第一組添加數據
    (integer) 1
    127.0.0.1:6379> pfcount mykey1  #統計mykey1的基數數量
    (integer) 6
    127.0.0.1:6379> pfadd mykey2 e e f j  #給第二組添加數據
    (integer) 1
    127.0.0.1:6379> pfcount mykey2     #統計mykey2的基數數量
    (integer) 3
    127.0.0.1:6379> pfmerge mykey3 mykey1 mykey2   # 合并兩組 mykey1 mykey2 => mykey3 并集
    OK
    127.0.0.1:6379> pfcount mykey3    #統計mykey3的基數數量
    (integer) 7

    二、Geospatial 地理位置

    2.1 介紹

    Redis3.2 版本開始推出的Geospatial,可以推算地理位置的信息,兩地之間的距離,方圓幾里的人。

    2.2 使用場景

    • ???? 朋友定位

    • ???? 查看附近的人

    • ???? 打車距離計算

    2.3 基本命令

    序號命令及描述
    1GEOADD key 經度 緯度 地點名稱
    將指定的地理空間位置(緯度、經度、名稱)添加到指定的key中
    2GEOPOS key 地點名稱
    從key里返回所有給定位置元素的位置(經度和緯度)。
    3GEODIST key 地點1 地點2 單位
    返回兩個給定位置之間的距離,如果兩個位置之間的其中一個不存在, 那么命令返回空值。
    4

    GEORADIUS key 經度 緯度 范圍數值 單位

    以給定的經緯度為中心, 找出某一半徑內的元素

    5GEORADIUSBYMEMBER key 地點 距離數值 單位
    找出位于指定范圍內的元素,中心點是由給定的位置元素決定
    6GEOHASH key 地點1 地點2
    將返回11個字符的Geohash字符串,如果兩個字符串越接近,那么則距離越近。
    7zrange key start stop
    獲得指定key中坐標信息
    8zrem key 地點
    刪除指定key下指定目標的數據

    查詢地點經緯度:

    城市經緯度查詢-國內城市經度緯度在線查詢工具

    2.4 詳細講解

    2.4.1 GEOADD

    作用:添加地理位置

    規則:兩級無法直接添加,我們一般會下載城市數據,直接通過java程序一次性導入!

    語法:GEOADD key 經度 緯度 地點名稱

    注意事項

    有效的經度從-180度到180度。

    有效的緯度從-85.05112878度到85.05112878度。

    當坐標位置超出上述指定范圍時,該命令將會返回一個錯誤。

    使用

    #添加單個信息
    127.0.0.1:6379> geoadd address 116.708463 23.37102 shantou   
    (integer) 1
    #添加多個信息
    127.0.0.1:6379> geoadd address 116.405285 39.904989 beijin 121.472644 31.231706 shanghai
    (integer) 2
    2.4.2 GEOPOS

    作用:獲得指定地點的位置信息(經緯度)

    語法:GEOPOS key 地點名稱

    使用

    127.0.0.1:6379> geopos address beijin   #獲得北京的地理位置
    1) 1) "116.40528291463851929"  #經度
       2) "39.9049884229125027"   #緯度
    2.4.3 GEODIST

    作用:返回兩個給定位置之間的距離,如果兩個位置之間的其中一個不存在, 那么命令返回空值。

    語法:GEODIST key 地點1 地點2 單位

    單位參數:

    • m 表示單位為米。

    • km 表示單位為千米。

    • mi 表示單位為英里。

    • ft 表示單位為英尺。

    如果用戶沒有顯式地指定單位參數, 那么 GEODIST 默認使用米作為單位。

    使用:

    127.0.0.1:6379> geodist address beijin shanghai km  #查詢北京與上海之間的距離
    "1067.5980"
    2.4.4 GEORADIUS

    作用:以給定的經緯度為中心, 找出某一半徑內的元素。

    語法:GEORADIUS key 經度 緯度  范圍數值  單位

    使用:

    #查找以116,39這個經緯度為中心,尋找方圓1500km的城市
    127.0.0.1:6379> georadius address 116 39 1500 km
    1) "shanghai"
    2) "beijin"
     
    # 顯示到中間距離的位置
    127.0.0.1:6379> georadius address 116 39 1500 km withdist
    1) 1) "shanghai"
       2) "996.7313"
    2) 1) "beijin"
       2) "106.5063"
     
    #顯示他人的定位信息
    127.0.0.1:6379> georadius address 116 39 1500 km withcoord
    1) 1) "shanghai"
       2) 1) "121.47264629602432251"
          2) "31.23170490709807012"
    2) 1) "beijin"
       2) 1) "116.40528291463851929"
          2) "39.9049884229125027"
     
    #篩選出最近的城市以及顯示其距離
    127.0.0.1:6379> georadius address 116 39 1500 km withdist withcoord count 1
    1) 1) "beijin"
       2) "106.5063"
       3) 1) "116.40528291463851929"
          2) "39.9049884229125027"
     
     
    #篩選最近兩個城市以及顯示其距離
    127.0.0.1:6379> georadius address 116 39 1500 km withdist withcoord count 2
    1) 1) "beijin"
       2) "106.5063"
       3) 1) "116.40528291463851929"
          2) "39.9049884229125027"
    2) 1) "shanghai"
       2) "996.7313"
       3) 1) "121.47264629602432251"
          2) "31.23170490709807012"
    2.4.5 GEORADIUSBYMEMBER

    作用:找出位于指定范圍內的元素,中心點是由給定的位置元素決定。

    語法:GEORADIUSBYMEMBER  key 地點  距離數值  單位

    使用:

    #找出距離北京方圓1500km內的城市
    127.0.0.1:6379> georadiusbymember address beijin 1500 km
    1) "shanghai"
    2) "beijin"
    2.4.6 GEOHASH

    作用:將返回11個字符的Geohash字符串,如果兩個字符串越接近,那么則距離越近。

    語法:GEOHASH  key 地點1  地點2

    ???? 使用:

    127.0.0.1:6379> geohash address beijin shantou
    1) "wx4g0b7xrt0"
    2) "ws4uzy8d030"
    2.4.7 ZRANGE

    作用:獲得指定key中坐標信息。

    語法:zrange  key  start stop

    使用:

    127.0.0.1:6379> zrange address 0 -1
    1) "shantou"
    2) "shanghai"
    3) "beijin"
    2.4.8 ZREM

    作用:刪除指定key下指定目標的數據。

    語法:zrem  key 地點

    使用:

    127.0.0.1:6379> zrem address shanghai
    (integer) 1

    三、BitMap

    介紹

    BitMap是通過一個bit位來表示某個元素對應的值或者狀態,只有0 和 1 兩個狀態,其中的key就是對應元素本身。365 天 = 365 bit ,1字節 = 8bit ,也就是說統計一年的用戶狀態只需要46 個字節左右,所以其能夠節省很大的空間。

    應用場景

    • (1)用戶簽到

    • (2)統計活躍用戶

    • (3)用戶在線狀態(在線就設置為1,不在線就設置為0)

    使用

    • 需求:記錄 周一到周日的打卡

    • 1:表示有打卡

    • 0:表示沒有打卡

    127.0.0.1:6379> setbit sign 0 1
    (integer) 0
    127.0.0.1:6379> setbit sign 1 1
    (integer) 0
    127.0.0.1:6379> setbit sign 2 0
    (integer) 0
    127.0.0.1:6379> setbit sign 3 1
    (integer) 0
    127.0.0.1:6379> setbit sign 4 1
    (integer) 0
    127.0.0.1:6379> setbit sign 5 0
    (integer) 0
    127.0.0.1:6379> setbit sign 6 0
    (integer) 0

    查看某一天是否有打卡

    127.0.0.1:6379> getbit sign 3
    (integer) 1
    127.0.0.1:6379> getbit sign 6
    (integer) 0

    統計本周的打卡記錄

    127.0.0.1:6379> bitcount sign
    (integer) 4

    到此,關于“Redis的特殊數據類型如何使用”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    新河县| 利川市| 光山县| 荔波县| 米易县| 腾冲县| 新野县| 台湾省| 弥渡县| 呼伦贝尔市| 阜新市| 锡林浩特市| 吴堡县| 独山县| 五峰| 天长市| 韶山市| 岳阳市| 乌拉特中旗| 东源县| 栾川县| 宿迁市| 凌海市| 普兰县| 永寿县| 孝感市| 乌兰浩特市| 庐江县| 河西区| 宁德市| 马公市| 龙井市| 衡阳市| 永德县| 隆回县| 商南县| 聂拉木县| 山阴县| 溧阳市| 南充市| 高阳县|