Spring data redis - 如何使用hashOperation的scan方法根据pattern获取键或值?
Spring data redis - How to use hashOperation's scan method to get keys or values based on pattern?
我从未在 Redis 和 Spring 引导方面工作过。我想使用 Redis 作为缓存。
我一直在使用 hashOperations
进行 get/set 操作。我已经配置了 RedisTemplate
来阻止奇怪的散列被添加到键中。
我有一个名为 Post
的 class,我正在缓存它。一个用户可以创建多个 post。密钥生成如下:userId::postId
并且 post 数据被缓存。
如何使用RedisTemplate的scan
方法获取特定用户的所有post?我尝试了 ScanOptions
和模式 *
但我确实做错了什么,因为我没有得到任何数据。 scan
和 ScanOptions
上没有很多链接或 youtube 视频,所以我发现很难实现。
这是我为获取用户的所有 post 所写的内容:
public List<Post> getPostsByUid(String uid) {
String key = uid + "::";
ScanOptions scanOptions = ScanOptions.scanOptions().match("*").count(20).build();
Cursor cursor = hashOperations.scan(key, scanOptions);
List<Post> posts = new ArrayList<>();
while(cursor.hasNext()) {
posts.add((Post)cursor.next());
}
return posts;
}
这是savePost
方法
public Post savePost(Post post) {
String key = post.getUid() + "::" + post.getPostid();
hashOperations.put(key, "", post);
return post;
}
感谢您的帮助!
hashOperations.scan
在散列内扫描。但是您想在整个数据库 (Redis) 中扫描。
String keyPattern = uid + "::" + "*";
ScanOptions scanOptions = ScanOptions.scanOptions().match(keyPattern).count(20).build();
Cursor c = redisConnection.scan(options); // scanning in db
while (c.hasNext()) {
// c.next() is Redis key. Use this in hashOperations to get your Post.
}
我从未在 Redis 和 Spring 引导方面工作过。我想使用 Redis 作为缓存。
我一直在使用 hashOperations
进行 get/set 操作。我已经配置了 RedisTemplate
来阻止奇怪的散列被添加到键中。
我有一个名为 Post
的 class,我正在缓存它。一个用户可以创建多个 post。密钥生成如下:userId::postId
并且 post 数据被缓存。
如何使用RedisTemplate的scan
方法获取特定用户的所有post?我尝试了 ScanOptions
和模式 *
但我确实做错了什么,因为我没有得到任何数据。 scan
和 ScanOptions
上没有很多链接或 youtube 视频,所以我发现很难实现。
这是我为获取用户的所有 post 所写的内容:
public List<Post> getPostsByUid(String uid) {
String key = uid + "::";
ScanOptions scanOptions = ScanOptions.scanOptions().match("*").count(20).build();
Cursor cursor = hashOperations.scan(key, scanOptions);
List<Post> posts = new ArrayList<>();
while(cursor.hasNext()) {
posts.add((Post)cursor.next());
}
return posts;
}
这是savePost
方法
public Post savePost(Post post) {
String key = post.getUid() + "::" + post.getPostid();
hashOperations.put(key, "", post);
return post;
}
感谢您的帮助!
hashOperations.scan
在散列内扫描。但是您想在整个数据库 (Redis) 中扫描。
String keyPattern = uid + "::" + "*";
ScanOptions scanOptions = ScanOptions.scanOptions().match(keyPattern).count(20).build();
Cursor c = redisConnection.scan(options); // scanning in db
while (c.hasNext()) {
// c.next() is Redis key. Use this in hashOperations to get your Post.
}