Spring Data Redis(Repositories-Secondary Indexes)

【Spring Boot集成Redis】基础配置 使用Redis Repository简化RedisTemplate操作 spring boot 集成redis 使用Redis Repositories简化RedisTemplate简化操作 Redis Repositories 可以让我们在Redis哈希类型中转换和存储Java实体,支持自定义映射策略和二级索引。 阅读详情

Secondary Indexes
二级索引

二级索引用来使得查询操作可以基于原生的Redis 结构。保存数据时值依据对应的索引被写入,当删除或过期时则被移除。

1. Simple Property Index

对于简单的Person 实体来说,我们可以通过添加@Indexed 注解来对firstname 创建一个索引。

Example 13. Annotation driven indexing

@RedisHash("persons")
public class Person {

  @Id String id;
  @Indexed String firstname;
  String lastname;
  Address address;
}

索引针对真实的属性值建立。保存两个Person 如”rand” 和”aviendha” ,会建立如下索引:

SADD persons:firstname:rand e2c7dcee-b8cd-4424-883e-736ce564363e
SADD persons:firstname:aviendha a9d4b3a0-50d3-4538-a2fc-f7fc2581ee56

给嵌套元素创建索引也是可能的。假如Address 有一个添加了@Indexed 注解的属性city 。这种情况下,一旦person.address.city 不为空,则每个city 都会有一个索引。

SADD persons:address.city:tear e2c7dcee-b8cd-4424-883e-736ce564363e

通过编程还可以为map 的键和list 的属性创建索引。

@RedisHash("persons")
public class Person {

  // ... other properties omitted

  Map<String,String> attributes;      
  Map<String, Person> relatives;       
  List<Address> addresses;            
}
SADD persons:attributes.map-key:map-value e2c7dcee-b8cd-4424-883e-736ce564363e
SADD persons:relatives.map-key.firstname:tam e2c7dcee-b8cd-4424-883e-736ce564363e
SADD persons:addresses.city:tear e2c7dcee-b8cd-4424-883e-736ce564363e
Indexes will not be resolved on References. 索引不能应用在引用上。

和keyspaces 一样,也可以配置索引,而不使用注解。

Example 14. Index Setup via @EnableRedisRepositories

@Configuration
@EnableRedisRepositories(indexConfiguration = MyIndexConfiguration.class)
public class ApplicationConfig {

  //... RedisConnectionFactory and RedisTemplate Bean definitions omitted

  public static class MyIndexConfiguration extends IndexConfiguration {

    @Override
    protected Iterable<IndexDefinition> initialConfiguration() {
      return Collections.singleton(new SimpleIndexDefinition("persons", "firstname"));
    }
  }
}

Example 15. Programmatic Index setup

@Configuration
@EnableRedisRepositories
public class ApplicationConfig {

  //... RedisConnectionFactory and RedisTemplate Bean definitions omitted

  @Bean
  public RedisMappingContext keyValueMappingContext() {
    return new RedisMappingContext(
      new MappingConfiguration(
        new KeyspaceConfiguration(), new MyIndexConfiguration()));
  }

  public static class MyIndexConfiguration extends IndexConfiguration {

    @Override
    protected Iterable<IndexDefinition> initialConfiguration() {
      return Collections.singleton(new SimpleIndexDefinition("persons", "firstname"));
    }
  }
}

2. Geospatial Index

假如Address 拥有一个Point 类型的location 属性,该属性标识了特定地址的位置坐标。当属性拥有@GeoIndexed 注解时,其值将会使用Redis GEO 命令来添加。

@RedisHash("persons")
public class Person {

  Address address;

  // ... other properties omitted
}

public class Address {

  @GeoIndexed Point location;

  // ... other properties omitted
}

public interface PersonRepository extends CrudRepository<Person, String> {

  List<Person> findByAddressLocationNear(Point point, Distance distance);     
  List<Person> findByAddressLocationWithin(Circle circle);                    
}

Person rand = new Person("rand", "al'thor");
rand.setAddress(new Address(new Point(13.361389D, 38.115556D)));

repository.save(rand);                                                        

