Redis Stack擴展功能

Redis JSON

RedisJSON是Redis的一個擴展模塊,它提供了對JSON數據的原生支持。

常用操作:

-- 設置一個JSON數據

JSON.SET user $ '{"name":"loulan","age":18}'

## key是user,value就是一個JSON數據。其中$表示JSON數據的根節點。

-- 查詢JSON數據

JSON.GET user

-- 查詢JSON對象的name屬性

JSON.GET user $.name

-- 查看數據類型

JSON.TYPE user -- object

JSON.TYPE user $.name --- string

JSON.TYPE user $.age --- integer

--修改JSON數據 年齡加2

JSON.NUMINCRBY user $.age 2

-- 添加新的字段

JSON.SET user $.address '{"city": "Changsha","country": "China"}' NX

## NX 表示只有當address字段不存在的時候才進行設置。

-- 在JSON數組中添加元素

JSON.SET user $.hobbies '["reading"]'

JSON.ARRAPPEND user $.hobbies '"swimming"'

-- 查看JSON對象中key的個數

JSON.OBJLEN user $.address

-- 查看user對象的所有key

JSON.OBJKEYS user

-- 刪除JSON中的key

JSON.DEL user $.address

Redis JSON優勢:

  1. 更高的存儲性能。?Redis JSON底層是一種更高效的二進制存儲格式,相比簡單的文本格式,二進制進行JSON格式讀寫性能更好, 也更節省內存
  2. Redis JSON使用樹狀結構存儲JSON, 這種存儲方式可以更快速的訪問元素,也可以更高效的進行條件查詢
  3. 與Redis生態集成度高,作為Redis的擴展模塊,Redis JSON和Redis的其他功能和工具無縫集成。這意味著開發者可以繼續使用TTL、Redis事務、發布/訂閱、Lua腳本等功能。

Search And Query

????????當Redis中存儲的數據比較多時,搜索Redis中的數據是一件比較麻煩的事情。通常使用的 keys * 這樣令,在生產環境一般都是直接禁用的,因為這樣會產生嚴重的線程阻塞,影響其他的讀寫操作。

????????如何快速搜索Redis中的數據(主要是key)呢? Redis中Search And Query模塊。

1. 傳統Scan搜索

Scan指令的官方介紹:https://redis.io/docs/latest/commands/scan/

指令格式:

SCAN cursor? [MATCH pattern]? [COUNT count]? [TYPE type]

  • cursor: 游標。代表每次迭代返回的偏移量。通常一次查詢,cursor從0開始,然后scan指令會返回下一次迭代的起始偏移量。用戶可以用這個返回值作為cursor,繼續迭代下一批。直到cursor返回0,表示所有數據都過濾完成了。
  • pattern:匹配字符串。用來匹配要查詢的key。 例如 user* 表示以user開頭的字符串。
  • count:數字,表示每次迭代多少條數據。
  • type是key的類型,比如可以指定string ,set,zset等。

針對不同類型的key, 對應不同的SCAN指令,比如SSCAN對應Set類型, HSCAN對應Hash類型, ZSCAN對應ZSet類型。

缺點:SCAN只能對key進行簡單的過濾

2. Search And Query

查詢條件構建,參見官網 https://redis.io/docs/latest/develop/interact/search-and-query/query/

Redis提供了RedisSearch插件,基本就可以認為是ElasticSearch這類搜索引擎的平替。大部分ES能夠實現的搜索功能,在Redis里就能直接進行。

Redis能夠支持搜索的數據結構包括:HASH 、JSON

--清空數據

flushall

-- 創建一個產品的索引

FT.CREATE productIndex ON JSON SCHEMA $.name AS name TEXT $.price AS price NUMERIC

## 索引為productIndex.

## ON JSON 表示 這個索引會基于JSON數據構建,需要RedisJSON模塊的支持。默認是ON HASH 表示檢索所有HASH格式的數據

## SCHEMA表示根據哪些字段建立索引。 字段名 AS 索引字段名 數據類型 這樣的組合。如果是JSON格式,字段名用$.路徑表示

-- 模擬一批產品信息

JSON.SET phone:1 $'{"id":1, "name":"HUAWEI 1", "desc":"HUAWEI PHONE1", "price":1999}'

