pull/1846/head^2
kunfei 3 years ago
parent 1cc6999e5b
commit 6abf5002eb
  1. 3
      app/src/main/java/io/legado/app/data/dao/CacheDao.kt
  2. 16
      app/src/main/java/io/legado/app/help/CacheManager.kt

@ -9,6 +9,9 @@ import io.legado.app.data.entities.Cache
@Dao @Dao
interface CacheDao { interface CacheDao {
@Query("select * from caches where `key` = :key")
fun get(key: String): Cache?
@Query("select value from caches where `key` = :key and (deadline = 0 or deadline > :now)") @Query("select value from caches where `key` = :key and (deadline = 0 or deadline > :now)")
fun get(key: String, now: Long): String? fun get(key: String, now: Long): String?

@ -36,15 +36,23 @@ object CacheManager {
} }
fun get(key: String): String? { fun get(key: String): String? {
return getFromMemory(key) ?: appDb.cacheDao.get(key, System.currentTimeMillis()) getFromMemory(key)?.let {
return it
}
val cache = appDb.cacheDao.get(key)
if (cache != null && (cache.deadline == 0L || cache.deadline > System.currentTimeMillis())) {
memoryLruCache.put(key, cache)
return cache.value
}
return null
} }
//从内存中获取数据 使用lrucache 支持过期功能 //从内存中获取数据 使用lruCache 支持过期功能
private fun getFromMemory(key: String): String? { private fun getFromMemory(key: String): String? {
val cache = memoryLruCache.get(key) ?: return null val cache = memoryLruCache.get(key) ?: return null
val deadline = cache!!.deadline val deadline = cache.deadline
return if (deadline == 0L || deadline > System.currentTimeMillis()) { return if (deadline == 0L || deadline > System.currentTimeMillis()) {
cache!!.value cache.value
} else { } else {
memoryLruCache.remove(key) memoryLruCache.remove(key)
null null

Loading…
Cancel
Save