欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

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

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

寧海網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,寧海網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為寧海上千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)公司要多少錢,請找那個售后服務(wù)好的寧海做網(wǎng)站的公司定做!

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

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

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

  • 什么是基數(shù)?

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

  • HyperLogLogs 基數(shù)統(tǒng)計用來解決什么問題

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

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

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

  • 相關(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)計元素的基數(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 并集
OK
127.0.0.1:6379> pfcount key3
(integer) 13

Bitmap (位存儲)

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

  • 用來解決什么問題

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

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

  • 相關(guān)命令使用

使用bitmap 來記錄 周一到周日的打卡! 周一: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)計操作,統(tǒng)計 打卡的天數(shù)!

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

geospatial (地理位置)

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

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ī)則

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

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

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

# 當(dāng)坐標(biāo)位置超出上述指定范圍時,該命令將會返回一個錯誤。
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)前定位, 一定是一個坐標(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

附近的人 ==> 獲得所有附近的人的地址, 定位, 通過半徑來查詢

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

127.0.0.1:6379> georadius china:city 110 30 1000 km			以 100,30 這個坐標(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個字符的hash字符串

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

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

底層

geo底層的實現(xiàn)原理實際上就是Zset, 我們可以通過Zset命令來操作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ù)類型有哪些”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

文章標(biāo)題:Redis中的特殊數(shù)據(jù)類型有哪些
文章分享:http://chinadenli.net/article38/ipggsp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)域名注冊定制開發(fā)品牌網(wǎng)站建設(shè)用戶體驗營銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管