......

## 如果是ON HASH ,可以直接通過索引添加數據

## FT.ADD productIndex 'product:1' 1.0 FIELDS "id" 1 "name" "HUAWEI1" "desc" "HUAWEI PHONE 1" "PRICE" 3999

## 數據的key 是producr:1

## FIELDS 數據。 按照 key value 的格式組織

-- 查看索引狀態

FT.INFO?productIndex

--搜索產品

## 搜索條件: name包含 HUAWEI, price在1000到5000之間。返回id和name

FT.SEARCH productIndex "@name:HUAWEI @price:[1000 5000]" RETURN 2 id name

使用說明:

  1. ?確定數據結構
  2. ?使用對應數據結構添加數據
  3. ?FT.CREATE命令創建索引
  4. ?FT.SEARCH命令查詢

Bloom Filter

應用場景:前端過濾緩存

Guava實現

<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>33.1.0-jre</version>
</dependency>
 public static void main (String[]args){// 10000是期望放進去的元素數量BloomFilter<String> bloomFilter =BloomFilter.create(Funnels.stringFunnel(StandardCharsets.UTF_8), 10000, 0.01);//把 A~Z 放入布隆過濾器for (int i = 64; i <= 90; i++) {bloomFilter.put(String.valueOf((char) i));}System.out.println(bloomFilter.mightContain("A")); //trueSystem.out.println(bloomFilter.mightContain("a")); //false
}

Redis實現

Redis的BitMap數據結構天生就非常適合做一個分布式的布隆過濾器底層存儲。

現在Redis提供的BloomFilter模塊, 可以方便的實現布隆過濾器。

-- 創建一個key為bf的布隆過濾器,容錯率0.01,容量1000。NONSCALING 表示不擴容。如果這個過濾器里的數據滿了,就直接報錯

BF.RESERVE bf 0.01 1000 NONSCALING

-- 添加元素

BF.ADD bf A

.....

-- 批量添加元素

BF.MADD bf B C D E F G H I

-- 如果bf不存在,就創建一個key為bf的過濾器。

BF.INSERT bf CAPACITY 1000 ERROR 0.01 ITEMS hello

-- 查看容量

BF.CARD bf

-- 判斷元素是否在過濾器中

## 返回值0表示不在,1表示在

BF.EXISTS bf a

-- 批量判斷

BF.MEXISTS bf A a B b

-- 查看布隆過濾器狀態

BF.INFO bf

# 依次迭代布隆過濾器中的位數組

BF.SCANDUMP bf 0

## 和SCAN指令使用很像,返回當前訪問到的數據和下一次迭代的起點。 當下次迭代起點為0表示數據已經全部迭代完成。

## 主要是可以配合BF.LOADCHUNK 進行備份。

Cuckoo Filter

????????布隆過濾器最大的問題是無法刪除數據。因此,后續誕生了很多布隆過濾器的改進版本。Cuckoo Filter 布谷鳥過濾器就是其中一種,支持刪除數據(CF.DEL)。

-- 創建默認值

## 容量1000,這個是必填參數。后面幾個都是可選參數。這里填的幾個就是Redis中的CuckooFilter的默認值

## BUSKETSIZE越大,空間利用率更高,但是誤判率也更高,性能更差

## MAXITARATIONS越小,性能越好。如果設置越大,空間利用率就越好。

## EXPANSION 是指空間擴容的比例。

CF.RESERVE cf 1000 BUSKETSIZE 2 MAXITERATIONS 20 EXPANSION 1

BUSKETSIZE:每個桶中存放的元素的個數。 Cuckoo Filter的數組中存放的不是位,而是桶bucket, 每個bucket可以存放多個數據。 Redis中Cuckoo Filter實現中,BUSKETSIZE取值1~255, 默認2。?bucket中存放的不是實際數據,而是數據指紋(可以理解成某種算法后的數據)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/88675.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/88675.shtml
英文地址,請注明出處:http://en.pswp.cn/web/88675.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Takebishi旗下智能硬件網關產品devicegateway詳細介紹

一、產品概述 DeviceGateway是由日本Takebishi公司研發的一款專業工業物聯網&#xff08;IIoT&#xff09;硬件網關產品&#xff0c;專為實現現場工業設備與云端平臺、IT系統之間的高效、安全數據傳輸而設計。作為一款可靠的硬件網關&#xff0c;DeviceGateway具有即插即用、穩…

