redis實現區間查詢

2022-02-06 08:27:33 字數 1228 閱讀 9894

###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...