Releases: haneytron/dache
Dache 1.4.4
Dache 1.4.3
- Upgraded to new version of SimplSockets. This new version fixes a rare hang.
- Fixed bug in DacheOutputCacheProvider and DacheMvcChildActionCache
Dache 1.4.2
- Upgraded to new version of SimplSockets. This new version fixed numerous crashes, hangs, and communication problems. Dache should be significantly more reliable now with better uptimes.
- When hosting the Dache Server in your own process, you may now configure it programmatically instead of having to use a configuration file. There is a new constructor to facilitate this option.
- Various minor edge case bug fixes
Dache 1.4.1
- HIGH AVAILABILITY! You can now configure Dache to use > 1 cache host per cache fragment/bucket. This allows for redundancy in the case of cache server failure! To utilize this, adjust the
hostRedundancyLayers
setting in the dache client.config
file. - FASTER BETTER COMMUNICATION! SimplSockets rewritten for much more efficient communication. Also streamlined the Dache low level TCP syntax.
- MUCH SIMPLER CLIENT METHOD CALLS! Reduced most operations to 1 or 2 methods with named parameters instead of having lke 17 Add____ methods.
- CACHED ITEM REMOVAL CALLBACKS! Now you can be notified when a cache key is removed from cache. NOTE: updating a cache key triggers a removal, so don't spin yourself into a loop with this!
- Performance counter overhaul; no longer using performance counters for self-hosting (fixes errors related to permissions for self-hosting)
- Catching and swallowing regex pattern exceptions. If you use a bad regex pattern, you'll get no results.
- Fixed cache memory limit reporting (
MemoryCache
MSDN docs LIED to me!) - White space checks on cache keys and tag names (will throw exception at client)
- Added new performance test for removed item callbacks. This lets you see how subscribed to removed cache keys works.
- Updated
TODO.txt
- Updated example client config file and documentation
- Updated various XML code comments
- Minor formatting of
README
file - Various minor edge case bug fixes
- Fixed breaking change in tag adds introduced in 1.4.0
- Fixed breaking change in cache key misses introduced in 1.4.0
Dache 1.4.0
- HIGH AVAILABILITY! You can now configure Dache to use > 1 cache host per cache fragment/bucket. This allows for redundancy in the case of cache server failure! To utilize this, adjust the
hostRedundancyLayers
setting in the dache client.config
file. - FASTER BETTER COMMUNICATION! SimplSockets rewritten for much more efficient communication. Also streamlined the Dache low level TCP syntax.
- MUCH SIMPLER CLIENT METHOD CALLS! Reduced most operations to 1 or 2 methods with named parameters instead of having lke 17 Add____ methods.
- CACHED ITEM REMOVAL CALLBACKS! Now you can be notified when a cache key is removed from cache. NOTE: updating a cache key triggers a removal, so don't spin yourself into a loop with this!
- Performance counter overhaul; no longer using performance counters for self-hosting (fixes errors related to permissions for self-hosting)
- Catching and swallowing regex pattern exceptions. If you use a bad regex pattern, you'll get no results.
- Fixed cache memory limit reporting (
MemoryCache
MSDN docs LIED to me!) - White space checks on cache keys and tag names (will throw exception at client)
- Added new performance test for removed item callbacks. This lets you see how subscribed to removed cache keys works.
- Updated
TODO.txt
- Updated example client config file and documentation
- Updated various XML code comments
- Minor formatting of
README
file - Various minor edge case bug fixes
Dache 1.3.2
- IMPORTANT LICENSING CHANGE: Dache software is now dual licensed. Please see the LICENSE.txt file for more information.
- POSSIBLE BREAKING CHANGE: Due to the separation of the cache host logic into an independent DLL, the cache host service has been renamed from Dache.CacheHost.exe to Dache.CacheHostService.exe
- Separated cache host into independent DLL which can be used in your own custom processes and code. This enables things like using Dache in custom Azure Worker Roles or console applications!
- Created NuGet package for the independent Dache Cache Host DLL.
- Cleaned up Performance Counter code and (hopefully) fixed bug related to performance counter memory leak. If the issue remains after this build I'll be removing the performance counters entirely.
- Removed unused Cache Evictions and Expirations Per Second performance counter.
- Fixed 100% cache miss on GetTaggedLocal
- Fixed possible infinite loops in cache client when no data was returned from the cache host
- Fixed bug with assigning/resolving cache host IP address in CommunicationClient
- Fixed very, VERY stupid error with absolute expiration of cached item date time format. I should have written unit tests!
- Various code cleanup housekeeping tasks
- Stubbed data persistence framework to allow Dache to persist cached data between restarts (recover from crashes and failures)! This feature is not yet complete.
Dache 1.3.1
DACHE 1.3.1
distributed caching for .net applications
fast, scalable distributed caching with meaningful performance metrics for your managers and a simple api for your development team
EMAIL: [email protected]
VERSION INFORMATION
1.3.1
NOTE: it is STRONGLY recommended that you IMMEDIATELY upgrade to this version as it has important memory usage fixes (memory usage reduced by a factor of 90-95%)
- Fixed Garbage Collection issue with Cache Host: memory usage has dropped SUBSTANTIALLY as a result! Infinite add test now uses ~ 6 megabytes total (was > 250 megabytes)!
- Downgraded projects to .NET 4.0 because it allows more people to use Dache.
- Added configurable maximum connections to Cache Host (specified in the .config file)
- Upgraded SimplSockets to 1.1.2 which improves memory efficiency and usage
- Updated copyright information to my company: Imperative Bytes, LLC
INSTALLATION INSTRUCTIONS
Client
The Dache Client is a single DLL which you include in any application which you wish to be able
to talk to Dache from. Add it and its dependencies as a reference and begin coding. There is an included
XML file so that Intellisense will show you method and type information. An example configuration file named
Client.Example.config
is also included to show you how to configure your application.
NOTE: all clients should be configured with the same list of servers. The list of servers does
not have to be in the same order, but each client's list should contain the same servers.
Supported built-in custom Loggers and Serializers:
Dache.Client.Serialization.BinarySerializer, Dache.Client
Dache.Client.Serialization.GZipSerializer, Dache.Client
Dache.Core.Logging.EventViewerLogger, Dache.Core
Dache.Core.Logging.FileLogger, Dache.Core
Host
The host is the actual process that does the caching work. To install it, run install.bat
or
install it manually via .NET 4.0's installutil
from a command prompt:
C:\Windows\Microsoft.NET\Framework\v4.0.30319>installutil "C:\Path\To\Dache.CacheHost.exe"
You will be offered custom installation settings at this time, including the ability to rename the
service if you want to install multiple Dache hosts on a single server under unique names.
After installation, open the Dache.CacheHost.exe.config
file and configure the appropriate
settings. The configuration file is fully XML commented.
To uninstall, run uninstall.bat
or uninstall it manually via .NET 4.0's installutil
from a command prompt:
C:\Windows\Microsoft.NET\Framework\v4.0.30319>installutil /u "C:\Path\To\Dache.CacheHost.exe"
Supported built-in custom MemCaches and Serializers:
Dache.CacheHost.Storage.MemCache, Dache.CacheHost
Dache.CacheHost.Storage.GZipMemCache, Dache.CacheHost
Dache.Core.Logging.EventViewerLogger, Dache.Core
Dache.Core.Logging.FileLogger, Dache.Core
Board
Not yet completed. Feel free to contribute! :)
Dache 1.3.0
DACHE 1.3.0
distributed caching for .net applications
fast, scalable distributed caching with meaningful performance metrics for your managers and a simple api for your development team
EMAIL: [email protected]
VERSION INFORMATION
1.3.0
- Upgraded projects to .NET 4.5
- Created SharpMemoryCache to fix bug with MemoryCache not trimming correctly at the polling interval. Cache will now closely respect the cache memory percentage limit at the polling interval.
- Cache Host now supports new Keys and Keys-Tag methods to search for keys and return lists of keys. NOTE: the Keys operations are EXPENSIVE and lock the cache for the duration, but are done in parallel to minimize blocking time. Use with caution/sparingly for large data sets.
- Cache Host now supports Clear method to clear the cache.
- Fixed bug with loading custom logger and serializer from configuration file. It now actually works!
- Set cache client to use file logger by default. EventViewerLogger can still be used but people who ran the process without admin rights would experience a crash/error related to event logging.
- New GZipSerializer built-in and supported. It's a bit slower but saves on memory, so the choice is yours!
- Added SimplSockets as a Nuget package. SharpMemoryCache is also added as a Nuget package.
- New MemCache type, GZipMemCache, created. This zips all incoming data on the server side regardless of client serialization mechanisms. A little more computationally expensive but saves on memory and centralizes zipping logic. Can be enabled in host config.
- Config file cleanup (removal of unused nodes).
- Code cleanup (removal of unused usings etc.).
- All projects now outputing XML comments.
- Communication protocol bug fixes and clean-up to simplify.
- Fixed all solution warnings!
- Improved efficiency of Remove method of MemCache. Should be notably faster now (not that it wasn't fast before!).
- Documented configuration files a little more.
- New unit tests (need way more)
- SPECIAL THANKS TO THE MAJOR CONTRIBUTORS TO THIS BUILD: mmajcica and aweber1 - you rock! :)
INSTALLATION INSTRUCTIONS
Client
The Dache Client is a single DLL which you include in any application which you wish to be able
to talk to Dache from. Add it as a reference and begin coding. There is an included XML file so
that Intellisense will show you method and type information. An example configuration file named
Client.Example.config
is also included to show you how to configure your application.
NOTE: all clients should be configured with the same list of servers. The list of servers does
not have to be in the same order, but each client's list should contain the same servers.
Supported built-in custom Loggers and Serializers:
Dache.Client.Serialization.BinarySerializer, Dache.Client
Dache.Client.Serialization.GZipSerializer, Dache.Client
Dache.Core.Logging.EventViewerLogger, Dache.Core
Dache.Core.Logging.FileLogger, Dache.Core
Host
The host is the actual process that does the caching work. To install it, run install.bat
or
install it manually via .NET 4.0's installutil
from a command prompt:
C:\Windows\Microsoft.NET\Framework\v4.0.30319>installutil "C:\Path\To\Dache.CacheHost.exe"
You will be offered custom installation settings at this time, including the ability to rename the
service if you want to install multiple Dache hosts on a single server under unique names.
After installation, open the Dache.CacheHost.exe.config
file and configure the appropriate
settings. The configuration file is fully XML commented.
To uninstall, run uninstall.bat
or uninstall it manually via .NET 4.0's installutil
from a command prompt:
C:\Windows\Microsoft.NET\Framework\v4.0.30319>installutil /u "C:\Path\To\Dache.CacheHost.exe"
Supported built-in custom MemCaches and Serializers:
Dache.CacheHost.Storage.MemCache, Dache.CacheHost
Dache.CacheHost.Storage.GZipMemCache, Dache.CacheHost
Dache.Core.Logging.EventViewerLogger, Dache.Core
Dache.Core.Logging.FileLogger, Dache.Core
Board
Not yet completed. Feel free to contribute! :)
Dache 1.2.3
DACHE 1.2.3
distributed caching for .net applications
fast, scalable distributed caching with meaningful performance metrics for your managers and a simple api for your development team
EMAIL: [email protected]
VERSION HISTORY
1.2.3
- Changed SimplSockets so that it binds to IpAddress.Any to enable listening on all interfaces for a given port. This should resolve some communication issues when a server has multiple NICs or interfaces.
- Fixed a bug in SimplSockets regarding calculation of message length (thanks to Christoph Martens for identifying and reporting the bug)
1.2.2
- Fixed issue in how SimplSockets assigned listening IP for Cache Host
- Fixed issue with Customer Performance Counters that was causing a crash on startup for some servers and users
1.2.1
- Fixed issue with infinite hang on startup if not all listed cache hosts were online
- Upgraded SimplSockets to 1.1.0 which introduces many fixes to Dache socket communication.
- Client threads will no longer hang when a cache host is disconnected.
- These fixes resolve #2 - special thanks to Ruslan (https://github.com/ruzhovt) for discovering and documenting the source of these errors.
- Fixed bug in cache client host orders when disconnect/reconnect occurs. This ensures that all cache clients have the same host order, so that cached items are distributed properly.
1.2.0
- This release is MASSIVE and AWESOME! :)
- Created and implemented SimplSockets, a library designed for extremely efficient socket communication. As a result, WCF has been removed entirely. The client side uses multiplexing on a single connection. Throughput to Dache has nearly tripled: I could not max out a single cache server with 2 of my computers doing roughly 100,000 commands per second each! http://www.github.com/ironyx/simplsockets if you'd like to learn more.
- Dache now operates on a TCP syntax that is platform independent. This means that people can use Dache from non-.NET applications if they choose to write a native client that employs the commands. In the commands, all objects are passed as base-64 strings. The commands are:
get cacheKey1 cacheKey2 cacheKey3 cacheKey4...
get-tag tagName
set cacheKey1 serializedObject1 cacheKey2 serializedObject2
set absoluteExpiration cacheKey1 serializedObject1 cacheKey2 serializedObject2
set slidingExpiration cacheKey1 serializedObject1 cacheKey2 serializedObject2
set-intern cacheKey1 serializedObject1 cacheKey2 serializedObject2
set-tag tagName cacheKey1 serializedObject1 cacheKey2 serializedObject2
set-tag tagName absoluteExpiration cacheKey1 serializedObject1 cacheKey2 serializedObject2
set-tag tagName slidingExpiration cacheKey1 serializedObject1 cacheKey2 serializedObject2
set-tag-intern tagName cacheKey1 serializedObject1 cacheKey2 serializedObject2
del cacheKey1 cacheKey2 cacheKey3 cacheKey4...
del-tag tagName1 tagName2 tagName3 tagName4...
- Created local caching that allows for a "turbo" of sorts. The objects cached locally will not be kept in sync with the cache hosts, however this is a great option for "reference data" that never changes. By using local caching, there is no repeated trip over the wire for static data.
- Added runnable performance tests that can be executed to test Dache throughput locally or remotely.
- Improved efficiency of initial client connection to cache host.
- Removed static Container classes which were not very OO; they have been replaced with proper inversion of control.
- Created initial unit tests; will add to them as development continues in the future
- Cleaned up various classes and updated XML comments
- Renamed methods on client contract. Unfortunately this is a breaking change however the client commands are now overloaded and much more intuitive to use.
1.1.2
- Further testing proved that interning everything was quite troublesome, so interning has been changed. Interning methods are now exposed on the client-server contract and are opt-in only. Interned objects cannot expire or be evicted - they must be removed manually when appropriate.
- Updated client contract with IEnumerable to be more flexible than the previous ICollection
- Modified the comments of the client to be clearer
- Preparing for unit and performance testing, which is definitely needed
1.1.1
- Intelligent interning of all objects stored in cache. This results in a > 40% memory use reduction for repeatedly cached objects at a performance hit of roughly 0.2% - a good trade!
- Removed erroneous TODO.txt reference in Dache.CacheHost project
- Updated uninstall.bat output (it said it was installing when it was actually uninstalling)
- Updated TODO.txt with tasks that need to get done soon
1.1.0
- Removal of cache manager entirely as it was not necessary
- Simplification of solution as a whole; consolidation of assemblies
- More efficent tagging and bulk API operations
- Order of listed cache hosts in client config no longer matters
- Added install.bat and uninstall.bat for easy installation and uninstallation
1.0.0
- Initial release of Dache
- Includes cache manager, cache host, and client.
- Some Dache Board work completed: needs more work in future.
- Custom performance counters.
INSTALLATION INSTRUCTIONS
Client
The Dache Client is a single DLL which you include in any application which you wish to be able
to talk to Dache from. Add it as a reference and begin coding. There is an included XML file so
that Intellisense will show you method and type information. An example configuration file named
Client.Example.config
is also included to show you how to configure your application.
NOTE: all clients should be configured with the same list of servers. The list of servers does
not have to be in the same order, but each client's list should contain the same servers.
Host
The host is the actual process that does the caching work. To install it, run install.bat
or
install it manually via .NET 4.0's installutil
from a command prompt:
C:\Windows\Microsoft.NET\Framework\v4.0.30319>installutil "C:\Path\To\Dache.CacheHost.exe"
You will be offered custom installation settings at this time, including the ability to rename the
service if you want to install multiple Dache hosts on a single server under unique names.
After installation, open the Dache.CacheHost.exe.config
file and configure the appropriate
settings. The configuration file is fully XML commented.
To uninstall, run uninstall.bat
or uninstall it manually via .NET 4.0's installutil
from a command prompt:
C:\Windows\Microsoft.NET\Framework\v4.0.30319>installutil /u "C:\Path\To\Dache.CacheHost.exe"
Board
Not yet completed. Feel free to contribute! :)
Dache 1.2.2
DACHE 1.2.2
distributed caching for .net applications
fast, scalable distributed caching with meaningful performance metrics for your managers and a simple api for your development team
EMAIL: [email protected]
VERSION HISTORY
1.2.2
- Fixed issue in how SimplSockets assigned listening IP for Cache Host
- Fixed issue with Customer Performance Counters that was causing a crash on startup for some servers and users
1.2.1
- Fixed issue with infinite hang on startup if not all listed cache hosts were online
- Upgraded SimplSockets to 1.1.0 which introduces many fixes to Dache socket communication.
- Client threads will no longer hang when a cache host is disconnected.
- These fixes resolve #2 - special thanks to Ruslan (https://github.com/ruzhovt) for discovering and documenting the source of these errors.
- Fixed bug in cache client host orders when disconnect/reconnect occurs. This ensures that all cache clients have the same host order, so that cached items are distributed properly.
1.2.0
- This release is MASSIVE and AWESOME! :)
- Created and implemented SimplSockets, a library designed for extremely efficient socket communication. As a result, WCF has been removed entirely. The client side uses multiplexing on a single connection. Throughput to Dache has nearly tripled: I could not max out a single cache server with 2 of my computers doing roughly 100,000 commands per second each! http://www.github.com/ironyx/simplsockets if you'd like to learn more.
- Dache now operates on a TCP syntax that is platform independent. This means that people can use Dache from non-.NET applications if they choose to write a native client that employs the commands. In the commands, all objects are passed as base-64 strings. The commands are:
get cacheKey1 cacheKey2 cacheKey3 cacheKey4...
get-tag tagName
set cacheKey1 serializedObject1 cacheKey2 serializedObject2
set absoluteExpiration cacheKey1 serializedObject1 cacheKey2 serializedObject2
set slidingExpiration cacheKey1 serializedObject1 cacheKey2 serializedObject2
set-intern cacheKey1 serializedObject1 cacheKey2 serializedObject2
set-tag tagName cacheKey1 serializedObject1 cacheKey2 serializedObject2
set-tag tagName absoluteExpiration cacheKey1 serializedObject1 cacheKey2 serializedObject2
set-tag tagName slidingExpiration cacheKey1 serializedObject1 cacheKey2 serializedObject2
set-tag-intern tagName cacheKey1 serializedObject1 cacheKey2 serializedObject2
del cacheKey1 cacheKey2 cacheKey3 cacheKey4...
del-tag tagName1 tagName2 tagName3 tagName4...
- Created local caching that allows for a "turbo" of sorts. The objects cached locally will not be kept in sync with the cache hosts, however this is a great option for "reference data" that never changes. By using local caching, there is no repeated trip over the wire for static data.
- Added runnable performance tests that can be executed to test Dache throughput locally or remotely.
- Improved efficiency of initial client connection to cache host.
- Removed static Container classes which were not very OO; they have been replaced with proper inversion of control.
- Created initial unit tests; will add to them as development continues in the future
- Cleaned up various classes and updated XML comments
- Renamed methods on client contract. Unfortunately this is a breaking change however the client commands are now overloaded and much more intuitive to use.
1.1.2
- Further testing proved that interning everything was quite troublesome, so interning has been changed. Interning methods are now exposed on the client-server contract and are opt-in only. Interned objects cannot expire or be evicted - they must be removed manually when appropriate.
- Updated client contract with IEnumerable to be more flexible than the previous ICollection
- Modified the comments of the client to be clearer
- Preparing for unit and performance testing, which is definitely needed
1.1.1
- Intelligent interning of all objects stored in cache. This results in a > 40% memory use reduction for repeatedly cached objects at a performance hit of roughly 0.2% - a good trade!
- Removed erroneous TODO.txt reference in Dache.CacheHost project
- Updated uninstall.bat output (it said it was installing when it was actually uninstalling)
- Updated TODO.txt with tasks that need to get done soon
1.1.0
- Removal of cache manager entirely as it was not necessary
- Simplification of solution as a whole; consolidation of assemblies
- More efficent tagging and bulk API operations
- Order of listed cache hosts in client config no longer matters
- Added install.bat and uninstall.bat for easy installation and uninstallation
1.0.0
- Initial release of Dache
- Includes cache manager, cache host, and client.
- Some Dache Board work completed: needs more work in future.
- Custom performance counters.
INSTALLATION INSTRUCTIONS
Client
The Dache Client is a single DLL which you include in any application which you wish to be able
to talk to Dache from. Add it as a reference and begin coding. There is an included XML file so
that Intellisense will show you method and type information. An example configuration file named
Client.Example.config
is also included to show you how to configure your application.
NOTE: all clients should be configured with the same list of servers. The list of servers does
not have to be in the same order, but each client's list should contain the same servers.
Host
The host is the actual process that does the caching work. To install it, run install.bat
or
install it manually via .NET 4.0's installutil
from a command prompt:
C:\Windows\Microsoft.NET\Framework\v4.0.30319>installutil "C:\Path\To\Dache.CacheHost.exe"
You will be offered custom installation settings at this time, including the ability to rename the
service if you want to install multiple Dache hosts on a single server under unique names.
After installation, open the Dache.CacheHost.exe.config
file and configure the appropriate
settings. The configuration file is fully XML commented.
To uninstall, run uninstall.bat
or uninstall it manually via .NET 4.0's installutil
from a command prompt:
C:\Windows\Microsoft.NET\Framework\v4.0.30319>installutil /u "C:\Path\To\Dache.CacheHost.exe"
Board
Not yet completed. Feel free to contribute! :)