欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Redis三種特殊數(shù)據(jù)類型的具體使用

 更新時(shí)間:2022年02月18日 15:41:35   作者:一心同學(xué)  
本文主要介紹了Redis三種特殊數(shù)據(jù)類型的具體使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

一、HyperLogLog 基數(shù)統(tǒng)計(jì)

1.1 什么是基數(shù)?

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

1.2 使用基數(shù)統(tǒng)計(jì)的好處

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

1.3 應(yīng)用場(chǎng)景

    網(wǎng)頁(yè)的uv(一個(gè)人訪問一個(gè)網(wǎng)站多次,但是還是算做一個(gè)人)

  • ?? 傳統(tǒng)的方式:set(因?yàn)閟et不允許重復(fù),如果重復(fù)就覆蓋)保存用戶的id,然后就可以統(tǒng)計(jì),set中元素?cái)?shù)量作為標(biāo)準(zhǔn)判斷,這個(gè)方式如果保存大量的用戶id,就會(huì)比較麻煩并且在大型網(wǎng)站中會(huì)占用大量的內(nèi)存。我們的目的是為了計(jì)數(shù),而不是保存用戶id。
  • ?? 使用HyperLogLog:一個(gè)HyperLogLog 鍵只需要12KB,能夠計(jì)算的數(shù)量卻非常巨大,占用的內(nèi)存空間大大減少。

1.4 注意事項(xiàng) 

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

1.5 基本命令

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

1.6 使用

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

二、Geospatial 地理位置

2.1 介紹

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

2.2 使用場(chǎng)景

  • ?? 朋友定位
  • ?? 查看附近的人
  • ?? 打車距離計(jì)算

2.3 基本命令

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

GEORADIUS key 經(jīng)度 緯度 范圍數(shù)值 單位

以給定的經(jīng)緯度為中心, 找出某一半徑內(nèi)的元素

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

查詢地點(diǎn)經(jīng)緯度:

城市經(jīng)緯度查詢-國(guó)內(nèi)城市經(jīng)度緯度在線查詢工具

2.4 詳細(xì)講解

2.4.1 GEOADD

作用:添加地理位置

規(guī)則:兩級(jí)無(wú)法直接添加,我們一般會(huì)下載城市數(shù)據(jù),直接通過java程序一次性導(dǎo)入!

語(yǔ)法:GEOADD key 經(jīng)度 緯度 地點(diǎn)名稱

?? 注意事項(xiàng)

有效的經(jīng)度從-180度到180度。

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

當(dāng)坐標(biāo)位置超出上述指定范圍時(shí),該命令將會(huì)返回一個(gè)錯(cuò)誤。

?? 使用

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

2.4.2 GEOPOS

作用:獲得指定地點(diǎn)的位置信息(經(jīng)緯度)

語(yǔ)法:GEOPOS key 地點(diǎn)名稱

?? 使用

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

2.4.3 GEODIST

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

語(yǔ)法:GEODIST key 地點(diǎn)1 地點(diǎn)2 單位

?? 單位參數(shù):

  • m 表示單位為米。
  • km 表示單位為千米。
  • mi 表示單位為英里。
  • ft 表示單位為英尺。

如果用戶沒有顯式地指定單位參數(shù), 那么 GEODIST 默認(rèn)使用米作為單位。

?? 使用:

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

2.4.4 GEORADIUS

作用:以給定的經(jīng)緯度為中心, 找出某一半徑內(nèi)的元素。

語(yǔ)法:GEORADIUS key 經(jīng)度 緯度  范圍數(shù)值  單位

?? 使用:

#查找以116,39這個(gè)經(jīng)緯度為中心,尋找方圓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"
?
?
#篩選最近兩個(gè)城市以及顯示其距離
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

作用:找出位于指定范圍內(nèi)的元素,中心點(diǎn)是由給定的位置元素決定。

語(yǔ)法:GEORADIUSBYMEMBER  key 地點(diǎn)  距離數(shù)值  單位

?? 使用:

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

2.4.6 GEOHASH

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

語(yǔ)法:GEOHASH  key 地點(diǎn)1  地點(diǎn)2

?? 使用:

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

2.4.7 ZRANGE

作用:獲得指定key中坐標(biāo)信息。

語(yǔ)法:zrange  key  start stop

?? 使用:

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

2.4.8 ZREM

作用:刪除指定key下指定目標(biāo)的數(shù)據(jù)。

語(yǔ)法:zrem  key 地點(diǎn)

?? 使用:

127.0.0.1:6379> zrem address shanghai
(integer) 1

三、BitMap

?? 介紹

