一、HyperLogLog 基底數統計
1.1 什麼是基底數?
我們直接透過一個例子就可以理解什麼是基數統計,例如資料集{1, 2, 3, 3, 5, 5,}, 那麼這個資料集的基數集是{1,2, 3,5}, 基數(不重複元素)為4。也就是說是不重複元素的個數。
1.2 使用基數統計的好處
每個 HyperLogLog 鍵只需要花費 12 KB 內存,就可以計算接近 2^64 個不同元素的基數。這和計算基數時,元素越多耗費記憶體就越多的集合形成鮮明對比。如果要從記憶體角度來比較的話Hyperloglog是首選。
1.3 應用場景
網頁的uv(一個人造訪一個網站多次,但是還是算做一個人)
傳統的方式: set(因為set不允許重複,如果重複就覆蓋)保存用戶的id,然後就可以統計,set中元素數量作為標準判斷,這個方式如果保存大量的用戶id,就會比較麻煩並且在大型網站中會佔用大量的記憶體。我們的目的是為了計數,而不是保存用戶id。
使用HyperLogLog:一個HyperLogLog 鍵只需要12KB,能夠計算的數量卻非常巨大,佔用的記憶體空間大大減少。
1.4 注意事項
如果允許容錯(0.81% 錯誤率,計數的話可以忽略不計),那麼一定可以使用Hyperloglog!如果不允許容錯,就使用set或自己的資料類型即可!
1.5 基本指令
序號 | 指令及描述 |
---|---|
新增指定元素到HyperLogLog 中。 | |
傳回給定 HyperLogLog 的基數估算值。 |
#1.6 使用
127.0.0.1:6379> pfadd mykey1 a b c d e f #给第一组添加数据 (integer) 1 127.0.0.1:6379> pfcount mykey1 #统计mykey1的基数数量 (integer) 6 127.0.0.1:6379> pfadd mykey2 e e f j #给第二组添加数据 (integer) 1 127.0.0.1:6379> pfcount mykey2 #统计mykey2的基数数量 (integer) 3 127.0.0.1:6379> pfmerge mykey3 mykey1 mykey2 # 合并两组 mykey1 mykey2 => mykey3 并集 OK 127.0.0.1:6379> pfcount mykey3 #统计mykey3的基数数量 (integer) 7
二、Geospatial 地理位置
2.1 介紹
- Redis3.2 版本開始推出的Geospatial,可以推算地理位置的訊息,兩地之間的距離,方圓幾裡的人。
2.2 使用場景
????朋友定位
-
???? 看附近的人
???? 搭計程車距離計算
#指令及描述 |
1 |
將指定的地理空間位置(緯度、經度、名稱)加入指定的key中 |
2 |
從key傳回所有給定位置元素的位置(經度和緯度)。 |
3 |
傳回兩個給定位置之間的距離,如果兩個位置之間的其中一個不存在, 那麼指令傳回空值。 |
4 GEORADIUS key 經度緯度範圍數值單位 |
5 |
|
#找出位於指定範圍內的元素,中心點是由給定的位置元素決定 |
6 |
將傳回11個字元的Geohash字串,如果兩個字串越接近,那麼則距離越近。 |
7 |
取得指定key中座標資訊 |
8 |
查询地点经纬度:
城市经纬度查询-国内城市经度纬度在线查询工具
2.4 详细讲解
2.4.1 GEOADD
作用:添加地理位置
规则:两级无法直接添加,我们一般会下载城市数据,直接通过java程序一次性导入!
语法:GEOADD key 经度 纬度 地点名称
注意事项
有效的经度从-180度到180度。
有效的纬度从-85.05112878度到85.05112878度。
当坐标位置超出上述指定范围时,该命令将会返回一个错误。
使用
#添加单个信息 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
作用:获得指定地点的位置信息(经纬度)
语法:GEOPOS key 地点名称
使用
127.0.0.1:6379> geopos address beijin #获得北京的地理位置 1) 1) "116.40528291463851929" #经度 2) "39.9049884229125027" #纬度
2.4.3 GEODIST
作用:返回两个给定位置之间的距离,如果两个位置之间的其中一个不存在, 那么命令返回空值。
语法:GEODIST key 地点1 地点2 单位
单位参数:
m 表示单位为米。
km 表示单位为千米。
mi 表示单位为英里。
ft 表示单位为英尺。
如果用户没有显式地指定单位参数, 那么 GEODIST 默认使用米作为单位。
使用:
127.0.0.1:6379> geodist address beijin shanghai km #查询北京与上海之间的距离 "1067.5980"
2.4.4 GEORADIUS
作用:以给定的经纬度为中心, 找出某一半径内的元素。
语法:GEORADIUS key 经度 纬度 范围数值 单位
使用:
#查找以116,39这个经纬度为中心,寻找方圆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
作用:找出位于指定范围内的元素,中心点是由给定的位置元素决定。
语法:GEORADIUSBYMEMBER key 地点 距离数值 单位
使用:
#找出距离北京方圆1500km内的城市 127.0.0.1:6379> georadiusbymember address beijin 1500 km 1) "shanghai" 2) "beijin"
2.4.6 GEOHASH
作用:将返回11个字符的Geohash字符串,如果两个字符串越接近,那么则距离越近。
语法:GEOHASH key 地点1 地点2
???? 使用:
127.0.0.1:6379> geohash address beijin shantou 1) "wx4g0b7xrt0" 2) "ws4uzy8d030"
2.4.7 ZRANGE
作用:获得指定key中坐标信息。
语法:zrange key start stop
使用:
127.0.0.1:6379> zrange address 0 -1 1) "shantou" 2) "shanghai" 3) "beijin"
2.4.8 ZREM
作用:删除指定key下指定目标的数据。
语法:zrem key 地点
使用:
127.0.0.1:6379> zrem address shanghai (integer) 1
三、BitMap
介绍
BitMap是通过一个bit位来表示某个元素对应的值或者状态,只有0 和 1 两个状态,其中的key就是对应元素本身。365 天 = 365 bit ,1字节 = 8bit ,也就是说统计一年的用户状态只需要46 个字节左右,所以其能够节省很大的空间。
应用场景
(1)用户签到
(2)统计活跃用户
(3)用户在线状态(在线就设置为1,不在线就设置为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
统计本周的打卡记录
127.0.0.1:6379> bitcount sign (integer) 4
以上是Redis的特殊資料型別如何使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

重新命名butrequirquirequirquirequiresificantificantramandinvolvorvesindatapersistenceandscalibility.1)ITSIN-MEMORYNATURENATUREMORYNATURENATURENATURENATUREPROVIDESULTRA-FASTRAITATITS/WREATERATITS/WREATERATITS/WREATERATITS.2)然而,Idealsforeal-timeApplications.2)然而,beleftal-foreal-timeApplications.2)

