Java 在Redis中,如何根据值查询哈希数据
我正在使用SpringDataRedis(SDR)开发Redis。我想根据值(而不是字段名)查询哈希数据 这是我的散列数据-Java 在Redis中,如何根据值查询哈希数据,java,redis,jedis,spring-data-redis,key-value-store,Java,Redis,Jedis,Spring Data Redis,Key Value Store,我正在使用SpringDataRedis(SDR)开发Redis。我想根据值(而不是字段名)查询哈希数据 这是我的散列数据- Address address1 = Address.builder() .city("New York") .country("USA") .build(); Address address2 = Address.builder()
Address address1 = Address.builder()
.city("New York")
.country("USA")
.build();
Address address2 = Address.builder()
.city("New Jersy")
.country("USA")
.build();
Address address3 = Address.builder()
.city("Ohio")
.country("USA")
.build();
Set<Address> addresses = Sets.newHashSet(address1, address2, address3);
Person person = Person.builder()
.firstname("John")
.lastname("Leo")
.address(addresses)
.build();
redisTemplate.opsForHash().putAll("employee", jacksonMapper.toHash(person));
Address address1=Address.builder()
.纽约市(“纽约”)
.国家(“美国”)
.build();
address2=地址.builder()
.城市(“新杰西”)
.国家(“美国”)
.build();
地址3=地址.builder()
.城市(“俄亥俄州”)
.国家(“美国”)
.build();
Set addresses=Set.newHashSet(地址1、地址2、地址3);
Person=Person.builder()
.名字(“约翰”)
.lastname(“Leo”)
.地址
.build();
redisTemplate.opsForHash().putAll(“雇员”,jacksonapper.toHash(person));
现在我们有了通过映射键查询的API,字段名如下
Map<String, Object> entries = redisTemplate.opsForHash().entries("employee"); //query by map key
Object object = redisTemplate.opsForHash().get("employee", "address[0].city"); //query by field name
Map entries=redisTemplate.opsForHash().entries(“员工”)//按映射键查询
Object Object=redisTemplate.opsForHash().get(“员工”,“地址[0].city”)//按字段名查询
但我想按字段值进行查询,如-
查找所有以“N”开头的城市
查找与模式“U*”匹配的所有国家/地区
非常感谢您在这方面提供的帮助。没有Redis命令可以按散列上的值进行扫描
HSCAN
扫描字段名,而不是值
HSCAN
确实返回字段和值,因此您可以使用它返回所有城市或国家,使用类似于的模式“address[*].city”
,然后在本地执行筛选
是opsForHash().scan(H键,扫描选项)
如果不接受本地筛选,您可以:
- 使用Lua脚本过滤Redis服务器端的值
- 创建一个二级结构,一个Redis集合(集合存储唯一值),比如
,在这里您可以使用employee:cities
存储这些可查询的值SSCAN
- 在您的Redis上安装RedSearch模块,并将数据作为文档移动以使用它
- 创建自己的Redis模块
你是否考虑重新使用?