Redis三種特殊數(shù)據(jù)類型
geospatial 地理位置
Redis 地理空間數(shù)據(jù)類型簡介
Redis 地理空間索引允許您存儲坐標(biāo)并搜索它們。 此數(shù)據(jù)結(jié)構(gòu)可用于查找給定半徑或邊界框內(nèi)的鄰近點。
基本命令
-
GEOADD
將位置添加到給定的地理空間索引(請注意,使用此命令,經(jīng)度位于緯度之前)。 -
GEOSEARCH
返回具有給定半徑或邊界框的位置。
geoadd
# getadd 添加地理位置
127.0.0.1:6379> geoadd china:city 116.4 39.9 beijing
(integer) 1
127.0.0.1:6379> geoadd china:city 125.1 42.9 xian
(integer) 1
127.0.0.1:6379> geoadd china:city 121.4 31.2 shanghai
(integer) 1
127.0.0.1:6379> geoadd china:city 114.0 22.5 shenzhen
(integer) 1
127.0.0.1:6379> geoadd china:city 120.2 30.2 hangzhou
(integer) 1
127.0.0.1:6379> geoadd china:city 118.8 32.0 nanjing
(integer) 1
geopos
獲得當(dāng)前定位:一定是一個坐標(biāo)值
127.0.0.1:6379> geopos china:city beijing # 獲取指定的城市的經(jīng)度和維度
1) 1) "116.39999896287918091"
2) "39.90000009167092543"
geodist
單位:
-
m表示單位為米
-
km表示單位為千米
-
mi表示單位為英里
-
f化t表示單位為英尺
127.0.0.1:6379> geodist china:city beijing xian # 查看北京到西安的直線距離
"798353.9550"
127.0.0.1:6379> geodist china:city beijing xian km
"798.3540"
127.0.0.1:6379> geodist china:city beijing shanghai km # 查看北京到上海的直線距離
"1067.7424"
georadius 以給定的經(jīng)緯度為中心 找出某一半徑內(nèi)的元素
127.0.0.1:6379> georadius china:city 110 30 1000 km # 獲取110,30這個位置為中心,搜尋方圓1000km的城市
1) "shenzhen"
2) "hangzhou"
3) "nanjing"
127.0.0.1:6379> georadius china:city 110 30 1000 km withdist # 顯示到中心距離的位置
1) 1) "shenzhen"
2) "924.4990"
2) 1) "hangzhou"
2) "981.4461"
3) 1) "nanjing"
2) "867.6807"
127.0.0.1:6379> georadius china:city 110 30 1000 km withcoord # 顯示其他定位信息
1) 1) "shenzhen"
2) 1) "114.00000125169754028"
2) "22.50000113800319212"
2) 1) "hangzhou"
2) 1) "120.20000249147415161"
2) "30.19999988833350102"
3) 1) "nanjing"
2) 1) "118.80000203847885132"
2) "31.99999916826298119"
127.0.0.1:6379> georadius china:city 110 30 1000 km withcoord count 2 # 篩選指定結(jié)果
1) 1) "nanjing"
2) 1) "118.80000203847885132"
2) "31.99999916826298119"
2) 1) "shenzhen"
2) 1) "114.00000125169754028"
2) "22.50000113800319212"
georadiusbymember
找出位于指定元素周圍其他的元素
127.0.0.1:6379> georadiusbymember china:city beijing 1000 km
1) "nanjing"
2) "beijing"
3) "xian"
geohash 返回一個或者多個位置元素的Geohash
該命令將返回11個字符串的Geohash字符串
127.0.0.1:6379> geohash china:city beijing xian
1) "wx4fbxxfke0"
2) "wz8un9xn970"
geo 底層的實現(xiàn)原理其實就是zset!可以使用zset命令來操作geo
127.0.0.1:6379> zrange china:city 0 -1
1) "shenzhen"
2) "hangzhou"
3) "shanghai"
4) "nanjing"
5) "beijing"
6) "xian"
Hyperloglog
Redis 在 2.8.9 版本添加了 HyperLogLog 結(jié)構(gòu)。
Redis HyperLogLog 是用來做基數(shù)統(tǒng)計的算法,HyperLogLog 的優(yōu)點是,在輸入元素的數(shù)量或者體積非常非常大時,計算基數(shù)所需的空間總是固定 的、并且是很小的。
在 Redis 里面,每個 HyperLogLog 鍵只需要花費 12 KB 內(nèi)存,就可以計算接近 2^64 個不同元素的基 數(shù)。這和計算基數(shù)時,元素越多耗費內(nèi)存就越多的集合形成鮮明對比。
但是,因為 HyperLogLog 只會根據(jù)輸入元素來計算基數(shù),而不會儲存輸入元素本身,所以 HyperLogLog 不能像集合那樣,返回輸入的各個元素。
什么是基數(shù)?
比如數(shù)據(jù)集 {1, 3, 5, 7, 5, 7, 8}, 那么這個數(shù)據(jù)集的基數(shù)集為 {1, 3, 5 ,7, 8}, 基數(shù)(不重復(fù)元素)為5。 基數(shù)估計就是在誤差可接受的范圍內(nèi),快速計算基數(shù)。
優(yōu)點∶占用的內(nèi)存是固定,2^64不同的元素的技術(shù),只需要廢12KB內(nèi)存!如果要從內(nèi)存角度來比較的話
Hyperloglog首選 !網(wǎng)頁的UV(一個人訪問一個網(wǎng)站多次,但是還是算作一個人!)
傳統(tǒng)的方式,set保存用戶的id,然后就可以統(tǒng)計set中的元素數(shù)量作為標(biāo)準(zhǔn)判斷!
這個方式如果保存大量的用戶id,就會比較麻煩!我們的目的是為了計數(shù),而不是保存用戶id ;
0.81%錯誤率!統(tǒng)計UV任務(wù),可以忽略不計的!
redis HyperLogLog 的基本命令:
序號 | 命令及描述 |
---|---|
1 | [PFADD key element element …] 添加指定元素到 HyperLogLog 中。 |
2 | [PFCOUNT key key …] 返回給定 HyperLogLog 的基數(shù)估算值。 |
3 | [PFMERGE destkey sourcekey sourcekey …] 將多個 HyperLogLog 合并為一個 HyperLogLog |
實例:
127.0.0.1:6379> pfadd mykey a b c d e f g h i j # 創(chuàng)建第一組元素 mykey
(integer) 1
127.0.0.1:6379> pfcount mykey # 統(tǒng)計mykey元素的基數(shù)數(shù)量
(integer) 10
127.0.0.1:6379> pfadd mykey2 i j z x c v b n m # 創(chuàng)建第er組元素 mykey2
(integer) 1
127.0.0.1:6379> pfcount mykey2
(integer) 9
127.0.0.1:6379> pfcount mykey3
(integer) 9
127.0.0.1:6379> pfmerge mykey3 mykey mykey2 # 合并兩組mykey mykey2 => mykey3 并集
OK
127.0.0.1:6379> pfcount mykey3
(integer) 15
如果允許容錯,那么一定可以使用Hyperloglog!
如果不允許容錯,就使用set或者自己的數(shù)據(jù)類型即可!
Bitmaps
位存儲
統(tǒng)計用戶信息,活躍,不活躍!登錄、未登錄!打卡,365打卡!兩個狀態(tài)的,都可以使用Bitmaps !
Bitmaps位圖,數(shù)據(jù)結(jié)構(gòu)!都是操作二進(jìn)制位來進(jìn)行記錄,就只有0和1兩個狀態(tài)!
365天= 365 bit 1字節(jié)= 8 bit 46個字節(jié)左右!
使用bitmap 來記錄周一到周日的打卡!
周一:1 周二:0 周三:0 周四:1 …
查看某一天是否打卡文章來源:http://www.zghlxwxcb.cn/news/detail-680383.html
127.0.0.1:6379> getbit sign 3
(integer) 0
127.0.0.1:6379> getbit sign 6
(integer) 0
統(tǒng)計操作 統(tǒng)計打卡的天數(shù)文章來源地址http://www.zghlxwxcb.cn/news/detail-680383.html
127.0.0.1:6379> bitcount sign # 統(tǒng)計這周打卡記錄
(integer) 3
到了這里,關(guān)于Redis三種特殊數(shù)據(jù)類型的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!