Я слышал о redis, но он слишком тяжел для моего проекта.Я решил сам написать некоторый объектный кеш, как показано ниже:
private List<Specification> _lsSpecification...// the object need cache, I will use R/W lock to protect it
Поскольку время чтения намного больше, чем запись, я не хочу блокировать код try-catch-finally каждый раз, когда мне нужно прочитать объект,как показано ниже:
try
{
RWLock.EnterReadLock();
// do anything about _lsSpecification
}
catch (Exception ex)
{
}
finally
{
RWLock.ExitReadLock();
}
Точно, что я хочу получить, это указанный объект «Спецификация» или весь список.Поэтому я кодирую метод, как показано ниже:
public Specifiction getSpecification(int id)
{
RWLock.EnterReadLock();
Specification specification = _lsSpecification.Find(c => c.ID == id).Clone;// assume a clone method is exist
RWLock.ExitReadLock();
return specification;
}
public List<Specification> getSpecifications()
{
RWLock.EnterReadLock();
List<Specification> lsAll = _lsSpecification.ToList();
RWLock.ExitReadLock();
return lsAll ;
}
Как показано выше, я вызываю эти методы для получения объекта, а затем использую его значение копирования, он должен быть безопасным.Но я все еще чувствую, что это пустая трата для копирования.Мне интересно знать, может ли redis возвращать объект или список, если это возможно, значение является копией или ссылкой?