Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Redis中,如何根据值查询哈希数据_Java_Redis_Jedis_Spring Data Redis_Key Value Store - Fatal编程技术网

Java 在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()

我正在使用SpringDataRedis(SDR)开发Redis。我想根据值(而不是字段名)查询哈希数据

这是我的散列数据-

    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模块

  • 你是否考虑重新使用?