An asynchronous, persistent key-value store created for writing desktop and mobile applications, based on SQLite3. Akavache is great for both storing important data as well as cached local data that expires.
MIT License
Bot releases are hidden (Show)
Published by ghuntley almost 8 years ago
As part of this release we had 14 issues closed.
Breaking changes
Feature
Bugs
Improvements
Documentation
You can download this release from nuget.org
Published by anaisbetts almost 9 years ago
Published by anaisbetts almost 9 years ago
Published by anaisbetts almost 10 years ago
Akavache now supports the Xamarin Unified profile for iOS and Mac - if you use the Migration tool, it is highly advised to remove and re-add the Akavache packages manually.
Published by anaisbetts almost 10 years ago
Published by anaisbetts about 10 years ago
GetCreatedAt
to return correct times (#177, thanks @niik)Published by anaisbetts about 10 years ago
Published by anaisbetts about 10 years ago
Published by anaisbetts about 10 years ago
After 8 months of work and 424 commits from 7 authors, Akavache 4.0 is now released! Thanks to the contributors for this release:
In particular, a huge thanks goes to Johan, who migrated the SQLite-based backend to Eric Sink's SQLitePcl.Raw - a ton of work!
Akavache 4.0 now supports a native SQLite on all platforms, as well as including support for new platforms:
Akavache is also much smaller, because it no longer depends on ReactiveUI, instead depending on a much smaller library called Splat. Akavache also has now moved to the latest version of the Reactive Extensions, v2.2.5.
The SQLite driver has been completely rewritten in Akavache 4.0 for performance, especially when used by multiple threads at the same time. Synthetic benchmarks on the new SQLite backend show that it is 8x faster at reading random data, and a whopping 82x faster than the previous version at writing random data.
This improvement was done without any on-disk metadata changes - existing SQLite databases are immediately compatible. This new driver also completely resolves the "locking" issues that people would see when executing many operations in parallel.
Akavache now allows applications to explicitly schedule cleanup of the underlying database, via a new Vacuum
API. This will drop all expired keys from the database, as well as its name implies, execute a VACUUM
operation on SQLite to compact the database.
Akavache.Deprecated
NuGet package. You should plan to move away from this backend and into the SQLite-based backend in your next release.GetAllKeys
is now an asynchronous operation.TestBlobCache
is now called InMemoryBlobCache
Published by anaisbetts almost 11 years ago
Starting with this release, Akavache Core is now always just Akavache.dll
. Instead of a separate Akavache.Portable.dll
that you include into every build, there is now a portable version of Akavache.dll
. Link to the portable version in your PLibs and the platform versions in your apps.
Published by anaisbetts almost 11 years ago
Bug Fixes:
Published by anaisbetts about 11 years ago
BlobCache now supports overloads and new methods to add / get / invalidate multiple objects in the same API call. Previously if you wanted to insert many objects into the cache at the same time, it could be potentially very expensive / wasteful. Check out #79 for the details. For example:
var interestingKeys = await BlobCache.UserAccount.GetObjectsAsync<string>(new[] { "Foo", "Bar", "Baz", });
interestingKeys["Foo"]
>>> It worked!
Akavache now correctly parallelizes connections to SQLite as well as fixes some threading errors that you might have been seeing (#66).
Our version of @praeclarum's SQLite3 bindings were exposed as public classes, which conflicted with the official versions, this release makes them internal (#72).
Akavache is now built against the official Xamarin Rx binaries. This means that on MonoMac, you need to be up-to-date on the latest Mono install.
Published by anaisbetts about 11 years ago
Published by anaisbetts over 11 years ago
Akavache 3.0 is now released! A special thanks to @onovotny for his huge contribution to PLib support in this release.
Akavache 3.0 can now be used with Portable Libraries, including handling images and downloading URLs, via the Splat helper library. This means that with Akavache, nearly all of your serialization and network access layer can be cross-platform.
Just like in ReactiveUI 5.0, Akavache now has a much cleaner initialization setup, which is also reliant on RxUI 5.0's RxApp.DependencyResolver
. Many libraries now initialize themselves automatically if possible (on iOS / Cocoa), and other platforms now only require you to set BlobCache.ApplicationName
.
Note that for this release, .NET 4.0-based platforms such as Silverlight and WP7 are no longer supported. Bug fixes will still be ported to the Akavache 2.x series when appropriate, you can use the NuGet Package Console to configure your app to only download 2.x updates. Here are the officially supported platforms:
Published by anaisbetts over 11 years ago
Published by anaisbetts over 11 years ago
Bugfix release, fixes problem with using BlobCache.Secure
Published by anaisbetts over 11 years ago
BlobCache.LocalMachine
et al.await
all calls to BlobCache, no more sloppy coding!ApplicationName
is automatically configured to be your Bundle ID, no need to set it by-hand.GetOrFetchObject
with an expiration wouldn't work.Published by anaisbetts over 11 years ago
Now all object invalidation methods (like InvalidateObject
, InvalidateAllObjects
, etc) return IObservable<Unit>
so you can await
them
Akavache now has an easy way to shut itself down. Make sure to run this on app shutdown:
BlobCache.Shutdown().Wait()
Or if you're on WinRT:
var deferral = e.SuspendingOperation.GetDeferral();
await BlobCache.Shutdown();
deferral.Complete()
Published by anaisbetts over 11 years ago
Consider the following piece of code:
BlobCache.UserAccount.Invalidate("TheKey");
BlobCache.UserAccount.InsertObject("TheKey", new MyAwesomeKey());
This code is technically incorrect, yet will often appear to work correctly depending on the backing BlobCache. The reason is, that the invalidate and Insert happen concurrently, meaning it is possible for the Insert to succeed, then the Invalidate to remove the new key (never mind that it isn't necessary to actually Invalidate before Insert). To fix this, in Akavache 2.6.0, operations done to the same key are guaranteed to happen in order.
Disposing a BlobCache is asynchronous, yet the Dispose
method call has no way to signal when it is complete. A new Shutdown
Observable exists to facilitate this. So, to flush the blob cache properly, now run:
BlobCache.UserAccount.Dispose();
BlobCache.UserAccount.Shutdown.Wait();