久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Redis中的特殊數(shù)據(jù)類(lèi)型有哪些

共計(jì) 4105 個(gè)字符,預(yù)計(jì)需要花費(fèi) 11 分鐘才能閱讀完成。

這篇文章將為大家詳細(xì)講解有關(guān) Redis 中的特殊數(shù)據(jù)類(lèi)型有哪些,丸趣 TV 小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

Redis 除了 5 種基礎(chǔ)數(shù)據(jù)類(lèi)型,還有三種特殊的數(shù)據(jù)類(lèi)型,分別是 HyperLogLogs(基數(shù)統(tǒng)計(jì)),Bitmaps (位圖) 和 geospatial(地理位置)。

HyperLogLogs(基數(shù)統(tǒng)計(jì))

Redis 2.8.9 版本更新了 Hyperloglog 數(shù)據(jù)結(jié)構(gòu)!

什么是基數(shù)?

舉個(gè)例子,A = {1, 2, 3, 4, 5},B = {3, 5, 6, 7, 9};那么基數(shù)(不重復(fù)的元素)= 1, 2, 4, 6, 7, 9;(允許容錯(cuò),即可以接受一定誤差)

HyperLogLogs 基數(shù)統(tǒng)計(jì)用來(lái)解決什么問(wèn)題?

這個(gè)結(jié)構(gòu)可以非常省內(nèi)存的去統(tǒng)計(jì)各種計(jì)數(shù),比如注冊(cè) IP 數(shù)、每日訪問(wèn) IP 數(shù)、頁(yè)面實(shí)時(shí) UV、在線用戶數(shù),共同好友數(shù)等。

它的優(yōu)勢(shì)體現(xiàn)在哪?

一個(gè)大型的網(wǎng)站,每天 IP 比如有 100 萬(wàn),粗算一個(gè) IP 消耗 15 字節(jié),那么 100 萬(wàn)個(gè) IP 就是 15M。而 HyperLogLog 在 Redis 中每個(gè)鍵占用的內(nèi)容都是 12K,理論存儲(chǔ)近似接近 2^64 個(gè)值,不管存儲(chǔ)的內(nèi)容是什么,它一個(gè)基于基數(shù)估算的算法,只能比較準(zhǔn)確的估算出基數(shù),可以使用少量固定的內(nèi)存去存儲(chǔ)并識(shí)別集合中的唯一元素。而且這個(gè)估算的基數(shù)并不一定準(zhǔn)確,是一個(gè)帶有 0.81% 標(biāo)準(zhǔn)錯(cuò)誤的近似值(對(duì)于可以接受一定容錯(cuò)的業(yè)務(wù)場(chǎng)景,比如 IP 數(shù)統(tǒng)計(jì),UV 等,是可以忽略不計(jì)的)。

相關(guān)命令使用

127.0.0.1:6379  pfadd key1 a b c d e f g h i #  創(chuàng)建第一組元素
(integer) 1
127.0.0.1:6379  pfcount key1 #  統(tǒng)計(jì)元素的基數(shù)數(shù)量
(integer) 9
127.0.0.1:6379  pfadd key2 c j k l m e g a #  創(chuàng)建第二組元素
(integer) 1
127.0.0.1:6379  pfcount key2
(integer) 8
127.0.0.1:6379  pfmerge key3 key1 key2 #  合并兩組:key1 key2 -  key3  并集
127.0.0.1:6379  pfcount key3
(integer) 13

Bitmap(位存儲(chǔ))

Bitmap 即位圖數(shù)據(jù)結(jié)構(gòu),都是操作二進(jìn)制位來(lái)進(jìn)行記錄,只有 0 和 1 兩個(gè)狀態(tài)。

用來(lái)解決什么問(wèn)題?

比如:統(tǒng)計(jì)用戶信息,活躍,不活躍!登錄,未登錄!打卡,不打卡!兩個(gè)狀態(tài)的,都可以使用 Bitmaps!

如果存儲(chǔ)一年的打卡狀態(tài)需要多少內(nèi)存呢?365 天 = 365 bit 1 字節(jié) = 8bit 46 個(gè)字節(jié)左右!

相關(guān)命令使用

使用 bitmap 來(lái)記錄 周一到周日的打卡!周一:1 周二:0 周三:0 周四:1 ……

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 0
(integer) 0
127.0.0.1:6379  setbit sign 5 0
(integer) 0
127.0.0.1:6379  setbit sign 6 1
(integer) 0

查看某一天是否有打卡!

127.0.0.1:6379  getbit sign 3
(integer) 1
127.0.0.1:6379  getbit sign 5
(integer) 0

統(tǒng)計(jì)操作,統(tǒng)計(jì) 打卡的天數(shù)!

127.0.0.1:6379  bitcount sign #  統(tǒng)計(jì)這周的打卡記錄,就可以看到是否有全勤!(integer) 3

geospatial (地理位置)

Redis 的 Geo 在 Redis 3.2 版本就推出了! 這個(gè)功能可以推算地理位置的信息:兩地之間的距離,,方圓幾里的人。

geoadd

添加地理位置

127.0.0.1:6379  geoadd china:city 118.76 32.04 manjing 112.55 37.86 taiyuan 123.43 41.80 shenyang
(integer) 3
127.0.0.1:6379  geoadd china:city 144.05 22.52 shengzhen 120.16 30.24 hangzhou 108.96 34.26 xian
(integer) 3

