Table of Contents

Class SqliteBlobCache

Namespace
Akavache.Sqlite3
Assembly
Akavache.Sqlite3.dll

Provides a SQLite-based implementation of IBlobCache for persistent data storage. This cache stores data in a SQLite database file for reliable persistence across application restarts.

[Preserve(AllMembers = true)]
public class SqliteBlobCache : IBlobCache, IDisposable, IAsyncDisposable
Inheritance
SqliteBlobCache
Implements
Extension Methods
WhenAnyMixin.WhenAny<TSender, TRet, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(TSender?, Expression<Func<TSender, T1>>, Expression<Func<TSender, T2>>, Expression<Func<TSender, T3>>, Expression<Func<TSender, T4>>, Expression<Func<TSender, T5>>, Expression<Func<TSender, T6>>, Expression<Func<TSender, T7>>, Expression<Func<TSender, T8>>, Expression<Func<TSender, T9>>, Expression<Func<TSender, T10>>, Expression<Func<TSender, T11>>, Expression<Func<TSender, T12>>, Func<IObservedChange<TSender, T1>, IObservedChange<TSender, T2>, IObservedChange<TSender, T3>, IObservedChange<TSender, T4>, IObservedChange<TSender, T5>, IObservedChange<TSender, T6>, IObservedChange<TSender, T7>, IObservedChange<TSender, T8>, IObservedChange<TSender, T9>, IObservedChange<TSender, T10>, IObservedChange<TSender, T11>, IObservedChange<TSender, T12>, TRet>)
WhenAnyMixin.WhenAny<TSender, TRet, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(TSender?, Expression<Func<TSender, T1>>, Expression<Func<TSender, T2>>, Expression<Func<TSender, T3>>, Expression<Func<TSender, T4>>, Expression<Func<TSender, T5>>, Expression<Func<TSender, T6>>, Expression<Func<TSender, T7>>, Expression<Func<TSender, T8>>, Expression<Func<TSender, T9>>, Expression<Func<TSender, T10>>, Expression<Func<TSender, T11>>, Expression<Func<TSender, T12>>, Func<IObservedChange<TSender, T1>, IObservedChange<TSender, T2>, IObservedChange<TSender, T3>, IObservedChange<TSender, T4>, IObservedChange<TSender, T5>, IObservedChange<TSender, T6>, IObservedChange<TSender, T7>, IObservedChange<TSender, T8>, IObservedChange<TSender, T9>, IObservedChange<TSender, T10>, IObservedChange<TSender, T11>, IObservedChange<TSender, T12>, TRet>, bool)

Constructors

SqliteBlobCache(SQLiteConnectionString, ISerializer, IScheduler?)

Initializes a new instance of the SqliteBlobCache class.

public SqliteBlobCache(SQLiteConnectionString connectionString, ISerializer serializer, IScheduler? scheduler = null)

Parameters

connectionString SQLiteConnectionString

The connection string.

serializer ISerializer

The serializer.

scheduler IScheduler

The scheduler.

SqliteBlobCache(string, ISerializer, IScheduler?, bool)

Initializes a new instance of the SqliteBlobCache class.

public SqliteBlobCache(string fileName, ISerializer serializer, IScheduler? scheduler = null, bool storeDateTimeAsTicks = true)

Parameters

fileName string

The database file name.

serializer ISerializer

The serializer.

scheduler IScheduler

The scheduler.

storeDateTimeAsTicks bool

Specifies whether to store DateTime properties as ticks (true) or strings (false). You absolutely do want to store them as Ticks in all new projects. The value of false is only here for backwards compatibility. There is a significant speed advantage, with no down sides, when setting storeDateTimeAsTicks = true. If you use DateTimeOffset properties, it will be always stored as ticks regardingless the storeDateTimeAsTicks parameter.

Properties

Connection

Gets the connection.

public SQLiteAsyncConnection Connection { get; }

Property Value

SQLiteAsyncConnection

ForcedDateTimeKind

Gets or sets the DateTimeKind handling for BSON readers to be forced.

public DateTimeKind? ForcedDateTimeKind { get; set; }

Property Value

DateTimeKind?

Remarks

