如何使用Java Play框架来缓存使用memcached的Ebean实体?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (49)

我正在运行Java Play框架版本v2.6.1并使用Ebean进行持久化。我的意图是使用play2-memcached插件获取bean缓存

到目前为止我做了什么?

  • 安装memcached在本地主机上并启用详细日志记录。
  • 代替ehcache依赖与cacheApilibraryDependenciesbuild.sbt(这一点,我认为,要彻底删除的Ehcache)。
  • 加入"com.github.mumoshu" %% "play2-memcached-play26" % "0.9.0",libraryDependenciesbuild.sbt
  • 加入"Spy Repository" at "http://files.couchbase.com/maven2",resolversbuild.sbt
  • 添加以下条目到应用程序conf:

play.modules.disabled += "play.api.cache.ehcache.EhCacheModule" play.modules.enabled+="com.github.mumoshu.play2.memcached.MemcachedModule" play.cache.defaultCache=default play.cache.bindCaches=["db-cache", "user-cache", "session-cache"] memcached.host="127.0.0.1:11211"

  • 带走了我的实体并实现了它Serializable,并添加了@com.avaje.ebean.annotation.Cache注释。
  • 启用S​​QL日志记录

什么工作?

  • 使用Entity.find.byId(id)结果SQL 加载实体SELECT。用不同的请求重新加载它不会产生SQL语句。
  • 打开浏览器到localhost:11211显示系统日志中的错误 - 这是为了确保memcached正在运行,并且我可以看到请求出现
  • 使内存转储我可以看到缓存相关的类com.github.mumoshu被加载。

什么不行?

  • 我期望缓存的对象被发送到memcached(在读取和/或更新时)。这没有发生 - 没有与此相关的memcached日志。如果我运行,没有任何连接到端口11211 netstat -na | grep 11211

我错过了什么?

提问于
用户回答回答于

你还需要绑定javax.caching.CacheManager。加

libraryDependencies += jcache

给你build.sbt

如果正在使用Guice,那么还必须为Java注释添加以下内容:

libraryDependencies += "org.jsr107.ri" % "cache-annotations-ri-guice" % "1.0.0"

扫码关注云+社区