当前位置: 首页 > 后端技术 > Java

Spring认证中国教育管理中心-SpringDataRedis框架教程六

时间:2023-04-01 22:00:14 Java

原标题:Spring认证中国教育管理中心-SpringDataRedis框架教程六13.10.1。排序查询方法结果Redis存储库允许定义各种方法排序顺序。Redis本身在检索哈希或集合时不支持动态排序。因此,Redis存储库查询方法Comparator在将结果作为.让我们看下面的示例:示例36.对查询结果进行排序ListfindByFirstname(Stringfirstname,Sort排序);}从方法名称派生的静态顺序。使用方法参数进行动态排序。13.11.在集群上运行的Redis存储库您可以在集群Redis环境中使用Redis存储库支持。有关配置详细信息,请参阅Redis集群部分中的ConnectionFactory。尽管如此,还需要进行一些额外的配置,因为默认的键分布将实体和二级索引分布在集群及其槽中。下表显示了集群上的数据详情(基于前面的例子):keytypecoinslotnodeperson:e2c7dcee-b8cd-4424-883e-736ce564363ehashid15171127.0.0.1:7381person:a9d4b3a0-50d3-4538-a2fc-f7fc2581ee56hashofid7373127.0.0.1:7380person:name:randindex1700127.0.0.1:7379一些命令(如SINTER和SUNION)只能在服务器端处理。否则,必须在客户端进行计算。因此,将键空间固定到单个插槽非常有用,这使我们能够开箱即用地使用Redis服务器端计算。下表显示了执行此操作时会发生什么(注意插槽列中的更改和节点列中的端口值):keytypecoinslotnode{person}:e2c7dcee-b8cd-4424-883e-736ce564363ehaHash'sid2399127。0.0.1:7379{person}:a9d4b3a0-50d3-4538-a2fc-f7fc2581ee56Hash的id2399127.0.0.1:7379{person}:name:randindex2399127.0.0.1:7379@RedisHash("{yourkeyspace}")当你使用RedisCluster,您可以通过使用特定的插槽来定义和修复键空间。13.12。CDI集成存储库接口的实例通常由容器创建,因此在使用SpringData时,Spring是最自然的选择。Spring提供了用于创建bean实例的复杂方法。SpringDataRedis附带一个自定义CDI扩展,允许您在CDI环境中使用存储库抽象。该扩展是JAR的一部分,因此要激活它,请将SpringDataRedisJAR放入您的类路径中。然后,您可以通过为RedisConnectionFactory和RedisOperations实施CDI生产者来设置基础设施,如以下示例所示:returnjedisConnectionFactory;}voiddisposeRedisConnectionFactory(@DisposesRedisConnectionFactoryredisConnectionFactory)抛出异常],byte[]>template=newRedisTemplate();template.setConnectionFactory(redisConnectionFactory);template.afterPropertiesSet();returntemplate;}}Spring认证中国教育管理中心-SpringDataRedis框架教程六个必要的设置可能会有所不同不同,取决于您的JavaEE环境SpringDataRedisCDI扩展选择所有可用的存储库作为CDIbean,并在容器请求存储库类型的bean时为SpringData存储库创建代理。因此,获取SpringData存储库的实例就是声明@Injected属性,如下例所示:publicvoidbusinessMethod(){Listpeople=repository.findAll();}}Redis存储库需要RedisKeyValueAdapter和RedisKeyValueTemplate实例。如果找不到提供的beans,这些beans将由SpringDataCDI扩展创建和管理。但是,您可以为RedisKeyValueAdapter和RedisKeyValueTemplate提供自己的bean配置特定属性。13.13。RedisRepository剖析Redis作为存储本身提供了非常狭窄的低级API,将高级功能(例如二级索引和查询操作)留给了用户。本节提供了存储库抽象发出的命令的更详细视图,以更好地理解潜在的性能影响。将以下实体类视为所有操作的起点:示例37.示例实体@RedisHash("people")publicclassPerson{@IdStringid;@Indexed字符串名字;字符串姓氏;地址家乡;}公共类地址{@GeoIndexed点位置;}13.13.1。Insertnewrepository.save(newPerson("rand","al'thor"));HMSET"people:19315449-cda2-4f5c-b696-9cb8018fa1f9""_class""Person""id""19315449-cda2-4f5c-b696-9cb8018fa1f9""firstname""rand""lastname""al'thor"SADD"人”“19315449-cda2-4f5c-b696-9cb8018fa1f9”SADD“人:名字:兰德”“19315449-cda2-4f5c-b696-9cb8018fa1f9”SADD“人:19315449-cda2-4f5c-b696-9cb8018fa”1f9:人:firstname:rand"将扁平条目保存为散列。将<1>中写入的hashkey添加到同一keyspace的entity二级索引中。将<2>中写入的hashkey添加到具有属性值的名称的二级索引中。将<3>的索引添加到条目的帮助器结构集中,以跟踪删除/更新时要清理的索引。13.13.2。替换现有的repository.save(newPerson("e82908cf-e7d3-47c2-9eec-b4e0967ad0c9","DragonReborn","al'thor"));DEL"people:e82908cf-e7d3-47c2-9eec-b4e0967ad0c9"HMSET"people:e82908cf-e7d3-47c2-9eec-b4e0967ad0c9""_class""Person""id""e82908cf-e7d3-47c2-9eec-b4e09"67ad0c9""重生之龙""姓氏""al'thor"SADD"people""e82908cf-e7d3-47c2-9eec-b4e0967ad0c9"SMEMBERS"people:e82908cf-e7d3-47c2-9eec-b4e0967ad0c9:idx"TYPE"people:firstname:rand"SREM"people:firstname:rand"e82908cf-e7d3-47c2-9eec-b4e0967ad0c9"DEL"people:e82908cf-e7d3-47c2-9eec-b4e0967ad0c9:idx"SADD"people:firstname:DragonReborn""e82908cf-e7d3-47c2-9eec-bad4e"e82908cf-e7d3-47c2-9eec-b4e0967ad0c9:idx""people:firstname:DragonReborn"删除现有散列以避免散列键的剩余部分将扁平条目保存为散列可能不再存在。将<1>中写入的hashkey添加到同一keyspace的entity二级索引中。获取可能需要更新的现有索引结构。检查索引是否存在以及它是什么类型(文本、地理等)。从索引中删除可能的键。删除保存索引信息的助手。将<2>中添加的哈希键添加到具有属性值的名称的二级索引中。将<6>的索引添加到条目的帮助器结构集中,以跟踪删除/更新时要清理的索引。13.13.3。存储地理数据地理索引遵循与基于纯文本的索引相同的规则,但使用地理结构来存储值。保存使用地理索引属性的实体会产生以下命令:GEOADD"people:hometown:location""13.361389""38.115556""76900e94-b057-44bc-abcf-8126d51a621b"SADD"people:76900e94-b057-44bc-abcf-8126b1:idx""people:hometown:location"将保存条目的键添加到地理索引中。跟踪索引结构。13.13.4。使用简单索引查找repository.findByFirstname("egwene");SINTER"people:firstname:egwene"HGETALL"people:d70091b5-0b9a-4c0a-9551-519e61bc9ef3"HGETALL...包含在二级索引键中。分别获取<1>返回的每个键。13.13.5。使用地理索引查找repository.findByHometownLocationNear(newPoint(15,37),newDistance(200,KILOMETERS));GEORADIUS"people:hometown:location""15.0""37.0""200.0""km"HGETALL"people:76900e94-b057-44bc-abcf-8126d51a621b"HGETALL...获取二级索引中包含的键。分别获取<1>返回的每个键。