BitMap是通過一個(gè)bit位來表示某個(gè)元素對(duì)應(yīng)的值或者狀態(tài),只有0 和 1 兩個(gè)狀態(tài),其中的key就是對(duì)應(yīng)元素本身。365 天 = 365 bit ,1字節(jié) = 8bit ,也就是說統(tǒng)計(jì)一年的用戶狀態(tài)只需要46 個(gè)字節(jié)左右,所以其能夠節(jié)省很大的空間。

?? 應(yīng)用場(chǎng)景

  • (1)用戶簽到
  • (2)統(tǒng)計(jì)活躍用戶
  • (3)用戶在線狀態(tài)(在線就設(shè)置為1,不在線就設(shè)置為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

?? 統(tǒng)計(jì)本周的打卡記錄

127.0.0.1:6379> bitcount sign
(integer) 4

小結(jié)

以上就是【一心同學(xué)】整理的【Redis】中的【三種特殊數(shù)據(jù)類型】,或許我們?cè)谄綍r(shí)很少用到,但如果我們能夠用得到,那么其對(duì)我們的作用是非常大的,可以給我們【節(jié)省巨大的空間】以及【帶來極快的速度】。

到此這篇關(guān)于Redis三種特殊數(shù)據(jù)類型的具體使用的文章就介紹到這了,更多相關(guān)Redis 特殊數(shù)據(jù)類型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Redis中散列類型的常用命令小結(jié)

    Redis中散列類型的常用命令小結(jié)

    散列類型的鍵值其實(shí)也是一種字典解耦,其存儲(chǔ)了字段和字段值的映射,但字段值只能是字符串,不支持其他數(shù)據(jù)類型,所以說散列類型不能嵌套其他的數(shù)據(jù)類型。下面就來詳細(xì)介紹下Redis中散列類型的常用命令,有需要的可以參考學(xué)習(xí)。
    2016-09-09
  • 命令行清除Redis緩存的實(shí)現(xiàn)

    命令行清除Redis緩存的實(shí)現(xiàn)

    本文主要介紹了命令行清除Redis緩存的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • redis?sentinel監(jiān)控高可用集群實(shí)現(xiàn)的配置步驟

    redis?sentinel監(jiān)控高可用集群實(shí)現(xiàn)的配置步驟

    這篇文章主要介紹了redis?sentinel監(jiān)控高可用集群實(shí)現(xiàn)的配置步驟,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • 深入解析Redis中常見的應(yīng)用場(chǎng)景

    深入解析Redis中常見的應(yīng)用場(chǎng)景

    這篇文章主要給大家介紹了關(guān)于Redis中常見的應(yīng)用場(chǎng)景的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • 詳解Redis數(shù)據(jù)結(jié)構(gòu)之跳躍表

    詳解Redis數(shù)據(jù)結(jié)構(gòu)之跳躍表

    這篇文章主要介紹了Redis數(shù)據(jù)結(jié)構(gòu)中的跳躍表的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Redis配置文件詳解

    Redis配置文件詳解

    這篇文章主要介紹了Redis配置文件詳解,本文詳細(xì)完整的用中文解釋了Redis配置文件中各種參數(shù)的作用和功能,需要的朋友可以參考下
    2015-04-04
  • redis部署及各種數(shù)據(jù)類型使用命令詳解

    redis部署及各種數(shù)據(jù)類型使用命令詳解

    這篇文章主要介紹了redis部署及各種數(shù)據(jù)類型使用命令,編譯安裝redis及部署過程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • redis集群搭建過程(非常詳細(xì),適合新手)

    redis集群搭建過程(非常詳細(xì),適合新手)

    這篇文章主要介紹了redis集群搭建過程,Redis集群至少需要3個(gè)節(jié)點(diǎn),因?yàn)橥镀比蒎e(cuò)機(jī)制要求超過半數(shù)節(jié)點(diǎn)認(rèn)為某個(gè)節(jié)點(diǎn)掛了該節(jié)點(diǎn)才是掛了,所以2個(gè)節(jié)點(diǎn)無(wú)法構(gòu)成集群,具體搭建過程跟隨小編一起看看吧
    2021-11-11
  • redis快照模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    redis快照模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要為大家詳細(xì)介紹了redis快照模式的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • redis實(shí)現(xiàn)分布式的方法總結(jié)

    redis實(shí)現(xiàn)分布式的方法總結(jié)

    在本篇文章中小編給大家整理了關(guān)于redis分布式怎么做的具體內(nèi)容以及知識(shí)點(diǎn)總結(jié),有興趣的朋友們參考下。
    2019-06-06

最新評(píng)論