using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Options;
|
using StackExchange.Redis;
|
using WIDESEAWCS_RedisService.Connection;
|
using WIDESEAWCS_RedisService.Options;
|
using WIDESEAWCS_RedisService.Serialization;
|
|
namespace WIDESEAWCS_RedisService.Storage
|
{
|
public class RedisObjectStorageService : IObjectStorageService
|
{
|
private readonly IRedisConnectionManager _connectionManager;
|
private readonly IRedisSerializer _serializer;
|
private readonly RedisOptions _options;
|
private readonly ILogger<RedisObjectStorageService> _logger;
|
|
public RedisObjectStorageService(
|
IRedisConnectionManager connectionManager,
|
IRedisSerializer serializer,
|
IOptions<RedisOptions> options,
|
ILogger<RedisObjectStorageService> logger)
|
{
|
_connectionManager = connectionManager;
|
_serializer = serializer;
|
_options = options.Value;
|
_logger = logger;
|
}
|
|
private string BuildKey(string key) => $"{_options.KeyPrefix}obj:{key}";
|
|
public bool SetObject<T>(string key, T value, TimeSpan? expiry = null) where T : class
|
{
|
var db = _connectionManager.GetDatabase();
|
var fullKey = BuildKey(key);
|
var json = _serializer.Serialize(value);
|
return db.StringSet(fullKey, json, expiry);
|
}
|
|
public T? GetObject<T>(string key) where T : class
|
{
|
var val = _connectionManager.GetDatabase().StringGet(BuildKey(key));
|
return val.IsNullOrEmpty ? default : _serializer.Deserialize<T>(val!);
|
}
|
|
public bool SetField(string key, string field, string value)
|
{
|
return _connectionManager.GetDatabase().HashSet(BuildKey(key), field, value);
|
}
|
|
public string? GetField(string key, string field)
|
{
|
var val = _connectionManager.GetDatabase().HashGet(BuildKey(key), field);
|
return val.IsNullOrEmpty ? null : val.ToString();
|
}
|
|
public bool Delete(string key)
|
{
|
return _connectionManager.GetDatabase().KeyDelete(BuildKey(key));
|
}
|
|
public bool DeleteField(string key, string field)
|
{
|
return _connectionManager.GetDatabase().HashDelete(BuildKey(key), field);
|
}
|
|
public bool Exists(string key)
|
{
|
return _connectionManager.GetDatabase().KeyExists(BuildKey(key));
|
}
|
}
|
}
|