メモリ内キャッシュ保存の具体例/Android
from データレイヤの具体例を眺める
メモリ内キャッシュ保存の具体例/Android
前にリクエストが行われていた場合、ユーザーが画面を開いたときにキャッシュに保存されたニュースを表示する、という要件が追加
キャッシュ
キャッシュの実装にはさまざまな形式がある
単純な可変変数
高度なクラス
複数のスレッドでの読み取り / 書き込みオペレーションから保護するためのクラス
実装先
ユースケースに応じて選択
リポジトリ
今回の例はこちら
データソースクラス
キャッシュの保存先のユースケース
code:kotlin
class NewsRepository(
private val newsRemoteDataSource: NewsRemoteDataSource
) {
// Mutex to make writes to cached values thread-safe.
private val latestNewsMutex = Mutex()
// Cache of the latest news got from the network.
private var latestNews: List<ArticleHeadline> = emptyList()
suspend fun getLatestNews(refresh: Boolean = false): List<ArticleHeadline> {
if (refresh || latestNews.isEmpty()) {
val networkResult = newsRemoteDataSource.fetchLatestNews()
// Thread-safe write to latestNews
latestNewsMutex.withLock {
this.latestNews = networkResult
}
}
return latestNewsMutex.withLock { this.latestNews }
}
}
気になったもの
Mutex/Kotlin
共有可能な可変状態と同時実行
withLock{}を用いた排他制御
同時に実行されないと保証される
データレイヤの具体例を眺める#6486be77e0be4c00000da3f5
データレイヤの具体例を眺める#6486be77e0be4c00000da3f9
キャッシュとなる変数のライフサイクル
今回はアプリが開いている間のみ