淮南市潘集區(qū)信息建設(shè)網(wǎng)站種子搜索神器 bt 下載
文章目錄
- redis位圖(bitmap) --- 底子還是string
- 基本命令圖示
- `setbit key offset value` setbit 鍵 偏移位 只能零或者1
- `getbit key offset` 查看
- 獲取字符串長度 `strlen`
- 統(tǒng)計(jì)key中包含1的個(gè)數(shù) `bitcount key`
- `bitop` 統(tǒng)計(jì)兩個(gè)比特key是否都為1
- 技術(shù)落地:打卡簽到,頻繁修改數(shù)據(jù)庫的,結(jié)果只有0和1
- redis基數(shù)統(tǒng)計(jì)(HyperLogLog) --- 底子是string
- UV:Unique Visitor,獨(dú)立訪客;統(tǒng)計(jì)搜索詞條
- 基數(shù)統(tǒng)計(jì)算法
- 基數(shù)
- 基本命令圖示
- 基數(shù)落地:天貓統(tǒng)計(jì)億級UV
- redis地理空間 (GEO) --- 底子上是有序集合
- 獲取經(jīng)緯度
- 添加經(jīng)緯度坐標(biāo) `GEOADD key 經(jīng)度1 緯度1 位置名稱1 經(jīng)度2 緯度2 位置名稱2...`
- 處理中文亂碼
- `GEOPOS key value1 value2` 從鍵里面返回所有給定位置元素的位置 (經(jīng)度和緯度)
- `GEODIST key value1 value2 [m | km | ft | mi] ` 返回兩個(gè)給定位置之間的距離
- `GEORADIUS key 經(jīng)度 緯度 10km...` 以給定的經(jīng)緯度為中心,返回與中心的距離不超過給定最大距離的所有位置元素
- `GEORADIUSBYMEMBER key value 10km ...` 跟GEORADIUS類似
- `GEOHASH key value1 value2` 返回一個(gè)或多個(gè)位置元素的 Geohash 表示
- redis流 (Stream) --- 自成一脈stream
- 底層結(jié)構(gòu)與原理
- 基礎(chǔ)命令圖示
- 特殊符號
- 向隊(duì)列添加消息到隊(duì)列末尾 `XADD key * id 1 cname z3`
- 范圍檢索 `XRANGE key start end [COUNT count]`
- `XREVRANGE KEY + - `
- `XDEL key MQID` 按照主鍵刪除
- `XLEN key` 消息隊(duì)列長度
- 截取 `XTRIM key maxlen|minlen 2`
- 讀取消息(阻塞、非阻塞),只會(huì)返回ID大于某值的消息 `XREAD [COUNT count] stream key ID`
- 消費(fèi)組執(zhí)行-`XGROUP`
- 消費(fèi)組執(zhí)行-`XREADGROUP GROUP`
- 重要問題-ACK機(jī)制
- `XPENDING` 查詢每個(gè)消費(fèi)組內(nèi)所有消費(fèi)者 r已讀取、但尚未確認(rèn)]的消息
- `XACK` 向消息隊(duì)列確認(rèn)消息處理已完成
- `XINFO stream key` 打印出詳情信息
- redis位域(bitfield)
- 應(yīng)用、用途 --- 位域修改、溢出控制
- 基本語法 `BITFIELD key [GET type offset] [SET type offset value] [INCRBY type offset increment] [OVERFLOW WRAP|SAT|FAIL]`
- `BITFIELD key [GET type offset]`
- `BITFIELD key [SET type offset value]`
- `BITFIELD key [INCRBY type offset increment]`
- `溢出控制OVERFLOW [WRAPISAT|FAIL]`
redis位圖(bitmap) — 底子還是string
由0和1狀態(tài)表現(xiàn)的二進(jìn)制位的bit數(shù)組
位圖本質(zhì)是數(shù)組,它是基于String數(shù)據(jù)類型的按位的操作。該數(shù)組由多個(gè)二進(jìn)制位組成,每個(gè)二進(jìn)制位都對應(yīng)一個(gè)偏移量(我們稱之為一個(gè)索引)。
-
基本命令圖示
-
setbit key offset value
setbit 鍵 偏移位 只能零或者1Bitmap的偏移量是從零開始算的
-
getbit key offset
查看 -
獲取字符串長度
strlen
不是字符串長度而是占據(jù)幾個(gè)字節(jié),超過8位后自己按照8位一組一byte再擴(kuò)容
-
統(tǒng)計(jì)key中包含1的個(gè)數(shù)
bitcount key
-
bitop
統(tǒng)計(jì)兩個(gè)比特key是否都為1 -
技術(shù)落地:打卡簽到,頻繁修改數(shù)據(jù)庫的,結(jié)果只有0和1
redis基數(shù)統(tǒng)計(jì)(HyperLogLog) — 底子是string
HyperLogLog 是用來做基數(shù)統(tǒng)計(jì)的算法,HyperLogLog 的優(yōu)點(diǎn)是,在輸入元素的數(shù)量或者體積非常非常大時(shí),計(jì)算基數(shù)所需的空間總是固定且是很小的。
在 Redis 里面,每個(gè) HyperLogLog 鍵只需要花費(fèi) 12 KB 內(nèi)存,就可以計(jì)算接近 2^64 個(gè)不同元素的基 數(shù)。這和計(jì)算基數(shù)時(shí),元素越多耗費(fèi)內(nèi)存就越多的集合形成鮮明對比。
但是,因?yàn)?HyperLogLog 只會(huì)根據(jù)輸入元素來計(jì)算基數(shù),而不會(huì)儲(chǔ)存輸入元素本身,所以 HyperLogLog 不能像集合那樣,返回輸入的各個(gè)元素。
記錄的不是數(shù)據(jù)本身,而是統(tǒng)計(jì)數(shù);是去重脫水后的真實(shí)數(shù)據(jù)
統(tǒng)計(jì)本身也存在些許誤差,誤差范圍在0.81%
-
UV:Unique Visitor,獨(dú)立訪客;統(tǒng)計(jì)搜索詞條
-
基數(shù)統(tǒng)計(jì)算法
-
基數(shù)
是一種數(shù)據(jù)集,去重復(fù)后的真實(shí)個(gè)數(shù)
-
基本命令圖示
-
基數(shù)落地:天貓統(tǒng)計(jì)億級UV
redis地理空間 (GEO) — 底子上是有序集合
Redis GEO 主要用于存儲(chǔ)地理位置信息,并對存儲(chǔ)的信息進(jìn)行操作,包括
添加地理位置的坐標(biāo)。
獲取地理位置的坐標(biāo)。
計(jì)算兩個(gè)位置之間的距離。
根據(jù)用戶給定的經(jīng)緯度坐標(biāo)來獲取指定范圍內(nèi)的地理位置集合
核心思想就是將球體轉(zhuǎn)換為平面,區(qū)塊轉(zhuǎn)換為一點(diǎn)
-
獲取經(jīng)緯度
百度提供的api:https://api.map.baidu.com/lbsapi/getpoint/
-
添加經(jīng)緯度坐標(biāo)
GEOADD key 經(jīng)度1 緯度1 位置名稱1 經(jīng)度2 緯度2 位置名稱2...
處理中文亂碼
-
GEOPOS key value1 value2
從鍵里面返回所有給定位置元素的位置 (經(jīng)度和緯度) -
GEODIST key value1 value2 [m | km | ft | mi]
返回兩個(gè)給定位置之間的距離ft:英尺;mi英里
-
GEORADIUS key 經(jīng)度 緯度 10km...
以給定的經(jīng)緯度為中心,返回與中心的距離不超過給定最大距離的所有位置元素GEORADIUS city 116.418017 39.914402 10 km withdist withcoord count 10 withhash desc
GEORADIUS city 116.418017 39.914402 10 km withdist withcoord withhash count 10 desc
WITHDIST: 在返回位置元素的同時(shí), 將位置元素與中心之間的距離也一并返回。 距離的單位和用戶給定的范圍單位保持一致。 WITHCOORD: 將位置元素的經(jīng)度和維度也一并返回。 WITHHASH: 以 52 位有符號整數(shù)的形式, 返回位置元素經(jīng)過原始 geohash 編碼的有序集合分值。 這個(gè)選項(xiàng)主要用于底層應(yīng)用或者調(diào)試, 實(shí)際中的作用并不大 COUNT 限定返回的記錄數(shù)。
-
GEORADIUSBYMEMBER key value 10km ...
跟GEORADIUS類似 -
GEOHASH key value1 value2
返回一個(gè)或多個(gè)位置元素的 Geohash 表示geohash算法生成的base32編碼值
redis流 (Stream) — 自成一脈stream
Redis Stream 是 Redis 5.0 版本新增加的數(shù)據(jù)結(jié)構(gòu)。
Redis Stream 主要用于消息隊(duì)列(MQ,Message Queue),Redis 本身是有一個(gè) Redis 發(fā)布訂閱 (pub/sub) 來實(shí)現(xiàn)消息隊(duì)列的功能,但它有個(gè)缺點(diǎn)就是消息無法持久化,如果出現(xiàn)網(wǎng)絡(luò)斷開、Redis 宕機(jī)等,消息就會(huì)被丟棄。
簡單來說發(fā)布訂閱 (pub/sub) 可以分發(fā)消息,但無法記錄歷史消息。
而 Redis Stream 提供了消息的持久化和主備復(fù)制功能,可以讓任何客戶端訪問任何時(shí)刻的數(shù)據(jù),并且能記住每一個(gè)客戶端的訪問位置,還能保證消息不丟失
總結(jié):redis流就是Redis版的MQ消息中間件+阻塞隊(duì)列
-
底層結(jié)構(gòu)與原理
-
基礎(chǔ)命令圖示
-
特殊符號
符號 含義 -
、+
最小和最大可能出現(xiàn)的Id $
$
表示只消費(fèi)新的消息,當(dāng)前流中最大的id,可用于將要到來的信息>
用于XREADGROUP命令,表示迄今還沒有發(fā)送給組中使用者的信息,會(huì)更新消費(fèi)者組的最后ID *
用于XADD命令中,讓系統(tǒng)自動(dòng)生成id -
向隊(duì)列添加消息到隊(duì)列末尾
XADD key * id 1 cname z3
-
消息ID必須要比上個(gè) ID 大
-
默認(rèn)用星號表示自動(dòng)生成規(guī)矩
*
用于XADD命令中,讓系統(tǒng)自動(dòng)生成 id -
客戶端顯示傳入規(guī)則:
Redis對于ID有強(qiáng)制要求,格式必須是時(shí)間戳-自增Id這樣的方式,且后續(xù)ID不能小于前一個(gè)ID
-
-
范圍檢索
XRANGE key start end [COUNT count]
- 用于獲取消息列表 (可以指定范圍忽略刪除的消息
- start 表示開始值,-代表最小值
- end 表示結(jié)束值,+代表最大值
- count 表示最多獲取多少個(gè)值
-
XREVRANGE KEY + -
與XRANGE 的區(qū)別在于,獲取消息列表元素的方向是相反的,end在前,start在后
-
XDEL key MQID
按照主鍵刪除 -
XLEN key
消息隊(duì)列長度 -
截取
XTRIM key maxlen|minlen 2
允許的最小id,從某個(gè)id值開始比該id值小的將會(huì)被拋棄
-
讀取消息(阻塞、非阻塞),只會(huì)返回ID大于某值的消息
XREAD [COUNT count] stream key ID
非阻塞
阻塞
-
消費(fèi)組執(zhí)行-
XGROUP
- $表示從Stream尾部開始消費(fèi)
- 0表示從Stream頭部開始消費(fèi)
- 創(chuàng)建消費(fèi)者組的時(shí)候必須指定 ID, ID 為 0 表示從頭開始消費(fèi),為 $ 表示只消費(fèi)新的消息,隊(duì)尾新來
-
消費(fèi)組執(zhí)行-
XREADGROUP GROUP
-
>
表示從第一條尚未被消費(fèi)的消息開始讀取 -
消費(fèi)組groupA內(nèi)的消費(fèi)者consumer1從mystream消息隊(duì)列中讀取所有消息
-
但是,不同消費(fèi)組的消費(fèi)者可以消費(fèi)同一條消息
-
負(fù)載均衡
讓組內(nèi)的多個(gè)消費(fèi)者共同分擔(dān)讀取消息,所以,我們通常會(huì)讓每個(gè)消費(fèi)者讀取部分消息,從而實(shí)現(xiàn)消息讀取負(fù)載在多個(gè)消費(fèi)者間是均衡分布的
-
-
重要問題-ACK機(jī)制
-
XPENDING
查詢每個(gè)消費(fèi)組內(nèi)所有消費(fèi)者 r已讀取、但尚未確認(rèn)]的消息查詢每個(gè)消費(fèi)組內(nèi)所有消費(fèi)者 r已讀取、但尚未確認(rèn)]的消息
查看某個(gè)消費(fèi)者具體讀取了哪些數(shù)據(jù)
下面抓圖所示:consumer2已讀取的消息的 ID是1659430293537-0
- 一旦消息1659430293537-0被consumer2處理了consumer2就可以使用 XACK 命令通知 Streams,然后這條消息就會(huì)被刪除
-
XACK
向消息隊(duì)列確認(rèn)消息處理已完成
-
XINFO stream key
打印出詳情信息
redis位域(bitfield)
通過bitfield命令可以一次性操作多個(gè)比特位域(指的是連續(xù)的多個(gè)比特位),它會(huì)執(zhí)行一系列操作并返回一個(gè)響應(yīng)數(shù)組,這個(gè)數(shù)組中的元素對應(yīng)參數(shù)列表中的相應(yīng)操作的執(zhí)行結(jié)果。
說白了就是通過bitfield命令我們可以一次性對多個(gè)比特位域進(jìn)行操作。
將一個(gè)Redis字符串看作是一個(gè)由二進(jìn)制位組成的數(shù)組并能對變長位寬和任意沒有字節(jié)對齊的指定整型位域進(jìn)行尋址和修改
-
應(yīng)用、用途 — 位域修改、溢出控制
hello 等價(jià)于 0110100001100101011011000110110001101111
-
基本語法
BITFIELD key [GET type offset] [SET type offset value] [INCRBY type offset increment] [OVERFLOW WRAP|SAT|FAIL]
-
BITFIELD key [GET type offset]
hello 等價(jià)于 0110100001100101011011000110110001101111
-
BITFIELD key [SET type offset value]
-
BITFIELD key [INCRBY type offset increment]
-
溢出控制OVERFLOW [WRAPISAT|FAIL]
-
WRAP:使用回繞 (wrap around) 方法處理有符號整數(shù)和無符號整數(shù)的溢出情況
-
SAT:使用飽和計(jì)算 (saturation arithmetic)方法處理溢出下溢計(jì)算的結(jié)果為最小的整數(shù)值,而上溢計(jì)算的結(jié)果為最大的整數(shù)值
-
FAIL:命令將拒絕執(zhí)行那些會(huì)導(dǎo)致上溢或者下溢情況出現(xiàn)的計(jì)算并向用戶返回空值表示計(jì)算未被執(zhí)行
-