com.eharmony.aloha

NoEvictionCache

class NoEvictionCache extends AnyRef

A cache that is a hybrid of the Memoizer in Listing 5.19 in Java Concurrency in Practice and https://www.bionicspirit.com/blog/2012/07/02/love-scala.html. Makes sure to put a Promise of the memoized value into the cache only if it's not already there. Then only compute the actual value (in a Future) and complete the Promise with the Future only if the promise was successfully inserted atomically. Otherwise, another promise was snuck in so use the Future associated with that Promise.

val cache = new NoEvictionCache
val slow = () => {Thread.sleep(5000); println("executing slow()"); 1}
val t1 = System.nanoTime                                      // Start the clock
val futures = Seq(                                            // Returns immediately (non-blocking)
      cache("one"){slow()},                                   // Only execute slow() once.
      cache("one"){slow()})
val a = Future.fold(futures)(0)(_+_)                          // Returns immediately (non-blocking)
val t2 = System.nanoTime
println("Runtime for setup: " + (1.0e-9*(t2-t1)).toFloat)     // Prints: "Runtime for setup: 0.001041"
a.onSuccess{ case i =>
  val t3 = System.nanoTime                                    // Determine elapsed time.
  println(i + ", runtime: " + (1.0e-9*(t3-t1)).toFloat)       // Prints: "2, runtime: 5.002082"
}
Linear Supertypes
AnyRef, Any
Ordering
  1. Alphabetic
  2. By inheritance
Inherited
  1. NoEvictionCache
  2. AnyRef
  3. Any
  1. Hide All
  2. Show all
Learn more about member selection
Visibility
  1. Public
  2. All

Instance Constructors

  1. new NoEvictionCache()(implicit ec: ExecutionContext)

    ec

    an execution context in which to run the futures that are created.

Value Members

  1. final def !=(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  2. final def !=(arg0: Any): Boolean

    Definition Classes
    Any
  3. final def ##(): Int

    Definition Classes
    AnyRef → Any
  4. final def ==(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  5. final def ==(arg0: Any): Boolean

    Definition Classes
    Any
  6. def apply[A](key: String)(a: ⇒ A)(implicit arg0: RefInfo[A]): Future[A]

    Cache a value.

    Cache a value.

    A

    type of value to be memoized

    key

    string identifier

    a

    call-by-name value to be cached or retrieved from the cache.

    returns

    a Future containing the result of a

  7. final def asInstanceOf[T0]: T0

    Definition Classes
    Any
  8. def clone(): AnyRef

    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  9. final def eq(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  10. def equals(arg0: Any): Boolean

    Definition Classes
    AnyRef → Any
  11. def finalize(): Unit

    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  12. final def getClass(): Class[_]

    Definition Classes
    AnyRef → Any
  13. def hashCode(): Int

    Definition Classes
    AnyRef → Any
  14. final def isInstanceOf[T0]: Boolean

    Definition Classes
    Any
  15. def logging[A](k: (String, String), inserting: Boolean): Unit

    Made protected so that it can be overridden in a test class to test caching.

    Made protected so that it can be overridden in a test class to test caching.

    A

    k
    inserting
    Attributes
    protected[this]
  16. final def ne(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  17. final def notify(): Unit

    Definition Classes
    AnyRef
  18. final def notifyAll(): Unit

    Definition Classes
    AnyRef
  19. final def synchronized[T0](arg0: ⇒ T0): T0

    Definition Classes
    AnyRef
  20. def toString(): String

    Definition Classes
    AnyRef → Any
  21. final def wait(): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  22. final def wait(arg0: Long, arg1: Int): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  23. final def wait(arg0: Long): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws( ... )

Inherited from AnyRef

Inherited from Any

Ungrouped