This package collects useful filesystem datastructures. Currently, it implements two file caches: SizeConstrainedFileCache
and NFileCache
.
The SCFC implements a flexible filesystem cache that can evict entries when a size pressure is applied. Currently there is built-in support for eviction policies such as Least-Recently-Used (LRU
) and Least-Frequently-Used (LFU
), as well as target size policies such as a constant size, or a mandate to keep at least X bytes on disk free.
Example usage:
using FilesystemDatastructures
# Note!! This is a potentially destructive operation: the file cache root will be
# managed by the cache and files therein will be deleted when the constraints are
# violated. Be careful with what you use as the root!
root = mktempdir()
# File cache that keep 10GB free
scfc = SizeConstrainedFileCache(root, TargetSizeKeepFree(10*1024^3), DiscardLRU())
# Add a new file:
key = "small_file"
filesize = 10*1024
filedata = rand(UInt8, filesize)
path = add!(scfc, key, filesize)
open(path, "w") do io
write(path, filedata)
end
# Check to see if that file is there (and also increment its usage counters)
@show hit!(scfc, key)
# Delete that file and its usage counters
delete!(scfc, key)
# Show that hit!() now returns false:
@show hit!(scfc, key)
The NFileCache
is similar to SizeConstrainedFileCache
but targets number of files in the cache rather than number of bytes. NFileCache
supports the same built-in eviction strategies LRU
and LFU
. The interface is the same (add!
, hit!
, delete!
, see above).
Example:
using FilesystemDatastructures
# Note!! This is a potentially destructive operation: the file cache root will be
# managed by the cache and files therein will be deleted when the constraints are
# violated. Be careful with what you use as the root!
root = mktempdir()
# Create a cache that retains maximum 10 files
fc = NFileCache(root, 10, DiscardLRU())