repository.findByAddressLocationNear(new Point(15D, 37D), new Distance(200)); 
Query method declaration on nested property using Point and Distance.
Query method declaration on nested property using Circle to search within.
GEOADD persons:address:location 13.361389 38.115556 e2c7dcee-b8cd-4424-883e-736ce564363e
GEORADIUS persons:address:location 15.0 37.0 200.0 km

上面的示例中,lon/lat 的值被存储,使用的是GEOADD 命令,并使用对象的id 作为成员的name 。查询方法允许使用Circle 、Point和Distance 组合来查询值。

It is not possible to combine near/within with other criteria.
near/within 不能和其他条件进行组合式使用。
在Redis中,二级索引是一种通过额外的键值对来提高数据查询效率的技术 二级索引的基本原理是:除了主键之外,再为需要频繁查询的属性创建额外的键值对。RediSearch是一个为Redis设计的全文搜索引擎,它允许用户在Redis中存储和索引文本数据,并执行高效的全文搜索操作。这种方式可以有效地实现二级索引的功能,但是需要注意的是,由于Redis本身没有内置的二级索引功能,所以这种方式可能会影响性能。执行搜索查询:使用RediSearch提供的查询语言或API,你可以执行各种复杂的搜索查询,包括关键词搜索、短语搜索、前缀搜索等。:这是最简单的查询类型,通过关键词匹配文档内容。 阅读详情

相关推荐

Redis支持secondary indexing(二级索引),通过哈希映射实现对非主键字段的高效查询

当主键(通常是哈希表的 key)发生变化时,它会通过发布消息的方式通知订阅该 key 的客户端。这样,即使有大量二级索引关联到同一个主键,更新操作只需要对主键执行,而所有依赖于该主键的二级索引订阅者都能即时接收到并更新其缓存。请注意,虽然Redis的二级索引功能相对简单,但与专门设计用于复杂索引的数据库相比,可能在性能和扩展性上有所限制。Redis支持secondary indexing(二级索引),通过哈希映射实现对非主键字段的高效查询。这允许你在不改变原有数据结构的情况下,为数据添加额外的索引。

[Blog][Domain] programb.blog.youkuaiyun.com 604

springboot 整合 Mybatis、JPA、Redis

引言 在springboot 项目中,我们是用ORM 框架来操作数据库变的非常方便。下面我们分别整合mysql ,spring data jpa 以及redis 。让我们感受下快车道。 我们首先创建一个springboot 项目,创建好之后,我们来一步步的实践。 使用mybatis 引入依赖: <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis

程序员爱酸奶 1万+

Redis的查询和索引引擎,提供二级索引、全文搜索和聚合_C语言

Redis 的查询、二级索引和全文搜索 RediSearch 是一个Redis 模块,为 Redis 提供查询、二级索引和全文搜索。要使用 RediSearch,首先要在 Redis 数据上声明索引。然后,您可以使用 RediSearch 查询语言来查询该数据。 RediSearch 使用压缩的倒排索引以低内存占用进行快速索引。 RediSearch 索引通过提供精确短语匹配、模糊搜索和数字过滤以及许多其他功能来增强 Redis。

spring-data-redis Repositories

SDR中通过支持Repository,操作对于model在缓存中的增删改查,非常方便。 1.Repository spring-data中对于数据库的增删改查的中央存储库。通过它可以对数据库(redis)进行操作。基本的实现为CrudRepository。 2.EnableRedisRepositories 要通过CrudRepository必须先开启支持Repository。

永不止步 1万+

LVGL按键触发回调函数的完整流程

如果是我的话我会怎么写:例如按键,我先定义一个结构体里面包含ID,事件名等和回调函数的链表节点结构体里面有具体函数的指针,也有指向下一个回调函数的链表节点的指针,初始化一个结构体变量的,通过BSP层来驱动触摸屏幕,再通过中间层与被按下时就会判断是长按还是短按还是其他,改变变量的事件例如:改成长按,生成事件包后再注册你长按的回调函数链表节点,再根据变量的事件到链表中遍历最后实现功能.父容器监听所有子列表项的点击事件,无需为每个列表项单独注册回调。的回调,打印所有事件日志,观察事件触发顺序。

solomonzw的博客 3239

【HCIA学习记录】WLAN配置实验

HCIA-WLAN

寸先生的AI道路 3872

SpringBoot整合Junit、Redis与Mybatis

介绍了SpringBoot整合Junit、Redis与Mybatis的方法

