簡體   English   中英

如何在Playframework中使用anorm時添加緩存機制

[英]How to add cache mechanism when using anorm in Playframework

我看到anorm不是一個ORM框架,它直接通過SQL查詢數據。 對於大多數應用程序/網站,我們不應該每次都查詢數據庫,我們需要通過SQL或項目ID來緩存數據。 我想知道playframework是否提供了任何類型的緩存機制? 如果不是如何添加它?

謝謝。

在查詢數據庫之前,您可以在控制器中使用Play緩存。 以下是從Play緩存文檔Scala API派生的簡單示例:

val user: User = Cache.getOrElse[User](key = "user" + userId, expiration = 10) {
  User.findById(userId)
}

在此代碼中,在嘗試查詢數據庫之前,我們在緩存中進行查找以檢查用戶之前是否尚未加載。 如果在緩存中找不到,我們將其存儲在緩存中,並在10秒內到期。

您可以簡單地緩存Anorm方法的答案。 例如,我使用的真實方法:

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)
      }
    }
}

代碼執行選擇並通過getOrElse將答案存儲在緩存中。 如果該值在Cache中,則將被識別並且不會執行任何查詢。

唯一的問題是,當您更新實體用戶時,您將不得不更新緩存(因此它不會保留過時的數據):

// 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)

假設您使用的是Play2框架,它確實提供了緩存機制。 它有很好的文檔:

http://www.playframework.org/documentation/2.0/JavaCache (它叫做javacache,但它適用於Scala)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM