如何缓存scala中的结果?
发布时间:2020-12-16 09:41:28 所属栏目:安全 来源:网络整理
导读:This page有一个Map的getOrElseUpdate使用方法的描述: object WithCache{ val cacheFun1 = collection.mutable.Map[Int,Int]() def fun1(i:Int) = i*i def catchedFun1(i:Int) = cacheFun1.getOrElseUpdate(i,fun1(i))} 所以你可以使用catchedFun1来检查cac
This page有一个Map的getOrElseUpdate使用方法的描述:
object WithCache{ val cacheFun1 = collection.mutable.Map[Int,Int]() def fun1(i:Int) = i*i def catchedFun1(i:Int) = cacheFun1.getOrElseUpdate(i,fun1(i)) } 所以你可以使用catchedFun1来检查cacheFun1是否包含key和返回值。否则,它将调用fun1,然后将fun1的结果缓存在cacheFun1中,然后返回fun1的结果。 我可以看到一个潜在的危险 – cacheFun1可能变得很大。所以cacheFun1必须用垃圾收集器清理? 附:那么scala.collection.mutable.WeakHashMap和java.lang.ref。*? 解决方法
参见上述论文的
Memo pattern和
Scalaz implementation。
还要查看STM实现,如Akka。 不是这只是本地缓存,所以你可能想要查找分布式缓存或STM,如CCSTM,Terracotta或Hazelcast (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |