分享

Spring Boot Cache 配合 Redis 使用时,向数据库添加新记录成功后,相应更新缓存的正确方法?

 vnxy001 2020-02-29

使用 Spring Boot Cache 结合 JPA,缓存用 Redis,下面是一个非常简单的查增服务代码,但是测试发现,只有那些在第一次触发 findAll()前就被写入缓存的记录会被返回,即使此时查看后台数据库已经添加了很多新的记录,然后每次都会命中缓存,就只有最初那条记录。

@Service
@CacheConfig(cacheNames = "todoService")
public class TodoServiceImpl implements TodoService {
    private final TodoRepository todoRepository;

    @Autowired
    public TodoServiceImpl(TodoRepository todoRepository) {
        this.todoRepository = todoRepository;
    }

    @Override
    @Cacheable(value= "allTodoCache", unless= "#result.size() == 0")
    public List<Todo> getAllTodos() {
        return todoRepository.findAll();
    }

    @Override
    @CachePut(value= "allTodoCache", key= "#todo.id")
    public Todo save(Todo todo) {
        return this.todoRepository.save(todo);
    }
}

查看 Redis 发现,虽然使用@CachePut更新了缓存,但是最初那条记录allTodoCache::SimpleKey []里面的 ArrayList 并没有更新,而是直接另外加了新的记录,但似乎 JPA 的 findAll()只会查看这条记录里的数组。

[
	"java.util.ArrayList",
	[
		{
			"@class": "com.domain.Todo",
			"id": 1,
			"content": "First Record"
		}
	]
]

所以想问下正确地在 JPA 存储新记录时更新 Redis 使得 findAll()能获取全部最新记录的方法是什么?

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多