Bạn có thể chỉ cần lưu lại câu trả lời của các phương thức Anorm. Ví dụ: phương pháp thực mà tôi sử dụng:
def findById(id: Long): Option[User] = {
Cache.getOrElse(userCacheKey + id, 60*60) {
DB.withConnection {
implicit connection =>
SQL("select * from publisher where id = {id}").on('id -> id).as(User.simple.singleOpt)
}
}
}
Mã sẽ chọn và lưu trữ câu trả lời trong bộ nhớ cache qua getOrElse
. Nếu giá trị nằm trong Cache, nó sẽ được nhận và không có truy vấn nào được thực thi.
Vấn đề duy nhất là khi bạn cập nhật các thực thể tài khoản bạn sẽ phải cập nhật bộ nhớ cache (vì vậy nó không giữ dữ liệu cũ):
// Assumes a user: User object available with the updated user
Cache.set(userCacheKey + id, cached.copy(name = user.name, avatar = user.avatar, bio = user.bio, url = user.url, location = user.location), 60*60)
Nguồn
2012-11-27 10:13:02
+1, nhưng bộ nhớ cache 10 giây? Tôi đã đi với 2 phút đến 24 giờ cá nhân. Bạn không chắc chắn liệu có một điểm giảm dần trong việc đặt thời gian hết hạn bộ nhớ cache rất thấp hay không. – virtualeyes
Chắc chắn, nó chỉ là ví dụ –