我正在使用@Cacheable
开发 Spring Boot + Redis 示例。我已经开发了一个REST端点,该端点可以按预期缓存数据,但是我对数据正存储在Redis中并不感到好奇。
有人可以指导
1)数据如何保存
2)如何从Redis读取可缓存密钥的数据?
127.0.0.1:6379> KEYS *
1) "post-top::SimpleKey []"
Author.java
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Author implements Serializable{
private static final long serialVersionUID = 1L;
private String name;
}
Post.java
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Post implements Serializable{
private static final long serialVersionUID = 1L;
private String id;
private String title;
private String description;
private String image;
private int shares;
private Author author;
}
PostController.java
@RestController
@RequestMapping("/posts")
public class PostController {
private static final Logger log = LoggerFactory.getLogger(PostController.class);
@Autowired
private PostService postService;
@Cacheable(value = "post-single", key="#id", unless = "#result.shares < 500")
@GetMapping("/{id}")
public Post getPostByID(@PathVariable String id) throws PostNotFoundException {
log.info("get post with id {}", id);
return postService.getPostByID(id);
}
@CachePut(value = "post-single", key = "#post.id")
@PutMapping("/update")
public Post updatePostByID(@RequestBody Post post) throws PostNotFoundException {
log.info("update post with id {}", post.getId());
postService.updatePost(post);
return post;
}
@CacheEvict(value = "post-single", key = "#id")
@DeleteMapping("/delete/{id}")
public void deletePostByID(@PathVariable String id) throws PostNotFoundException {
log.info("delete post with id {}", id);
postService.deletePost(id);
}
@Cacheable(value = "post-top")
@GetMapping("/top")
public List<Post> getTopPosts() {
return postService.getTopPosts();
}
@CacheEvict(value = "post-top")
@GetMapping("/top/evict")
public void evictTopPosts() {
log.info("Evict post-top");
}
}