J'ai une application qui veut garder ouverts de nombreux fichiers : périodiquement, elle reçoit une demande du client disant "ajouter des données au fichier". disant "ajoutez des données au fichier X", et l'idéal serait d'avoir ce fichier déjà ouvert, et la section d'en-tête du fichier déjà analysée, de sorte que cette requête puisse être envoyée au client. du fichier déjà analysée, afin que cette écriture soit rapide. Cependant, garder ouvert autant de fichiers est pas très agréable pour le système d'exploitation, et pourrait devenir impossible si nos besoins en stockage de données augmentent.
J'aimerais donc une fonction "donnez-moi le handle de ce fichier, en l'ouvrant s'il n'est pas en cache", et un processus quelconque pour fermer automatiquement les fichiers qui n'ont pas été écrits pendant, disons, cinq minutes. Pour le cas spécifique de la mise en cache de handles de fichiers sur lesquels on écrit par à-coups, c'est probablement suffisant, mais cela semble être un problème suffisamment général pour qu'il y ait des fonctions du type "donnez-moi l'objet nommé X", à partir du cache si possible" et "J'en ai maintenant fini avec l'objet X, alors rendez-le éligible à l'éviction dans cinq minutes". minutes à partir de maintenant".
core.cache il semble qu'il pourrait convenir pour cela but, mais le documentation fait défaut et le fuente ne fournit aucun indice particulier sur la manière de l'utiliser. Son TTLCache semble prometteur, mais en plus de ne pas être pas clair sur la manière de l'utiliser, il s'appuie sur le garbage collection pour expulser les éléments, donc je ne peux pas fermer proprement un ressource lorsque je suis prêt à l'expirer.
Je pourrais rouler le mien, bien sûr, mais il y a un certain nombre d'endroits délicats et je suis sûr que j'obtiendrais quelques choses subtilement fausses, alors j'espère que quelqu'un pourra m'indiquer une implémentation de cette fonctionnalité. fonctionnalité. Mon code est en clojure, mais bien sûr l'utilisation d'une bibliothèque java serait tout à fait bien si si c'est là que l'on trouve la meilleure implémentation.