規(guī)則

兩級(jí)無(wú)法直接添加,我們一般會(huì)下載城市數(shù)據(jù) (這個(gè)網(wǎng)址可以查詢 GEO:http://www.jsons.cn/lngcode)!

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

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

#  當(dāng)坐標(biāo)位置超出上述指定范圍時(shí),該命令將會(huì)返回一個(gè)錯(cuò)誤。127.0.0.1:6379  geoadd china:city 39.90 116.40 beijin
(error) ERR invalid longitude,latitude pair 39.900000,116.400000

geopos

獲取指定的成員的經(jīng)度和緯度

127.0.0.1:6379  geopos china:city taiyuan manjing
1) 1)  112.54999905824661255 
 1)  37.86000073876942196 
2) 1)  118.75999957323074341 
 1)  32.03999960287850968

獲得當(dāng)前定位, 一定是一個(gè)坐標(biāo)值!

geodist

如果不存在, 返回空

單位如下

m

km

mi 英里

ft 英尺

127.0.0.1:6379  geodist china:city taiyuan shenyang m
 1026439.1070 
127.0.0.1:6379  geodist china:city taiyuan shenyang km
 1026.4391

georadius

附近的人 == 獲得所有附近的人的地址, 定位, 通過(guò)半徑來(lái)查詢

獲得指定數(shù)量的人

127.0.0.1:6379  georadius china:city 110 30 1000 km 以  100,30  這個(gè)坐標(biāo)為中心,  尋找半徑為 1000km 的城市
1)  xian 
2)  hangzhou 
3)  manjing 
4)  taiyuan 
127.0.0.1:6379  georadius china:city 110 30 500 km
1)  xian 
127.0.0.1:6379  georadius china:city 110 30 500 km withdist
1) 1)  xian 
 2)  483.8340 
127.0.0.1:6379  georadius china:city 110 30 1000 km withcoord withdist count 2
1) 1)  xian 
 2)  483.8340 
 3) 1)  108.96000176668167114 
 2)  34.25999964418929977 
2) 1)  manjing 
 2)  864.9816 
 3) 1)  118.75999957323074341 
 2)  32.03999960287850968

參數(shù) key 經(jīng)度 緯度 半徑 單位 [顯示結(jié)果的經(jīng)度和緯度] [顯示結(jié)果的距離] [顯示的結(jié)果的數(shù)量]

georadiusbymember

顯示與指定成員一定半徑范圍內(nèi)的其他成員

127.0.0.1:6379  georadiusbymember china:city taiyuan 1000 km
1)  manjing 
2)  taiyuan 
3)  xian 
127.0.0.1:6379  georadiusbymember china:city taiyuan 1000 km withcoord withdist count 2
1) 1)  taiyuan 
 2)  0.0000 
 3) 1)  112.54999905824661255 
 2)  37.86000073876942196 
2) 1)  xian 
 2)  514.2264 
 3) 1)  108.96000176668167114 
 2)  34.25999964418929977

參數(shù)與 georadius 一樣

geohash(較少使用)

該命令返回 11 個(gè)字符的 hash 字符串

127.0.0.1:6379  geohash china:city taiyuan shenyang
1)  ww8p3hhqmp0 
2)  wxrvb9qyxk0

將二維的經(jīng)緯度轉(zhuǎn)換為一維的字符串, 如果兩個(gè)字符串越接近, 則距離越近

底層

geo 底層的實(shí)現(xiàn)原理實(shí)際上就是 Zset, 我們可以通過(guò) Zset 命令來(lái)操作 geo

127.0.0.1:6379  type china:city
zset

查看全部元素 刪除指定的元素

127.0.0.1:6379  zrange china:city 0 -1 withscores
 1)  xian 
 2)  4040115445396757 
 3)  hangzhou 
 4)  4054133997236782 
 5)  manjing 
 6)  4066006694128997 
 7)  taiyuan 
 8)  4068216047500484 
 9)  shenyang 
1)  4072519231994779 
2)  shengzhen 
3)  4154606886655324 
127.0.0.1:6379  zrem china:city manjing
(integer) 1
127.0.0.1:6379  zrange china:city 0 -1
1)  xian 
2)  hangzhou 
3)  taiyuan 
4)  shenyang 
5)  shengzhen

關(guān)于“Redis 中的特殊數(shù)據(jù)類(lèi)型有哪些”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-07-15發(fā)表,共計(jì)4105字。
轉(zhuǎn)載說(shuō)明:除特殊說(shuō)明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請(qǐng)注明出處。
評(píng)論(沒(méi)有評(píng)論)
主站蜘蛛池模板: 桐梓县| 民勤县| 盐源县| 林西县| 娄烦县| 林州市| 漯河市| 闽清县| 昌图县| 温泉县| 望谟县| 娄烦县| 海原县| 鄂尔多斯市| 繁昌县| 东源县| 江西省| 七台河市| 阿图什市| 辛集市| 长海县| 罗城| 焦作市| 衡南县| 澳门| 遂昌县| 宜丰县| 铜川市| 沽源县| 克什克腾旗| 茌平县| 平昌县| 普兰县| 北碚区| 桂平市| 江西省| 民权县| 奉新县| 嘉善县| 和平县| 类乌齐县|