优化
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user