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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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 数据标…