Q:

List 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

A:

Consider using IDictionary instead of list, for example SortedList<TKey, TValue>

About safe-threading: You can look to using 

lock keyword
ReaderWriterLockSlim - to lock only when needed
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.   

