最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一、基本語法

1. 普通范圍查詢

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

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

2. 排除邊界

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

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

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

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

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

三、排序與分頁

1. SORTBY

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

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

2. LIMIT

  • LIMIT offset count 控制返回窗口,實現(xià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(等價于示例1)

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

五、多語言客戶端示例

以下以 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)

六、最佳實踐

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

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

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

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

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

七、常見誤區(qū)

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

八、總結(jié)

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

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

相關(guān)文章

  • 解密Redis助力雙11背后電商秒殺系統(tǒng)(推薦)

    解密Redis助力雙11背后電商秒殺系統(tǒng)(推薦)

    這篇文章主要介紹了解密Redis助力雙11背后電商秒殺系統(tǒng),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • Redis如何實現(xiàn)投票功能

    Redis如何實現(xiàn)投票功能

    這篇文章主要介紹了Redis如何實現(xiàn)投票功能,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Redis bgsave的使用小結(jié)

    Redis bgsave的使用小結(jié)

    BGSAVE是Redis用于生成 RDB 持久化文件的核心操作,本文就來詳細(xì)的介紹一下Redis bgsave的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-04-04
  • Linux安裝Redis、后臺運行、系統(tǒng)自啟動的設(shè)置方法

    Linux安裝Redis、后臺運行、系統(tǒng)自啟動的設(shè)置方法

    Redis是用C語言編寫的開源免費的高性能的分布式內(nèi)存數(shù)據(jù)庫,基于內(nèi)存運行并支持持久化的NoSQL數(shù)據(jù)庫。這篇文章主要介紹了Linux安裝Redis、后臺運行、系統(tǒng)自啟動,需要的朋友可以參考下
    2020-01-01
  • Redis?分布式鎖必避的?8?大問題及解決方案全解析

    Redis?分布式鎖必避的?8?大問題及解決方案全解析

    文章主要討論了Redis分布式鎖在實際應(yīng)用中常見的8大問題,包括誤刪他人持有鎖、鎖過期提前釋放、Redis單點故障、鎖無法重入、主從切換鎖丟失、加鎖失敗無重試策略、長時間持有鎖和鎖key設(shè)計不當(dāng)?shù)?感興趣的朋友跟隨小編一起看看吧
    2026-01-01
  • Win10配置redis服務(wù)實現(xiàn)過程詳解

    Win10配置redis服務(wù)實現(xiàn)過程詳解

    這篇文章主要介紹了Win10配置redis服務(wù)實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • 淺析Redis中String數(shù)據(jù)類型及其底層編碼

    淺析Redis中String數(shù)據(jù)類型及其底層編碼

    這篇文章主要介紹?Redis?中?String?數(shù)據(jù)類型及其底層編碼,文中有詳細(xì)的代碼示例,對大家的工作及學(xué)習(xí)有一定的幫助,需要的朋友可以參考下
    2023-05-05
  • Redis不同數(shù)據(jù)類型的命令語句詳解

    Redis不同數(shù)據(jù)類型的命令語句詳解

    這篇文章主要介紹了Redis不同數(shù)據(jù)類型的命令語句,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-10-10
  • redis如何后臺啟動的方法

    redis如何后臺啟動的方法

    這篇文章主要介紹了redis如何后臺啟動的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Redis調(diào)用Lua腳本及使用場景快速掌握

    Redis調(diào)用Lua腳本及使用場景快速掌握

    Redis?是一種非常流行的內(nèi)存數(shù)據(jù)庫,常用于數(shù)據(jù)緩存與高頻數(shù)據(jù)存儲。大多數(shù)開發(fā)人員可能聽說過redis可以運行?Lua?腳本,但是可能不知道redis在什么情況下需要使用到Lua腳本
    2022-03-03

最新評論

苍南县| 大厂| 谢通门县| 中卫市| 西安市| 兴隆县| 大田县| 湄潭县| 界首市| 含山县| 汉寿县| 响水县| 泗洪县| 峨边| 印江| 长寿区| 凤冈县| 建阳市| 富裕县| 肇州县| 青神县| 新兴县| 荥阳市| 德州市| 新沂市| 钟山县| 淅川县| 柳河县| 大新县| 镇沅| 乐业县| 新密市| 城固县| 民权县| 安塞县| 鹤峰县| 循化| 新昌县| 泾阳县| 花莲县| 商水县|