redis 三种特殊数据类型
生活随笔
收集整理的這篇文章主要介紹了
redis 三种特殊数据类型
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
三種特性數(shù)據(jù)類型
geospatial
定位,附近的人,打車距離計算。
redis的geo在redis3.2版本就推出了。可推算地理位置的信息,兩地之間的距離,方圓幾里的人。
6個命令。
GEOADD GEODIST GEOHASH GEOPOS GEORADIUS GEORADIUSBYMEMBERhttps://redis.io/commands/geoadd # geoadd china:city 經(jīng)度 緯度 城市 # 可通過程序?qū)⑿畔⒆x取到redis中..geoadd china 116.40 39.90 beijing geoadd china:city 121.47 31.23 shanghai geoadd china:city 120.16 30.24 hangzhou# geopos 獲取城市所在的經(jīng)緯度 getpos china:city beijing getpos china:city hangzhou beijing # geodist 獲取兩個位置之間的距離 # m 米, km 千米, mi 英里, ft 英尺geodist china:city beijing shanghai km geodist china:city beijing hangzhou km# 需求:我附近的人?通過半徑來查詢。 # 獲取指定數(shù)量的人。 # georaduis 以給定的經(jīng)緯度為中心,找出某一半徑內(nèi)的元素 georadius china:city 110 30 1000 km # 當(dāng)前經(jīng)度110,維度30 獲取半徑1000km的城市georadius china:city 110 30 500 km withdis # 獲取到城市,距離georadius china:city 110 30 500 km withcoord # 獲取到城市,經(jīng)緯度georadius china:city 110 30 500 kim withdis withcoord count 1 # 獲取500千米內(nèi)一個城市,經(jīng)緯度,距離,# georadiusBymember 根據(jù)某個城市找到附近的城市 georadiusbymember china:city beijing 1000km # 找出北京附近1000km的城市# geohash 返回一個或者多個位置元素的geohash表示 # 返回11個字符的geohash字符串 geohash china:city bejing shanghai# geo的底層實現(xiàn)原理就是zset,可以使用zset來操作geo # 具體見zset操作有序集合,127.0.0.1:6379[1]> zrem china:city hangzhou (integer) 1 127.0.0.1:6379[1]> zrange china:city 0 -1 1) "shanghai" 2) "beijing"hyperloglogs
2.8.9 hyperloglog 數(shù)據(jù)結(jié)構(gòu) redis hyperloglog 基數(shù)統(tǒng)計的算法 (不重復(fù)) 優(yōu)點:占用內(nèi)存是固定的。2^64不同的元素的基數(shù),只需要12kb內(nèi)存。 網(wǎng)頁的uv(一個人訪問一個網(wǎng)站多次,但是還是算作一個人。)傳統(tǒng)的方式,set保存用戶的id,然后就可以統(tǒng)計set中的元素數(shù)量作為標(biāo)準(zhǔn)判斷。 set的確定,用戶id太長,太多。是為了計數(shù)。 測試使用 # 一組數(shù) pfadd mykey a b c d e f g h i j # 獲取不重復(fù)長度 pfcount mykey # new pfadd mykey2 i j z x c v b n m # get len pfcount mykey2 # 合成新的key pfmerge mykey 3 mykey my key2 # 兩組key的合并后不重復(fù)字符的長度 pfcount mykey3# demo# 第一組數(shù) 127.0.0.1:6379[1]> pfadd key1 a b c d e f g (integer) 1 127.0.0.1:6379[1]> pfcount key1 (integer) 7 # 第二組數(shù) 127.0.0.1:6379[1]> pfadd key2 e f g h i j k (integer) 1 127.0.0.1:6379[1]> pfcount key2 (integer) 7 # 合成一組基數(shù) 127.0.0.1:6379[1]> pfmerge key3 key1 key2 OK 127.0.0.1:6379[1]> pfcount key3 (integer) 11如果允許容錯,可使用hyperloglog來進(jìn)行網(wǎng)站訪問統(tǒng)計。
不容錯,使用set,或者自定義。
bitmap
# 位存儲 # 統(tǒng)計疫情的感染人數(shù) 01 01 # 統(tǒng)計用戶信息 活躍,不活躍。登錄,未登錄。打卡。兩個狀態(tài)的都可使用bitMaps. # 位圖,也是一種數(shù)據(jù)庫的。都是操作二進(jìn)制位來進(jìn)行記錄。就只有0和1兩個狀態(tài)。# setbit sign offset value 設(shè)置值 # getbit sign offset 獲取值 # bitcount sign (start, end) 統(tǒng)計值為1的# 打開demo,假設(shè)已經(jīng)打開的為1,位打開的為0# 設(shè)置周一到周天打開信息 0未打開,1已經(jīng)打開 127.0.0.1:6379[1]> setbit sign 0 1 (integer) 0 127.0.0.1:6379[1]> setbit sign 1 0 (integer) 0 127.0.0.1:6379[1]> setbit sign 2 0 (integer) 0 127.0.0.1:6379[1]> setbit sign 3 1 (integer) 0 127.0.0.1:6379[1]> setbit sign 4 1 (integer) 0 127.0.0.1:6379[1]> setbit sign 5 0 (integer) 0 127.0.0.1:6379[1]> setbit sign 6 1 (integer) 0 # 獲取打開信息 周六 127.0.0.1:6379[1]> getbit sign 5 (integer) 0 # 獲取打卡信息 周末 127.0.0.1:6379[1]> getbit sign 6 (integer) 1 # 統(tǒng)計打卡的數(shù)量1 127.0.0.1:6379[1]> bitcount sign (integer) 4 127.0.0.1:6379[1]> bitcount sign 0 6 (integer) 4總結(jié)
以上是生活随笔為你收集整理的redis 三种特殊数据类型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: uniapp 获取到js文件var一个变
- 下一篇: 列表页——基于Django框架的天天生鲜