List<T> on Cache (Security Operations)

I'm developing an web app using asp.net mvc.

I have a List in Cache (List of product class of my model). So, I do CRUD operations on this cached list. I know that HttpContext.Current.Cache is typeSafe but the list no. I'd like to know, what is the best way to do my operations to be thread safe to avoid conflicts ?

My code are something like this:

public static class ProjectCached {
    const string key = "ProductList";
    // my cached list
    public static IList<Product> Products {
       get {
           if (HttpContext.Current.Cache[key] == null) {
              HttpContext.Current.Cache.Insert(key, /* get data from database */, ...);
           }
           return (List<Product>)HttpContext.Current.Cache[key];
       }
    }
    // my methods (operations on cached list)
    public static void Increase(long id) {
        var item = Products.FirstOrDefault(x => x.Id == id);
        if (item != null) {
          item.Prince += 1;
          item.LastUpdate = DateTime.Now;
        }       
    }

    public static void Remove(long id) {
        var item = Products.FirstOrDefault(x => x.Id == id);
        if (item != null) {
            Products.Remove(item);
        }       
    }
    // others methods 

}

I will have a lot of users writing on this cached list at the same time...

I know that I can to use "lock" keyword but where need I to put this ? On my object finded? on my list?

thanks

Answers


Consider using IDictionary instead of list, for example SortedList<TKey, TValue> About safe-threading: You can look to using

  1. lock keyword

  2. ReaderWriterLockSlim - to lock only when needed

  3. ConcurrentDictionary<TKey, TValue> - if thread-safe implemented in it is enough for you.

UPD: ReaderWriterLockSlim is much more advanced than simple lock keyword. Using ReaderWriterLockSlim allows many readers to get data simultaneously without locks. But when some thread tries to write data, all other threads will be locked for and reading and writing.


Need Your Help

javascript jQuery variable scope

javascript jquery scope

Thanks in advance. I'm making a website for a service I run with my partner called Laughter Yoga Dublin. I've come across a problem that's got me stuck. It looks like lots of code below but my ques...

How to show JSP content based on user's access to URLs with Spring Security

java spring jsp spring-security

If you want to show content in JSP page based on user's access to one or more URLs, it is easy to do based on user's access to one URL:

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.