###redis實現區間查詢在實際開發中經常遇到這樣需求:服務端對於客戶端不同的版本區間會做些不同的配置,那麼客戶端乙個版本過來怎麼快速的定位是屬於哪個版本區間呢?可以利用`sorted sets`的`zrangebyscore`命令。
```zadd myset 1011 v1_start
zadd myset 1015 v1_end
zadd myset 1018 v2_start
zadd myset 1023 v2_end
```如上我們像myset裡插入了4條資料,代表的意思是版本區間v1是從1011-1015版本,版本區間v2是從1018-1023版本。
注:redis的sorted sets需要score必須為float型,所以這裡需要對版本號做乙個等價的轉換。
那麼我現在如何判斷1014版本屬於哪個區間呢,使用zrangebyscore如下操作:
```zrangebyscore myset 1014 +inf limit 0 1
1)v1_end
```返回v1_end說明1014屬於版本區間1,上面的這個命令的意思是在myset中查詢第乙個score值大於等於1014的member,如果我們查詢乙個不在區間內的版本,比如1016:
```zrangebyscore myset 1014 +inf limit 0 1
1)v2_start
```返回v2_start說明它不已有的版本區間內。
關於該命令的具體用法可以看這裡[這裡][1]。
不過這種用法不適合那些區間之間存在重疊的場景。
###實現乙個hash裡不同的field擁有不同expire的場景
目前redis不支援這個特性,這是redis的設計原則決定的。可以在hash中每個field對應的value本身含有時間的資訊,讓應用自己去理解和處理。
![2]
###在redis裡維護自增長的主鍵
有時候可能需要在redis的多個資料結構之間維護乙個類似關係型資料庫中的自增長主鍵,可以利用sorted sets的zincrby
```
zincrby myset 1 config_no
1)2```
上面的意思是將myset中的config_no的score值加1,讓key不存在或member不存在時上面的命令相當於:
```zadd myset 1 config_no
1)1```
[1]:
[2]:
記Mysql區間分組查詢實現
場景 一張使用者表 user 有使用者id id 餘額 balance 等字段,要求展示 餘額在某個區間內的人數 區間有0 1萬,1 10萬,10 50萬,50 100萬,100萬 下面是模擬資料 使用者id 餘額 1 100 2 200 3 3223 4 100001 5 100025 6 512...
樹狀陣列實現區間修改查詢
一般的樹狀陣列對於可減資訊可以實現單點修改 區間查詢,如果套用差分,可以實現區間修改 單點查詢。設要維護的序列 a 差分陣列 d i a i a 要求 1,x 區間的和 begin query x sum x a i sum x sum i d i sum x x i 1 d i end 維護乙個序...
redisview如何查詢 redis實現區間查詢
redis實現區間查詢 在實際開發中經常遇到這樣需求 服務端對於客戶端不同的版本區間會做些不同的配置,那麼客戶端乙個版本過來怎麼快速的定位是屬於哪個版本區間呢?可以利用 sorted sets 的 zrangebyscore 命令。zadd myset 1011 v1 start zadd myse...