Redisoutperformstraditionaldatabasesinspeedforread/writeOperationsDuetoitsin-memorynature,niletraditionalditionalditionalditationaldatabasesexcelcelincomplexqueriessanddaintegrity.1)redisisisisideSidealForrealForreal-timeanalyticsanticanticanticanticanticantic.2)

用戶edisinsteadofatraditionaldatabasewhenyourapplicationrequirespeedandreal-timedataprocorsing,sueAsAsforCaching,sessionmanagement,orrereal-timeanalytics.redisexcelsin:1)caching,緩存,減少載荷載量

Redis超越SQL數據庫的原因在於其高性能和靈活性。 1)Redis通過內存存儲實現極快的讀寫速度。 2)它支持多種數據結構,如列表和集合,適用於復雜數據處理。 3)單線程模型簡化開發,但高並發時可能成瓶頸。

Redis在高並發和低延遲場景下優於傳統數據庫,但不適合複雜查詢和事務處理。 1.Redis使用內存存儲,讀寫速度快,適合高並發和低延遲需求。 2.傳統數據庫基於磁盤,支持複雜查詢和事務處理,數據一致性和持久性強。 3.Redis適用於作為傳統數據庫的補充或替代,但需根據具體業務需求選擇。

Redisisahigh-performancein-memorydatastructurestorethatexcelsinspeedandversatility.1)Itsupportsvariousdatastructureslikestrings,lists,andsets.2)Redisisanin-memorydatabasewithpersistenceoptions,ensuringfastperformanceanddatasafety.3)Itoffersatomicoper

Redis主要是一個數據庫,但它不僅僅是數據庫。 1.作為數據庫,Redis支持持久化,適合高性能需求。 2.作為緩存,Redis提升應用響應速度。 3.作為消息代理,Redis支持發布-訂閱模式,適用於實時通信。

redisisamultifaceTedToolThatServesAsAdatabase,server和more.itfunctionsasanin-memorydatastrustore,supportsvariousDataStructures,and CanbeusedAsacache,MessageBroker,sessionStorage,sessionStorage,sessionstorage,andford forderibedibedlocking。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

WebStorm Mac版
好用的JavaScript開發工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3漢化版
中文版,非常好用

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)