Apakah ada di antara Anda yang tahu tentang Java Map atau penyimpanan data standar serupa yang secara otomatis membersihkan entri setelah batas waktu tertentu? Ini berarti penuaan, di mana entri yang sudah kadaluwarsa “usang” secara otomatis.
Lebih disukai di perpustakaan sumber terbuka yang dapat diakses melalui Maven?
Saya tahu cara untuk menerapkan fungsi sendiri dan telah melakukannya beberapa kali di masa lalu, jadi saya tidak meminta saran dalam hal itu, tetapi untuk petunjuk penerapan referensi yang baik.
Solusi berbasis WeakReference seperti WeakHashMap bukan pilihan, karena kunci saya cenderung bukan string yang diinternir dan saya ingin batas waktu yang dapat dikonfigurasi yang tidak bergantung pada pengumpul sampah.
Ehcache juga merupakan opsi yang tidak ingin saya andalkan karena memerlukan file konfigurasi eksternal. Saya mencari solusi hanya kode.
sumber
Jawaban:
Iya. Google Collections, atau Jambu seperti namanya sekarang memiliki sesuatu yang disebut MapMaker yang dapat melakukan hal itu.
Memperbarui:
Pada jambu 10.0 (dirilis 28 September 2011) banyak dari metode MapMaker ini telah ditinggalkan demi CacheBuilder baru :
sumber
weakKeys()
menyiratkan bahwa kunci dibandingkan menggunakan semantik ==, bukanequals()
. Saya kehilangan 30 menit mencari tahu mengapa cache String-keyed saya tidak berfungsi :)weakKeys()
penting.weakKeys()
tidak diperlukan 90% dari waktu.Ini adalah contoh implementasi yang saya lakukan untuk persyaratan dan konkurensi yang sama berfungsi dengan baik. Mungkin bermanfaat bagi seseorang.
Git Repo Link (Dengan Implementasi Pendengar)
https://github.com/vivekjustthink/WeakConcurrentHashMap
Bersulang!!
sumber
cleanMap()
setengah dari waktu yang ditentukan?Anda dapat mencoba implementasi saya dari peta hash yang kedaluwarsa. Implementasi ini tidak menggunakan utas untuk menghapus entri yang kadaluwarsa, melainkan menggunakan DelayQueue yang dibersihkan di setiap operasi secara otomatis.
sumber
Apache Commons memiliki dekorator untuk Peta untuk kedaluwarsa entri: PassiveExpiringMap Ini lebih sederhana daripada cache dari Guava.
PS berhati-hatilah, itu tidak disinkronkan.
sumber
Kedengarannya seperti ehcache terlalu banyak untuk apa yang Anda inginkan, tetapi perhatikan bahwa itu tidak memerlukan file konfigurasi eksternal.
Pada umumnya ide yang baik untuk memindahkan konfigurasi ke file konfigurasi deklaratif (jadi Anda tidak perlu mengkompilasi ulang ketika instalasi baru memerlukan waktu kedaluwarsa yang berbeda), tetapi sama sekali tidak diperlukan, Anda masih dapat mengonfigurasinya secara terprogram. http://www.ehcache.org/documentation/user-guide/configuration
sumber
Koleksi Google (jambu) memiliki MapMaker di mana Anda dapat mengatur batas waktu (untuk kedaluwarsa) dan Anda dapat menggunakan referensi lunak atau lemah saat Anda memilih menggunakan metode pabrik untuk membuat contoh pilihan Anda.
sumber
Anda dapat mencoba Peta Kedaluwarsa http://www.java2s.com/Code/Java/Collections-Data-Structure/ExpiringMap.htm kelas dari Proyek Apache MINA
sumber
Jika ada yang membutuhkan hal yang sederhana, mengikuti adalah himpunan kunci yang kedaluwarsa. Mungkin mudah dikonversi ke peta.
sumber
System.nanoTime()
untuk menggunakan perbedaan waktu komputasi karena System.currentTimeMillis () tidak konsisten karena tergantung pada waktu sistem dan mungkin tidak berkelanjutan.Biasanya, cache harus menyimpan objek di sekitar waktu tertentu dan akan mengeksposnya beberapa saat kemudian. Apa waktu yang baik untuk mengadakan suatu objek tergantung pada kasus penggunaan. Saya ingin hal ini menjadi sederhana, tanpa utas atau penjadwal. Pendekatan ini bekerja untuk saya. Tidak seperti
SoftReference
s, objek dijamin akan tersedia dalam jumlah waktu minimum. Namun, jangan tinggal di dalam memori sampai matahari berubah menjadi raksasa merah .Sebagai contoh penggunaan, pikirkan sistem yang merespons secara lambat yang harus dapat memeriksa apakah permintaan telah dilakukan baru-baru ini, dan dalam hal ini jangan melakukan tindakan yang diminta dua kali, bahkan jika pengguna yang sibuk menekan tombol beberapa kali. Tetapi, jika tindakan yang sama diminta beberapa waktu kemudian, itu akan dilakukan lagi.
sumber
Cache jambu biji mudah diimplementasikan. Kami dapat kedaluwarsa pada basis waktu menggunakan cache jambu biji. Saya telah membaca sepenuhnya posting dan di bawah ini memberikan kunci studi saya.
Referensi: contoh cache jambu biji
sumber