By default, BsonReader uses a DateTimeKind of Local and see BsonWriter uses Utc. Thus, DateTimes are serialized as UTC but deserialized as local time. To force BSON readers to use some other DateTimeKind, you can set this value.

HttpService

Gets or sets the HTTP service.

public IHttpService HttpService { get; set; }

Property Value

IHttpService

The HTTP service.

Scheduler

Gets the IScheduler used to defer operations. By default, this is BlobCache.TaskpoolScheduler.

public IScheduler Scheduler { get; }

Property Value

IScheduler

Serializer

Gets the serializer.

public ISerializer Serializer { get; }

Property Value

ISerializer

The serializer.

Methods

BeforeWriteToDiskFilter(byte[], IScheduler)

This method is called immediately before writing any data to disk. Override this in encrypting data stores in order to encrypt the data.

protected virtual IObservable<byte[]> BeforeWriteToDiskFilter(byte[] data, IScheduler scheduler)

Parameters

data byte[]

The byte data about to be written to disk.

scheduler IScheduler

The scheduler to use if an operation has to be deferred. If the operation can be done immediately, use Observable.Return and ignore this parameter.

Returns

IObservable<byte[]>

A Future result representing the encrypted data.

Dispose()

public void Dispose()

Dispose(bool)

Disposes the object.

protected virtual void Dispose(bool isDisposing)

Parameters

isDisposing bool

If being called via the dispose method.

DisposeAsync()

public ValueTask DisposeAsync()

Returns

ValueTask

DisposeAsyncCore()

Disposes of the async resources.

protected virtual ValueTask DisposeAsyncCore()

Returns

ValueTask

The value task to monitor.

Flush()

This method guarantees that all in-flight inserts have completed and any indexes have been written to disk.

public IObservable<Unit> Flush()

Returns

IObservable<Unit>

A signal indicating when the flush is complete.

Flush(Type)

This method guarantees that all in-flight inserts have completed and any indexes have been written to disk.

public IObservable<Unit> Flush(Type type)

Parameters

type Type

The type.

Returns

IObservable<Unit>

A signal indicating when the flush is complete.

Get(IEnumerable<string>)

Gets a observable of key value pairs with the specified keys with their corresponding values.

public IObservable<KeyValuePair<string, byte[]>> Get(IEnumerable<string> keys)

Parameters

keys IEnumerable<string>

The keys to get the values for.

Returns

IObservable<KeyValuePair<string, byte[]>>

A observable with the specified values.

Get(IEnumerable<string>, Type)

Gets a observable of key value pairs with the specified keys with their corresponding values.

public IObservable<KeyValuePair<string, byte[]>> Get(IEnumerable<string> keys, Type type)

Parameters

keys IEnumerable<string>

The keys to get the values for.

type Type

The type.

Returns

IObservable<KeyValuePair<string, byte[]>>

A observable with the specified values.

Get(string)

Retrieve a value from the key-value cache. If the key is not in the cache, this method should return an IObservable which OnError's with KeyNotFoundException.

public IObservable<byte[]?> Get(string key)

Parameters

key string

The key to return asynchronously.

Returns

IObservable<byte[]>

A Future result representing the byte data.

Get(string, Type)

Retrieve a value from the key-value cache. If the key is not in the cache, this method should return an IObservable which OnError's with KeyNotFoundException.

public IObservable<byte[]> Get(string key, Type type)

Parameters

key string

The key to return asynchronously.

type Type

The type.

Returns

IObservable<byte[]>

A Future result representing the byte data.

GetAll(Type)

Gets a observable of key value pairs with the specified keys with their corresponding values.

public IObservable<KeyValuePair<string, byte[]>> GetAll(Type type)

Parameters

type Type

The type.

Returns

IObservable<KeyValuePair<string, byte[]>>

A observable with the specified values.

GetAllKeys()

Return all keys in the cache. Note that this method is normally for diagnostic / testing purposes, and that it is not guaranteed to be accurate with respect to in-flight requests.

public IObservable<string> GetAllKeys()

Returns

IObservable<string>

A list of valid keys for the cache.

GetAllKeys(Type)

Return all keys in the cache. Note that this method is normally for diagnostic / testing purposes, and that it is not guaranteed to be accurate with respect to in-flight requests.

