scalacache 配合 guava

代码

Scala 复制代码
package com.yy.guava

import scalacache._
import scalacache.guava._
import scalacache._
import scalacache.guava._
import com.google.common.cache.CacheBuilder
import scalacache.modes.sync._
import scalacache.serialization.binary._
import scalacache._
import guava._
import memoization._

import com.google.common.cache.CacheBuilder

import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.duration._
import java.time.Instant

/**
 * scala套壳的框架. 支持 guava caffeine 作为底层实现.
 * https://cb372.github.io/scalacache/
 * https://cb372.github.io/scalacache/docs/cache-implementations.html
*/
object scalaCacheDemo1 {
  def main(args: Array[String]): Unit = {


    val underlyingGuavaCache = CacheBuilder
      .newBuilder()
      .maximumSize(1000L) // 配置缓存个数
      .build[String, Entry[String]]

    implicit val guavaCache: Cache[String] = GuavaCache(underlyingGuavaCache)

    val db = Map(1 -> "A", 2 -> "B", 3 -> "C")

    def queryDb(id: Int): String = {
      println(s"Getting id $id from db")
      db(id)
    }

    /*
    https://cb372.github.io/scalacache/docs/memoization.html
    配置缓存时长
     */
    def getUser(id: Int): String = memoizeSync(Option(1.seconds)) {
        queryDb(id)
    }


    println(getUser(1))
    Thread.sleep(100)

    println(getUser(1))
    Thread.sleep(2000)

    println(getUser(1))
    Thread.sleep(100)

    println(getUser(2))
    Thread.sleep(100)

    println(getUser(2))
    Thread.sleep(100)

    println(getUser(2))
    Thread.sleep(100)


    //  Output - Only hits 'db' once
    //  Getting id 1 from db
    //  Getting id 2 from db


  }

}

输出

Scala 复制代码
Getting id 1 from db
A
A
Getting id 1 from db
A
Getting id 2 from db
B
B
B

pom

XML 复制代码
       <!-- https://mvnrepository.com/artifact/com.github.cb372/scalacache-core -->
        <dependency>
            <groupId>com.github.cb372</groupId>
            <artifactId>scalacache-core_${scala.binary.version}</artifactId>
            <version>${scalacache.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.github.cb372/scalacache-guava -->
        <dependency>
            <groupId>com.github.cb372</groupId>
            <artifactId>scalacache-guava_${scala.binary.version}</artifactId>
            <version>${scalacache.version}</version>
        </dependency>
相关推荐
谢亮_vipxieliang4 天前
ValidX vs Google Guava Preconditions:验证 vs 断言
java·spring boot·后端·spring cloud·hibernate·guava
吴声子夜歌6 天前
Guava——散列
java·guava
吴声子夜歌6 天前
Guava——并发(二)
java·网络·guava
吴声子夜歌7 天前
Guava——事件总线
java·网络·guava
吴声子夜歌7 天前
Guava——并发(一)
java·guava
吴声子夜歌7 天前
Guava——反射
java·开发语言·guava
吴声子夜歌7 天前
Guava——基本工具(二)
windows·python·guava
吴声子夜歌8 天前
Guava——基本工具(一)
windows·guava
吴声子夜歌8 天前
Guava——集合(二)
java·guava
吴声子夜歌8 天前
Guava——缓存
缓存·guava