MichaCo / CacheManager

CacheManager is an open source caching abstraction layer for .NET written in C#. It supports various cache providers and implements many advanced features.
http://cachemanager.michaco.net
Apache License 2.0
2.33k stars 456 forks source link

RedisCacheHandle implementation of Clear() clears the entire database #329

Open erizzo opened 3 years ago

erizzo commented 3 years ago

It appears from the code that RedisCacheHandle.Clear() will actually flush the entire database. Doesn't that go against the intention individual ICache instances being isolated from others?

MichaCo commented 3 years ago

I don't 100% remember the reasons for that but there is technically no other (performant) way then FlushDB? Only possible way would be to track all keys or search keys and delete the found ones - which are all at least n+1 operations.

If you want real separation of keys, you can still use different databases

MichaCo commented 3 years ago

I cannot really change the behavior for now.

Clear will clear the DB, ClearRegion can be used to try to delete only tracked keys. The region mechanism isn't 100% reliable though with distributed caches as Redis can evict keys without the client noticing and so on...

But yeah, those are basically the 2 build in options, apart from using different Redis DBs in the first place.

I might try something with regions and key prefixes and maybe Redis can efficiently delete everything with prefix in newer versions? I just need time to work on stuff like that