單向鏈表反轉 如何實現

單向鏈表反轉的實現方法 ? https://www.zhihu.com/question/441865393/answer/3208578798 ? 單向鏈表反轉是數據結構中的經典問題&#xff0c;在面試和實際開發中經常遇到。以下是 多種實現方式&#xff08;包括遞歸和迭代&#xff09;&#xff0c;以 Go 語言為例。1. 單向鏈…

php+vue+Laravel音樂媒體播放及周邊產品運營平臺-nodejs-計算機畢業設計

目錄具體實現截圖課程項目技術路線開發技術介紹設計思路流程PHP核心代碼部分展示詳細視頻演示/源碼獲取##項目介紹網絡技術的廣泛應用顯著地推動了生活服務的信息化進程。結合音樂流媒體與周邊產品的運營需求&#xff0c;構建一套音樂媒體播放及周邊產品運營平臺&#xff0c;成…

Python爬蟲實戰:研究xlwt 和 xlrd 庫相關技術

1. 引言 1.1 研究背景與意義 隨著電子商務的快速發展,電商平臺積累了海量的商品數據。如何從這些數據中提取有價值的信息,為商家提供決策支持,成為電商領域的重要研究方向。傳統人工采集和分析數據的方式效率低下,且容易出現錯誤。自動化數據采集與分析系統能夠通過爬蟲技…

【QGC】深入解析 QGC 配置管理

引言 在軟件開發中&#xff0c;配置管理是一項至關重要的任務&#xff0c;它能幫助我們靈活地管理應用程序的各種參數和設置。QGroundControl&#xff08;QGC&#xff09;作為一款強大的開源無人機地面站軟件&#xff0c;其配置管理系統設計精巧&#xff0c;值得我們深入學習。…

ChatGPT,從規則到強化學習

要了解 ChatGPT&#xff08;Chat Generative Pre-training Transformer&#xff09;&#xff0c;我們不得不先看看 NLP 自然語言處理&#xff08;Natural Language Processing&#xff09;。因為 ChatGPT 屬于 NLP 領域&#xff0c;而 NLP 則又是人工智能的一個分支。 那么什么…

【目標檢測之Ultralytics預測框顏色修改】

在 Ultralytics YOLOv8 中修改預測框顏色為紅色&#xff0c;以下是三種實用方案&#xff1a;方案 1&#xff1a;直接修改 plot() 方法的 colors 參數 在調用 results.plot() 時直接指定顏色參數&#xff1a; from ultralytics import YOLO# 加載模型 model YOLO("yolov8n…

讓 VSCode 調試器像 PyCharm 一樣顯示 Tensor Shape、變量形狀、變量長度、維度信息

文章目錄&#x1f3af; 目標&#xff1a;在 VS Code 調試器中自動顯示這些變量信息&#x1f50d; 原理簡介?? 其他方案的局限性? 方案一&#xff1a;重寫 __repr__? 方案二&#xff1a;向 debugpy 注冊自定義變量顯示器&#xff08;StrPresentationProvider&#xff09;? …

pip國內鏡像源一覽

以下是2025年主流pip國內鏡像源完整清單及配置指南&#xff0c;綜合多個權威來源整理的最新數據&#xff1a;一、核心鏡像源推薦&#xff08;2025年穩定可用&#xff09;?阿里云鏡像?https://mirrors.aliyun.com/pypi/simple/優勢&#xff1a;依托阿里云CDN&#xff0c;全國平…

當大模型遇見毫米波:用Wi-Fi信號做“透視”的室內語義SLAM實踐——從CSI到神經輻射場的端到端開源方案

作者 | Blossom.118 2025-07-12 關鍵詞&#xff1a;CSI-SLAM、神經輻射場、毫米波、Transformer、數字孿生、開源 ---- 1. 為什么要“無攝像頭”語義SLAM&#xff1f; ? 隱私紅線&#xff1a;歐盟GDPR 2024修訂版把“攝像頭點云”列入高風險生物特征&#xff0c;落地成本高。…

脈沖神經網絡膜電位泄漏系數學習:開啟時空動態特征提取的新篇章

