使用原始数据库文件定期更新iplookUp缓存

时间:2019-06-05 16:09:31

标签: scala maxmind

我想从maxmind数据库文件GeoIP-City.mmdb为iplookups创建一个缓存。 问题是如果我的应用程序正在运行并且原始数据库已从maxmind中更新,我的代码将如何在不重新启动的情况下获取更新的文件内容?

从maxmind文件读取数据的代码是

val ipLooksUps: IO[IpLookups[IO]] = IpLookups.createFromFilenames(
    Some(geoFilePath),
    None,
    None,
    None,
    false,
    20000
  )

现在ipLookups具有ip地址和城市映射的数据。在我的应用程序运行时如何自动更新

1 个答案:

答案 0 :(得分:0)

您可以使用fs2-cron库https://github.com/fthomas/fs2-cron

case class Look() {
    val ipLooksUps: IO[IpLookups[IO]] = IpLookups.createFromFilenames(
    Some(geoFilePath),
    None,
    None,
    None,
    false,
    20000)
}

import cats.effect.{IO, Timer}
import cron4s.Cron
import eu.timepit.fs2cron.awakeEveryCron
import fs2.Stream
import scala.concurrent.ExecutionContext

implicit val timer: Timer[IO] = IO.timer(ExecutionContext.global)


val cron      = Cron.unsafeParse("*/2 * * ? * *")
val scheduled = awakeEveryCron[IO](cron) >> Stream.eval(IO(Look()))
scheduled.compile.drain.unsafeRunAsyncAndForget()