public IObservable<string> GetAllKeys(Type type)

Parameters

type Type

The type.

Returns

IObservable<string>

A list of valid keys for the cache.

GetCreatedAt(IEnumerable<string>)

Gets a observable of key value pairs with the specified keys with their corresponding created DateTimeOffset if it's available.

public IObservable<(string Key, DateTimeOffset? Time)> GetCreatedAt(IEnumerable<string> keys)

Parameters

keys IEnumerable<string>

The keys to get the values for.

Returns

IObservable<(string Key, DateTimeOffset? Time)>

A observable with the specified values.

GetCreatedAt(IEnumerable<string>, Type)

Gets a observable of key value pairs with the specified keys with their corresponding created DateTimeOffset if it's available.

public IObservable<(string Key, DateTimeOffset? Time)> GetCreatedAt(IEnumerable<string> keys, Type type)

Parameters

keys IEnumerable<string>

The keys to get the values for.

type Type

The type.

Returns

IObservable<(string Key, DateTimeOffset? Time)>

A observable with the specified values.

GetCreatedAt(string)

Returns the time that the key was added to the cache, or returns null if the key isn't in the cache.

public IObservable<DateTimeOffset?> GetCreatedAt(string key)

Parameters

key string

The key to return the date for.

Returns

IObservable<DateTimeOffset?>

The date the key was created on.

GetCreatedAt(string, Type)

Returns the time that the key was added to the cache, or returns null if the key isn't in the cache.

public IObservable<DateTimeOffset?> GetCreatedAt(string key, Type type)

Parameters

key string

The key to return the date for.

type Type

The type.

Returns

IObservable<DateTimeOffset?>

The date the key was created on.

Insert(IEnumerable<KeyValuePair<string, byte[]>>, DateTimeOffset?)

Inserts the specified key/value pairs into the blob.

public IObservable<Unit> Insert(IEnumerable<KeyValuePair<string, byte[]>> keyValuePairs, DateTimeOffset? absoluteExpiration = null)

Parameters

keyValuePairs IEnumerable<KeyValuePair<string, byte[]>>

The key/value to insert.

absoluteExpiration DateTimeOffset?

An optional expiration date.

Returns

IObservable<Unit>

A observable which signals when complete.

Insert(IEnumerable<KeyValuePair<string, byte[]>>, Type, DateTimeOffset?)

Inserts the specified key/value pairs into the blob.

public IObservable<Unit> Insert(IEnumerable<KeyValuePair<string, byte[]>> keyValuePairs, Type type, DateTimeOffset? absoluteExpiration = null)

Parameters

keyValuePairs IEnumerable<KeyValuePair<string, byte[]>>

The key/value to insert.

type Type

The type.

absoluteExpiration DateTimeOffset?

An optional expiration date.

Returns

IObservable<Unit>

A observable which signals when complete.

Insert(string, byte[], DateTimeOffset?)

Insert a blob into the cache with the specified key and expiration date.

public IObservable<Unit> Insert(string key, byte[] data, DateTimeOffset? absoluteExpiration = null)

Parameters

key string

The key to use for the data.

data byte[]

The data to save in the cache.

absoluteExpiration DateTimeOffset?

An optional expiration date. After the specified date, the key-value pair should be removed.

Returns

IObservable<Unit>

A signal to indicate when the key has been inserted.

Insert(string, byte[], Type, DateTimeOffset?)

Insert a blob into the cache with the specified key and expiration date.

public IObservable<Unit> Insert(string key, byte[] data, Type type, DateTimeOffset? absoluteExpiration = null)

Parameters

key string

The key to use for the data.

data byte[]

The data to save in the cache.

type Type

The type.

absoluteExpiration DateTimeOffset?

An optional expiration date. After the specified date, the key-value pair should be removed.

Returns

IObservable<Unit>

A signal to indicate when the key has been inserted.

Invalidate(IEnumerable<string>)

Invalidates all the entries at the specified keys, causing them in future to have to be re-fetched.

public IObservable<Unit> Invalidate(IEnumerable<string> keys)

Parameters

keys IEnumerable<string>

The keys to invalid.

Returns

IObservable<Unit>

