我们在Java springboot中使用Hazelcast内存缓存。
我的同事滥用缓存,而且我不确定如何从设计角度说服管理层他错了。我根据自己的情况制作了一个示例。
BookApiController从前端获取值bookid。
bookdetails存储库需要bookid和isbn作为参数。我的同事不是从前端获取isbn的值,而是从先前的缓存事务中获取isbn的值。
这就是他的做法
//BookApiController
getBookDetails(string bookid) {
service.getBookDetails(bookid);
}
//BookApiService
getBookDetails(string bookid) {
books= cachedBooks() <---- assume this will always be cached 1 min earlier in prev transaction
repo.getBookDetails(bookid, books[0].isbn)
}
@Cacheable(cacheNames = CacheConfig.Books, key= SIMPLE_CACHE_KEY, sync=true)
public cachedBooks()
{
//Lots of backend calls and heavy work here
}
我要说的是前端已经具有ISBN值,它可以将值传递给控制器而不是使用缓存,就像这样简单
//BooksApiController
getBookDetails(string bookid, string isbn) {
service.getBookDetails(bookid,isbn)
}
//BookApiService
getBookDetails(string bookid, string isbn) {
repo.getBookDetails(bookid, isbn)
}
他只是滥用缓存,并且他已经在多个地方这样做了。我们是否有与此相关的任何缓存设计准则?