日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

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

作者:一心同學(xué) ? 更新時間: 2022-04-24 編程語言

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

1.1 什么是基數(shù)?

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

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

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

1.3 應(yīng)用場景

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

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

1.4 注意事項(xiàng)?

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

1.5 基本命令

序號 命令及描述
1 PFADD key element [element ...]
添加指定元素到 HyperLogLog 中。?
2 PFCOUNT key [key ...]
返回給定 HyperLogLog 的基數(shù)估算值。?
3 PFMERGE destkey sourcekey [sourcekey ...]
將多個 HyperLogLog 合并為一個 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)計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)計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)計mykey3的基數(shù)數(shù)量
(integer) 7

二、Geospatial 地理位置

2.1 介紹

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

2.2 使用場景

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

2.3 基本命令

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

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

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

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

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

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

2.4 詳細(xì)講解

2.4.1 GEOADD

作用:添加地理位置

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

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

?? 注意事項(xiàng)

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

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

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

?? 使用

#添加單個信息
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

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

語法: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

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

語法: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)的元素。

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

?? 使用:

#查找以116,39這個經(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"
?
?
#篩選最近兩個城市以及顯示其距離
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)是由給定的位置元素決定。

語法: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個字符的Geohash字符串,如果兩個字符串越接近,那么則距離越近。

語法: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)信息。

語法: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ù)。

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

?? 使用:

127.0.0.1:6379> zrem address shanghai
(integer) 1

三、BitMap

?? 介紹

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

?? 應(yīng)用場景

  • (1)用戶簽到
  • (2)統(tǒng)計活躍用戶
  • (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)計本周的打卡記錄

127.0.0.1:6379> bitcount sign
(integer) 4

小結(jié)

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

原文鏈接:https://blog.csdn.net/Huang_ZX_259/article/details/122776830

欄目分類
最近更新