脈沖神經網絡膜電位泄漏系數學習&#xff1a;開啟時空動態特征提取的新篇章 摘要 脈沖神經網絡&#xff08;Spiking Neural Networks, SNNs&#xff09;作為第三代神經網絡模型&#xff0c;憑借其事件驅動、高生物逼真度和潛在的超低功耗特性&#xff0c;已成為類腦計算與高效人…

SSRF(ctfshow)

web351-358這部分的題目都是明文的&#xff0c;按照題目要求繞過就行了<?php error_reporting(0); highlight_file(__FILE__); $url$_POST[url]; $xparse_url($url); if($x[scheme]http||$x[scheme]https){ if(!preg_match(/localhost|127\.0\.|\。/i, $url)){ $chcurl_ini…

亞矩陣云手機:重構物流供應鏈,讓跨境包裹“飛”得更快更準

在跨境電商“時效即生命”的競爭中&#xff0c;物流信息滯后、清關效率低下、成本居高不下已成為商家最頭疼的“三座大山”。傳統模式下&#xff0c;人工更新物流狀態耗時易錯&#xff0c;跨境包裹常因清關延誤遭客戶投訴&#xff0c;而高昂的物流成本更直接吞噬利潤。亞矩陣云…

HTML(5) 代碼規范

HTML(5) 代碼規范 引言 HTML(HyperText Markup Language)是一種用于創建網頁的標準標記語言。HTML5 作為最新的 HTML 標準,自 2014 年正式發布以來,已經成為了構建現代網頁應用的基礎。本文將詳細介紹 HTML5 代碼規范,包括結構、語法、屬性以及最佳實踐等內容,旨在幫助…

【PTA數據結構 | C語言版】順序棧的3個操作

本專欄持續輸出數據結構題目集&#xff0c;歡迎訂閱。 文章目錄題目代碼題目 請編寫程序&#xff0c;將 n1 個整數順序壓入容量為 n 的棧&#xff0c;隨后執行 n1 次取頂并出棧的操作。 輸入格式&#xff1a; 輸入首先在第一行給出正整數 n&#xff08;≤10^4 &#xff09;&a…

使用Pycharm集成開發工具遠程調試部署在虛擬機上的flask項目:超級詳細的完整指南

本文將詳細介紹如何通過PyCharm Professional版遠程調試部署在虛擬機(這里以Ubuntu為例)中的Flask項目。這種開發方式特別適合需要在接近生產環境調試的場景。 虛擬機網絡配置 這里用到的是VMware的NAT&#xff0c;即網絡地址轉換模式&#xff0c;要保證你Linux虛擬機的IP&…

UE制作的 AI 交互數字人嵌入到 Vue 開發的信息系統中的方法和步驟

要將 UE(Unreal Engine,虛幻引擎)制作的 AI 交互數字人嵌入到 Vue 開發的信息系統首頁中運行,可以參考以下方法步驟以及涉及的軟件工具: 準備工作 軟件工具 Unreal Engine:用于創建和編輯 AI 交互數字人,需要在 UE 中完成數字人的建模、綁定骨骼、添加 AI 交互邏輯等工…

基于elementUI的el-autocomplete組件的自動補全下拉框實踐

<template><div :class"$options.name"><el-autocompletestyle"width: 100%"ref"autocomplete":popper-class"${$options.name}-el-autocomplete"v-model"inputSearchValue":placeholder"輸入關鍵詞...…

Gameplay - 獨立游戲Celeste的Player源碼

TGA2018最佳獨立游戲《蔚藍》的一些公開代碼&#xff1b;主要是Player部分的代碼&#xff1a;using System; using System.Collections; using System.Collections.Generic; using Monocle; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input;namespace Cel…

基于大模型的鼻咽癌全周期預測及診療優化研究報告

目錄 一、引言 1.1 研究背景與意義 1.2 國內外研究現狀 1.3 研究目標與創新點 二、大模型技術與鼻咽癌相關理論基礎 2.1 大模型技術概述 2.2 鼻咽癌疾病知識 2.3 大模型在醫學領域的應用 三、數據收集與預處理 3.1 數據來源 3.2 數據清洗 3.3 數據標注 3.4 數據標…