txt: ## dist_cpan-ROBERTLE-Cache-Async.md
  # Cache::Async
  
  ... A Concurrent and Asynchronous Cache for the Raku language.
  
  ## Features
  
  * Producer function that gets passed in on construction and that gets called by
    cache on misses
  * Cache size and maximum entry age can be limited
  * Cache allows refreshing of entries even before they have expired
  * Calls producer async and returns promise to result, perfect for usage in an
    otherwise async or reactive system
  * Transparent support for producers that return promises themselves
  * Extra args can be passed through to producer easily
  * Jitter for refresh and expiry to smooth out producer calls over time
  * Locked internally so it can be used from multiple threads or a thread pool,
    but no lock help while calling the producer function.
  * Propagates exceptions from producer transparently
  * Get entry from cache only if present, without loading/refreshing.
  * Configurably, Nil values can be passed through without caching them
  * Monitoring of hit rate
  
  ## Upcoming Features
  
  * Optimizations of the async producer case
  * Object lifetimes can be restricted by producer function
  
  ## Simple Example usage
  
  ```
  my $cache = Cache::Async.new(max-size => 1000, producer => sub ($k) { ... });
  say await $cache.get('key234');
  
  ```
  
  But of course there are lots more details!
  
  ## Documentation
  
  Please see the POD in lib/Cache/Async.pm6 for usage scenarios and details on how to use Cache::Async.
  
  ## License
  
  Cache::Async is licensed under the [Artistic License 2.0](https://opensource.org/licenses/Artistic-2.0).
  
  ## Feedback and Contact
  
  Please let me know what you think: Robert Lemmen [robertle@semistable.com](mailto:robertle@semistable.com)
  