凉茶铺的博客 493

【Settings随记:二】一级菜单,二级菜单的添加与隐藏,添加辅助功能

首先会去调用父类的onCreatePreferences(Bundle savedInstanceState, String rootKey)方法,然后调用addPreferencesFromResource(R.xml.assistant_function)方法(这个方法是父类的)加载二级菜单的xml配置文件,实现创建二级菜单,这个配置文件路径在res/xml/assistant_function.xml。controller:该item的控制器,控制它的内容展示,是否可用,也可以控制它的点击事件等。

镇元子的博客 1594

缓存的应用 : 缓存——工程思想的产物

缓存一词最初主要指 CPU 与内存之间的高速静态随机存取存储器(SRAM)。 一 web中的缓存 在做项目的过程中,不知道你们有没有感叹过,一个平平无奇的应用,涉及的点实在是太多了。各个点之间需要衔接,要衔接就会有两个层次的不均衡: 一是性能的不均衡,包括速率、吞吐量等,造成这种不均衡的原因包括软件、硬件、网络、协议、策略等、位置多个维度。 二是数据本身活跃性的不均衡,有些数据会被频繁传递,有些很久才被访问一次。 基于这两个不平衡,诞生了各种缓存方案。比较常见的有以下几种: ...

weixin_52263247的博客 1866

MyBatis-Plus 实战:敏感字段自动加解密支持模糊查询

本文基于MyBatis-Plus框架提出了一种全链路敏感字段加密方案。通过自定义TypeHandler实现数据入库自动加密和查询自动解密,结合重写LambdaQueryWrapper处理查询条件加密,并适配多种查询方式。方案核心包括:1)AESUtil工具类提供加解密基础能力;2)EncryptTypeHandler实现字段类型转换;3)实体类通过注解配置加密字段。该方案在保证数据安全的同时,对业务代码侵入性小,支持姓名、手机号等敏感信息的全流程加密处理,满足系统开发的安全需求。

蔡定努 595

使用RV1126实现人脸识别——将Facenet模型转换为RKNN模型

在本文中,我们将探讨如何在RV1126芯片上实现人脸识别,并将Facenet模型转换为RKNN(Rockchip Neural Network)模型,以在RV1126上进行高效的人脸识别。Fine-tuning是指在预训练模型的基础上,使用自己的数据集进行进一步训练,以适应特定的任务。同时,我们需要下载Facenet模型的预训练权重,这些权重将作为我们的基础模型。综上所述,我们详细介绍了如何在RV1126上实现人脸识别,并将Facenet模型转换为RKNN模型。方法将模型导出为RKNN格式的文件。

code_program481的博客 1522

Spring整合Redis(十四)----Redis Repositories

见定义Repository接口如果你希望避免将整个Java类名作为类型信息写入,并且希望使用键,则可以在要持久化的实体类上使用@TypeAlias注释。如果你需要更多地自定义映射,请查看接口。该接口的实例可以在DefaultRedisTypeMapper上配置,该映射器可以在MappingRedisConverter上配置。以下示例展示如何为实体定义类型别名:例3:为实体定义 @TypeAlias生成的document包含pers作为_class字段中的值。

爱看技术博客 842

被Cloudflare 5秒盾虐了半个月,终用Python破局:UA+TLS指纹伪装实战,拦截率从42%干到3%

其实5秒盾不难破,难的是摸透它的检测逻辑——它不是“一刀切”地拦截爬虫,而是通过“多维度指纹校验”,判断你是不是“真实用户”。表层:UA和HTTP头要完整、匹配;中层:TLS指纹要和真实浏览器一致(核心);深层:行为要符合人类习惯(请求间隔、JS执行)。这套方案不仅适用于Cloudflare 5秒盾,很多基于指纹检测的反爬系统(如Akamai、Imperva)也适用。2025年的爬虫,早已不是“能爬就行”,而是“爬得稳、不被封”——指纹伪装就是实现这一点的关键。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1849

RedisTemplate操作redis

RedisTemplate操作redis

magic_818的博客 1943

目标检测YOLO实战应用案例100讲-【目标检测】缺陷检测(二)

