当前位置: 首页 > 知识库问答 >
问题:

Spring Redis哈希操作扫描

钱季
2023-03-14

我正在做Spring Redis,我把键作为

redistemplate.opsForHash().put("Customer", Customer.class, List<Customers>)

我想从列表<>中搜索,

ScanOptions options = ScanOptions.scanOptions().match(pattern).count(1).build();

Cursor<Entry<Object, Object>> keys = redistemplate.opsForHash().scan("Customer", options);

也不起作用。请救命!!

共有1个答案

萧无尘
2023-03-14

首先,扫描操作匹配keye不匹配值。当使用哈希存储值时,它应该如下所示:redistemplate.opsforhash().put(“key”,keyInsideHash,value);因此Redis记录的实际键是key(您可以使用它来获取哈希)。keyinsidehash是需要存储的实际值的键。所以首先获取散列,然后从中获取值。例如:redistemplate.opsforhash().put(“customerkey1”,“firstname”,“myfirstname”);redistemplate.opsforhash().put(“customerkey1”,“lastname”,“mylastname”);。在本例中,我们使用键“CustomerKey1”将两个条目[“firstname”,“myfirstname”][“lastname”,“mylastname”]存储在同一个散列中。在您的示例中,您有一个列表,而不是“MyFirstName”。如果需要扫描哈希,请按照下面的操作(扫描哈希中的键,而不是值):

saveToDbCacheRedisTemplate.execute(new RedisCallback<List<String>>() {

            @Override
            public List<String> doInRedis(RedisConnection connection) throws DataAccessException {
                ScanOptions options = ScanOptions.scanOptions().match("pattern").count(1).build();;
                Cursor<Entry<byte[], byte[]>> entries = connection.hScan("customerKey1".getBytes(), options);
                List<String> result = new ArrayList<String>();
                if(entries!=null)
                    while(entries.hasNext()){
                        Entry<byte[], byte[]> entry = entries.next();
                        byte[] actualValue = entry.getValue();
                        result.add(new String(actualValue));
                    }

                return result;
            }

        });
 类似资料:
  • 底层实现是hash table,一般操作复杂度是O(1),要同时操作多个field时就是O(N),N是field的数量。应用场景:土法建索引。比如User对象,除了id有时还要按name来查询。 可以有如下的数据记录: (String) user:101 -> {“id”:101,”name”:”calvin”…} (String) user:102 -> {“id”:102,”name”:”ke

  • hdel key field 删除指定的hash field

  • hget key field 获取指定的hash field hmget key filed1....fieldN 获取全部指定的hash filed hmset key filed1 value1 ... filedN valueN 同时设置hash的多个field

  • hset key field value 设置hash field为指定值,如果key不存在,则先创建。 hsetnx 设置hash field为指定值,如果 key 不存在,则先创建。如果 field已经存在,返回0,nx是not exist的意思。

  • hlen key 返回指定hash的field数量

  • hvals key 返回hash的所有value