A observable which signals when complete.

Invalidate(IEnumerable<string>, Type)

Invalidates all the entries at the specified keys, causing them in future to have to be re-fetched.

public IObservable<Unit> Invalidate(IEnumerable<string> keys, Type type)

Parameters

keys IEnumerable<string>

The keys to invalid.

type Type

The type to invalidate.

Returns

IObservable<Unit>

A observable which signals when complete.

Invalidate(string)

Remove a key from the cache. If the key doesn't exist, this method should do nothing and return (not throw KeyNotFoundException).

public IObservable<Unit> Invalidate(string key)

Parameters

key string

The key to remove from the cache.

Returns

IObservable<Unit>

A signal indicating when the invalidate is complete.

Invalidate(string, Type)

Remove a key from the cache. If the key doesn't exist, this method should do nothing and return (not throw KeyNotFoundException).

public IObservable<Unit> Invalidate(string key, Type type)

Parameters

key string

The key to remove from the cache.

type Type

The type.

Returns

IObservable<Unit>

A signal indicating when the invalidate is complete.

InvalidateAll()

Invalidate all entries in the cache (i.e. clear it). Note that this method is blocking and incurs a significant performance penalty if used while the cache is being used on other threads.

public IObservable<Unit> InvalidateAll()

Returns

IObservable<Unit>

A signal indicating when the invalidate is complete.

InvalidateAll(Type)

Invalidates all entries for the specified type.

public IObservable<Unit> InvalidateAll(Type type)

Parameters

type Type

The type to invalidate.

Returns

IObservable<Unit>

A signal indicating when the invalidate is complete.

UpdateExpiration(IEnumerable<string>, DateTimeOffset?)

Updates the expiration date for multiple existing cache entries without reading or writing the cached data. This is useful when a server returns a NotModified response and you want to extend the cache expiration.

public IObservable<Unit> UpdateExpiration(IEnumerable<string> keys, DateTimeOffset? absoluteExpiration)

Parameters

keys IEnumerable<string>

The keys of the cache entries to update.

absoluteExpiration DateTimeOffset?

The new expiration date. Pass null for no expiration.

Returns

IObservable<Unit>

A signal indicating when the operation is complete.

UpdateExpiration(IEnumerable<string>, Type, DateTimeOffset?)

Updates the expiration date for multiple existing cache entries without reading or writing the cached data. This is useful when a server returns a NotModified response and you want to extend the cache expiration.

public IObservable<Unit> UpdateExpiration(IEnumerable<string> keys, Type type, DateTimeOffset? absoluteExpiration)

Parameters

keys IEnumerable<string>

The keys of the cache entries to update.

type Type

The type of the cached objects.

absoluteExpiration DateTimeOffset?

The new expiration date. Pass null for no expiration.

Returns

IObservable<Unit>

A signal indicating when the operation is complete.

UpdateExpiration(string, DateTimeOffset?)

Updates the expiration date for an existing cache entry without reading or writing the cached data. This is useful when a server returns a NotModified response and you want to extend the cache expiration.

public IObservable<Unit> UpdateExpiration(string key, DateTimeOffset? absoluteExpiration)

Parameters

key string

The key of the cache entry to update.

absoluteExpiration DateTimeOffset?

The new expiration date. Pass null for no expiration.

Returns

IObservable<Unit>

A signal indicating when the operation is complete.

UpdateExpiration(string, Type, DateTimeOffset?)

Updates the expiration date for an existing cache entry without reading or writing the cached data. This is useful when a server returns a NotModified response and you want to extend the cache expiration.

public IObservable<Unit> UpdateExpiration(string key, Type type, DateTimeOffset? absoluteExpiration)

Parameters

key string

The key of the cache entry to update.

type Type

The type of the cached object.

absoluteExpiration DateTimeOffset?

The new expiration date. Pass null for no expiration.

Returns

IObservable<Unit>

A signal indicating when the operation is complete.

Vacuum()

This method eagerly removes all expired keys from the blob cache, as well as does any cleanup operations that makes sense (Hint: on SQLite3 it does a Vacuum).

public IObservable<Unit> Vacuum()

Returns

IObservable<Unit>

A signal indicating when the operation is complete.