欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Redis 數(shù)值范圍查詢(Numeric Range Queries)的實(shí)現(xiàn)

 更新時(shí)間:2025年11月13日 09:33:19   作者:Hello.Reader  
本文主要介紹了Redis 數(shù)值范圍查詢(Numeric Range Queries)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

一、基本語(yǔ)法

1. 普通范圍查詢

使用查詢字符串語(yǔ)法,將字段名及上下界寫在一對(duì)方括號(hào)內(nèi):

FT.SEARCH idx "@field:[start end]"
  • startend 默認(rèn)均包含(inclusive)。
  • 例如,檢索價(jià)格在 500 到 1000 區(qū)間的商品:
FT.SEARCH idx:bicycle "@price:[500 1000]"

2. 排除邊界

若要排除上(或下)界,在該值前加左括號(hào) (

FT.SEARCH idx "@price:[(1000 +inf]"
  • 上例匹配 price > 1000
  • -inf / +inf 可用于定義“下不封頂”或“上不封頂”的開/閉區(qū)間。

二、FILTER 與執(zhí)行計(jì)劃差異

除了在查詢字符串中直接指定范圍,還可借助 FILTER 子句:

FT.SEARCH idx "*" FILTER price 500 1000
  • FILTER 會(huì)在查詢解析(如全文 *)完成后再執(zhí)行數(shù)值過(guò)濾。
  • 當(dāng)索引包含數(shù)值字段且僅依賴數(shù)值過(guò)濾時(shí),若直接在查詢字符串中指定范圍,RediSearch 能利用索引跳過(guò)不匹配文檔,性能通常更佳;
  • 若查詢中包含復(fù)雜子句或聚合,FILTER 提供了靈活的后置過(guò)濾方案。

三、排序與分頁(yè)

1. SORTBY

默認(rèn)情況下,結(jié)果按文檔出現(xiàn)順序返回。可用 SORTBY 按數(shù)值字段排序:

FT.SEARCH idx:bicycle "@price:[-inf 2000]" 
  SORTBY price ASC
  LIMIT 0 5
  • ASC / DESC 指定升序或降序。
  • 未顯式排序時(shí),可視為按文檔 ID 或添加順序返回。

2. LIMIT

  • LIMIT offset count 控制返回窗口,實(shí)現(xiàn)分頁(yè)或“滾動(dòng)”訪問(wèn)大結(jié)果集;
  • Redis 默認(rèn)只返回前 10 條,若需完整結(jié)果,務(wù)必配合 LIMIT。

四、典型示例

假設(shè)已創(chuàng)建如下索引:

FT.CREATE idx:bicycle ON JSON PREFIX 1 bicycle:
  SCHEMA $.price AS price NUMERIC SORTABLE
         $.brand AS brand TEXT SORTABLE
         $.model AS model TEXT SORTABLE

并已插入若干文檔。

示例1:500 ≤ price ≤ 1000

FT.SEARCH idx:bicycle "@price:[500 1000]"

示例2:price > 1000

FT.SEARCH idx:bicycle "@price:[(1000 +inf]"

示例3:price ≤ 2000,返回最便宜的 5 輛

FT.SEARCH idx:bicycle "@price:[-inf 2000]"
  SORTBY price ASC
  LIMIT 0 5

示例4:使用 FILTER(等價(jià)于示例1)

FT.SEARCH idx:bicycle "*" FILTER price 500 1000

五、多語(yǔ)言客戶端示例

以下以 Python 和 Go 為例,展示如何在客戶端執(zhí)行數(shù)值范圍查詢。

Python(redis-py + redisearch-py)

from redis import Redis
from redis.commands.search.field import NumericField, TextField
from redis.commands.search.query import Query

r = Redis()
# 假設(shè)已創(chuàng)建索引

q = Query("@price:[500 1000]").sort_by("price", asc=True).paging(0, 10)
res = r.ft("idx:bicycle").search(q)
print(res.total, res.docs)

Go(go-redis + redisearch)

import (
    "fmt"
    "github.com/RediSearch/redisearch-go/redisearch"
)

client := redisearch.NewClient("localhost:6379", "idx:bicycle")

// 構(gòu)造查詢:500 <= price <= 1000,按 price 升序,返回前 10 條
q := redisearch.NewQuery("@price:[500 1000]").
    SortBy("price", true).
    Limit(0, 10)

docs, total, err := client.Search(q)
if err != nil {
    panic(err)
}
fmt.Printf("匹配 %d 條,結(jié)果:%v\n", total, docs)

六、最佳實(shí)踐

  1. 字段聲明時(shí)加 SORTABLE
    使 SORTBY 與范圍過(guò)濾都能利用壓縮索引,高效跳過(guò)不匹配文檔。

  2. 盡量在查詢字符串中指定范圍
    直接使用 @field:[a b],避免 FILTER 的后置過(guò)濾帶來(lái)的額外掃描。

  3. 分頁(yè)與并發(fā)拉取
    對(duì)于百萬(wàn)級(jí)以上結(jié)果集,避免一次性拉取所有結(jié)果,用 LIMIT 分頁(yè),并發(fā)執(zhí)行多次查詢或使用游標(biāo)。

  4. 監(jiān)控查詢性能
    通過(guò) FT.INFO idx 查看索引 cardinality、統(tǒng)計(jì)信息;用 LATENCY 命令監(jiān)控查詢延遲分布。

  5. 結(jié)合其他索引類型
    可將數(shù)值過(guò)濾與全文(TEXT)、標(biāo)簽(TAG)、地理(GEO)等條件組合,使用布爾子句優(yōu)化多維度查詢。

七、常見誤區(qū)

  • 誤用通配符 * 加 FILTER
    FT.SEARCH idx "*" FILTER price x y 等價(jià)于全表掃描再過(guò)濾,性能遜于直接 @price:[x y]
  • 忽略 SORTABLE
    未加 SORTABLE 的數(shù)值字段無(wú)法在查詢時(shí)高效排序或范圍掃描。
  • 忘記 LIMIT
    默認(rèn)只返回前 10 條,若需遍歷后續(xù)結(jié)果,務(wù)必使用 LIMIT offset count。

八、總結(jié)

Redis 數(shù)值范圍查詢提供了簡(jiǎn)潔靈活的語(yǔ)法和高效的執(zhí)行性能。通過(guò)在索引設(shè)計(jì)階段添加 NUMERIC SORTABLE,在查詢時(shí)優(yōu)先使用 @field:[a b],并結(jié)合 SORTBYLIMIT,即可在大規(guī)模數(shù)據(jù)集上快速完成價(jià)格區(qū)間、閾值篩選等場(chǎng)景下的檢索需求。配合監(jiān)控與索引優(yōu)化,你將獲得更穩(wěn)定、更低延遲的數(shù)值范圍查詢體驗(yàn)。

到此這篇關(guān)于Redis 數(shù)值范圍查詢(Numeric Range Queries)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Redis 數(shù)值范圍查詢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Redis中鍵和數(shù)據(jù)庫(kù)通用指令詳解

    Redis中鍵和數(shù)據(jù)庫(kù)通用指令詳解

    這篇文章主要為大家介紹了Redis中鍵和數(shù)據(jù)庫(kù)通用指令基本操作詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • SpringSession+Redis實(shí)現(xiàn)集群會(huì)話共享的方法

    SpringSession+Redis實(shí)現(xiàn)集群會(huì)話共享的方法

    為了保證WEB應(yīng)用的承載能力, 需要對(duì)WEB應(yīng)用進(jìn)行集群處理.這篇文章主要介紹了SpringSession+Redis實(shí)現(xiàn)集群會(huì)話共享的方法,需要的朋友參考下吧
    2018-08-08
  • Redis increment 函數(shù)處理并發(fā)序列號(hào)案例

    Redis increment 函數(shù)處理并發(fā)序列號(hào)案例

    這篇文章主要介紹了Redis increment 函數(shù)處理并發(fā)序列號(hào)案例,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • Redis本地鎖和分布式鎖的區(qū)別小結(jié)

    Redis本地鎖和分布式鎖的區(qū)別小結(jié)

    Redis本地鎖和分布式鎖在設(shè)計(jì)目的、實(shí)現(xiàn)方式和應(yīng)用場(chǎng)景上都有顯著區(qū)別,下面就來(lái)介紹一下,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-04-04
  • redis全局命令set、get、keys使用方法

    redis全局命令set、get、keys使用方法

    這篇文章主要介紹了redis全局命令set、get、keys使用方法的相關(guān)資料,詳細(xì)講解了Redis的基本概念和常用命令,強(qiáng)調(diào)了在生產(chǎn)環(huán)境中避免使用keys命令的重要性,需要的朋友可以參考下
    2025-03-03
  • Redis SETNX的實(shí)現(xiàn)示例

    Redis SETNX的實(shí)現(xiàn)示例

    SETNX是Redis提供的原子操作,用于在指定鍵不存在時(shí)設(shè)置鍵值,并返回操作結(jié)果,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • Redis中HyperLogLog的使用小結(jié)

    Redis中HyperLogLog的使用小結(jié)

    Redis 的 HyperLogLog 是一種概率性數(shù)據(jù)結(jié)構(gòu),用于統(tǒng)計(jì)唯一元素的數(shù)量(基數(shù)),本文主要介紹了Redis中HyperLogLog的使用小結(jié),感興趣的可以了解一下
    2025-05-05
  • redis搭建哨兵集群的實(shí)現(xiàn)步驟

    redis搭建哨兵集群的實(shí)現(xiàn)步驟

    本文主要介紹了redis搭建哨兵集群的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • 解決redis-cli報(bào)錯(cuò)Could not connect to Redis at 127.0.0.1:6379: Connection refused

    解決redis-cli報(bào)錯(cuò)Could not connect to Redis&

    這篇文章主要介紹了解決redis-cli報(bào)錯(cuò)Could not connect to Redis at 127.0.0.1:6379: Connection refused,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • Redis如何解決熱key問(wèn)題

    Redis如何解決熱key問(wèn)題

    這篇文章主要介紹了Redis如何解決熱key問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-07-07

最新評(píng)論