在工业生产中总是经常遇到裂痕、划痕等产品的表面缺陷问题,机器视觉行业对于表面检测相比前几年已经有很大的突破,对于产品表面的划伤、污迹等检测已经不再是难点。在金属、玻璃、手机屏幕、液晶板等行业表面检测上应用广泛。但由于该类缺陷形状不规则、深浅对比度低,而且往往会被产品表面的自然纹理或图案所干扰。因此,表面划痕缺陷检测对于正确打光、相机分辨率、被检测部件与工业相机的相对位置、复杂的机器视觉算法等要求非常高。

qq_36130719的博客 728

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Redis【有与无】【UR11】使用Redis进行二级索引

本文基于Redis 6.0.9版本,前提至少 Redis 3.0或更高版本。 https://redis.io/topics/indexes 目录 1.使用Redis进行二级索引 1.1.具有排序集的简单数字索引 1.2.使用对象ID作为关联值 1.3.更新简单的排序集索引 1.4.将多维数据转换为线性数据 1.5.分数极限 2.词典索引(Lexicographical indexes) 2.1.第一个例子:completion 2.2.在mix中增加频率 2.3.规范大小写和重音的

琴韵悠悠 2594

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Spring Data Redis(Redis Repositories)

Redis Repositories使用仓储可以实现Redis Hashs与领域对象无缝的转换和存储,应用自定义的映射策略和使用二级索引。Redis的仓储需要至少Redis 2.8.0版本。 1. Usage利用仓储的支持可以很轻松的访问存储在Redis 里的领域实体。Example 5. Sample Person Entity@RedisHash("persons") public class

秀才的专栏 4813

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Spring Boot:(十三)redis缓存

开发前准备:Spring Boot 项目;redis 环境。自定义redis配置--------------------------------------------------------------------------------1、pom.xml配置启动:&lt;profiles&gt; &lt;profile&gt; &lt;!-- 本地开发环境 --&gt; &lt;id...

一切皆有可能 1860

redis的二级索引

如何实现Redis的二级索引 1. 流程图 #render_6_3720316748-svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#render_6_3720316748-svg .error-icon{...

weixin_41502643的博客 254

【redis】二级索引

redis二级索引 复合索引 hexastore

alwayszmj 986

SpringBoot集成Redis—使用RedisRepositories

SpringBoot集成Redis 1.添加redis依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency&g...

Sky丶Jarvan的博客 5479

spring-data-redis中RedisRepository仓储

Id@RedisHash注解的value属性和@Id注解指定键值的命名空间,组合成user:id;@RedisHash的属性timeToLive属性指定键值的超时时间。CrudRepository接口中默认定义实现了save、saveAll、findById、existsById、findAll、findAllById、count、deleteById、delete、deleteAllById、deleteAll等方法,基本满足了对redis操作的需求;如果有特殊需求可以自定义实现。

OceanSky的专栏 1510

Spring 操作 Redis Repositoy

Spring 操作 Redis Repositoy 操作方式 spring 操作 redis 有好几种方式,以下是最常用的两种,并且都是同步的方式 RedisTemplate Redis Repository 以上是 spring 对 redis 客户端的封装的结果,redis 客户端按照不同的 spring 版本分为不同的依赖,常用的有jedis, lettuce spring 从 5.0 ...

suveng's blog 672

Spring Data Redis ----Redis仓库----笔记6

继续。。。。。 7.Redis Repositories(Redis 仓库) Redis 仓库允许你无缝转换和存储域对象到Redis Hashes,应用自定义mapping策略和使用二级索引。 警告:Redis Repositories 要求Redis 服务器版本为2.8.0+ 7.1.使用 为了获取存储在Redis的域对象,你可以利用库存支持很容易实现。 例子 Person实体类

往前的娘娘 3903

springboot 动态切换 redis dbIndex

说明 参考 https://www.cnblogs.com/wiliamzhao/p/13298948.html springboot版本:2.0.3.RELEASE 这里我们使用 LettuceConnectionFactory.setDatabase(dbIndex) 方法来切换redis db pom配置 <dependency> <groupId>org.springframework.boot</groupId> <artifactId&gt

qq_26609087的博客 1011
上一篇: Spring Data Redis(Repositories-Keyspaces)
下一篇: Jedis和ShardedJedis设计分析
架构师的清醒
博客等级 码龄14年 291粉丝 397原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值