LazyCache icon indicating copy to clipboard operation
LazyCache copied to clipboard

Separate instances sharing memory

Open sebbarg opened this issue 1 year ago • 1 comments

Describe the bug Creating two separate instances of LazyCache, using default constructor will share the same underlying memory. I'm not sure if this is a bug or by design, but it clearly violates the principle of least surprise :)

To Reproduce

using LazyCache;

// First cache

var cache1 = new CachingService();
cache1.GetOrAdd("key1", () => "value1");

// Another cache

var cache2 = new CachingService();
var value = cache2.Get<string>("key1");

Console.WriteLine(value);

// Expected value: null

// Actual value: "value1"

Expected behavior Creating two instances of LazyCache using default constructors, should not share the underlying cache.

** Framework and Platform **

  • OS: [Everything]
  • Framework [NET8]
  • LazyCache Version [e.g. 2.4.0]

Additional context Culprit seems to be this static: https://github.com/alastairtree/LazyCache/blob/633b5702ddbc3e013aa9a3893d7b4dc0c807943f/LazyCache/CachingService.cs#L42

sebbarg avatar Oct 23 '24 12:10 sebbarg

I agree this is an unexpected choice - but I think this is by design. See in the readme

// By default it uses a single shared cache under the hood so cache is shared out of the box (but you can configure this)
IAppCache cache = new CachingService();

However I don't see where to configure this which is a bummer. Going to look for an alternative library.

olsonpm avatar Jan 21 '25 15:01 olsonpm