Class SqliteBlobCache
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
Constructors
SqliteBlobCache(SQLiteConnectionString, ISerializer, IScheduler?)
Initializes a new instance of the SqliteBlobCache class.
public SqliteBlobCache(SQLiteConnectionString connectionString, ISerializer serializer, IScheduler? scheduler = null)
Parameters
connectionStringSQLiteConnectionStringThe connection string.
serializerISerializerThe serializer.
schedulerISchedulerThe 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
fileNamestringThe database file name.
serializerISerializerThe serializer.
schedulerISchedulerThe scheduler.
storeDateTimeAsTicksboolSpecifies 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
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
databyte[]The byte data about to be written to disk.
schedulerISchedulerThe 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
isDisposingboolIf being called via the dispose method.
DisposeAsync()
public ValueTask DisposeAsync()
Returns
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
typeTypeThe 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
keysIEnumerable<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
keysIEnumerable<string>The keys to get the values for.
typeTypeThe 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
keystringThe 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
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
typeTypeThe 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
typeTypeThe 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
keysIEnumerable<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
keysIEnumerable<string>The keys to get the values for.
typeTypeThe 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
keystringThe 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
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
keyValuePairsIEnumerable<KeyValuePair<string, byte[]>>The key/value to insert.
absoluteExpirationDateTimeOffset?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
keyValuePairsIEnumerable<KeyValuePair<string, byte[]>>The key/value to insert.
typeTypeThe type.
absoluteExpirationDateTimeOffset?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
keystringThe key to use for the data.
databyte[]The data to save in the cache.
absoluteExpirationDateTimeOffset?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
keystringThe key to use for the data.
databyte[]The data to save in the cache.
typeTypeThe type.
absoluteExpirationDateTimeOffset?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
keysIEnumerable<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
keysIEnumerable<string>The keys to invalid.
typeTypeThe 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
keystringThe 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
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
typeTypeThe 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
keysIEnumerable<string>The keys of the cache entries to update.
absoluteExpirationDateTimeOffset?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
keysIEnumerable<string>The keys of the cache entries to update.
typeTypeThe type of the cached objects.
absoluteExpirationDateTimeOffset?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
keystringThe key of the cache entry to update.
absoluteExpirationDateTimeOffset?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
keystringThe key of the cache entry to update.
typeTypeThe type of the cached object.
absoluteExpirationDateTimeOffset?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.