如何在数据流中使用memcache?

Roh*_*gam 2 google-cloud-dataflow

我想在dafalow ParDo中使用Memcache?任何想法如何?我不能使用现有的memcahse lib,因为它们属于appengine而且不可序列化.罗希特

jkf*_*kff 7

我的猜测是,你DoFn的类型中有一个私有变量MemcacheServiceImpl(如果我猜错了,请编辑你的问题以包含你的代码DoFn).

实际上,Dataflow会DoFn在您提交管道时对其进行序列化,并对工作人员进行反序列化.处理此问题的正确方法是使变量成为瞬态变量,并将其初始化为懒惰:

class MyDoFn extends DoFn<..., ...> {
  private transient MemcacheService memcache;
  private MemcacheService getMemcache() {
    if (memcache == null) {
      memcache = MemcacheServiceFactory.getMemcacheService();
      ...
    }
  }

  public void process(...) {
    ...use getMemcache()...
  }
}
Run Code Online (Sandbox Code Playgroud)

另请注意,要从非AppEngine环境访问AppEngine API(包括Memcache),您应该使用Remote API.