@andy301086

Использовние Redis?

Всем привет, начал разбираться с редисом, прочел документацию и возникло пару вопросов:

Класс работы с редисом

public class RedisStore
{
private const string EmptyResultValue = "EmptyResult";

private static readonly Logger _logger = LogManager.GetCurrentClassLogger();

private static Lazy configOptions = new Lazy(() =>
{
var configOptions = new ConfigurationOptions();
configOptions.EndPoints.Add("localhost");
configOptions.ConnectTimeout = 100000;
configOptions.SyncTimeout = 100000;
configOptions.AbortOnConnectFail = false;
return configOptions;
});

private static Lazy connection
= new Lazy(
() => ConnectionMultiplexer.Connect(configOptions.Value));

private static ConnectionMultiplexer SafeConnection
{
get
{
return connection.Value;
}
}

#region Operations

///
/// Add item by key
///
///
///
///
///
public void AddItemByKey(string key, T item, TimeSpan? expiry = null)
{
try
{
var serializedItem = JSON.Serialize(item);

IDatabase db = SafeConnection.GetDatabase();

db.StringSetAsync(key, serializedItem, expiry);
}
catch (Exception ex)
{
_logger.ErrorException("Redis Exception: " + ex.Message, ex);
}
}

#endregion
}

Использование этого класса в контролере

public ActionResult Index()
{
RedisStore redis = new RedisStore();
redis.AddItemByKey("key1", "value1");

redis.AddItemByKey("key2", "value2");

ViewBag.Title = "Home Page";

return View();
}

Когда открыл консоль редиса то там указано что к редису подсоединено 3 клиента -
# Clients
connected_clients:3

Вопросы:
1. правильно ли работаю с редисом
2. почему на каждую операцию создается по соединению к редису (и эти соединения не закрываются пока не перезапустишь проект)
3. возможно нужно шарить редис на глобальном уровне приложения?

Заранее спасиьбо всем откликнувшимся
  • Вопрос задан
  • 406 просмотров
Пригласить эксперта
Ответы на вопрос 1
@denismaster
Вполне возможно, что следует обратить внимание на внедрение зависимостей, чтобы уберечь код от конструкций вида: new RedisStore();
А насчет соединений, то можно использовать Dispose-паттерн, а также конструкцию вида using (var store = new RedisStore()) { /*code*/ }
Тогда соединения должны закрываться автоматически.
Попробуйте найти в интернете примеры работы с редисом, в том же .NET Core уже были примеры сервисов на его основе.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы