Jednym z ostatnich moich zadań, było przygotowanie statusów użytkowników, które będą określały czy dany użytkownik jest online, czy też nie.
Projekt, w którym to realizuje korzysta z cachowania przy pomocy Redis'a, o którym pisałam we wcześniejszym poście. Funkcje są funkcjami wcześniej omawianymi z klasy RedisCache.
Z uwagi na to, że sesja również przechowywana jest w Redisie, korzystam w moim projekcie .NET z własnego provider'a sesji. Na początku myślałam, że będę mogła dodawać identyfikatory użytkowników do listy w cache'u przy logowaniu lub w zdarzeniu Session_Start w Global.asax i usuwać przy wylogowaniu bądź przy wywołaniu zdarzenia Session_End. Niestety, przy korzystaniu z własnego provider'a sesji zdarzenie Session_End nie będzie nigdy wywoływane.
Tak więc zrobiłam to inaczej, każdy użytkownik będzie przechowywany w redisie jako osobny klucz z wartością "1" jeśli jest dostępny. Klucz ten będzie dodawany bądź aktualizowany przy logowaniu i w każdym kontrolerze widoków projektu. Natomiast czas wygaśnięcia klucza zostanie ustawiony na 10 minut.
public static void DodajUzytkownikaOnline(string id)
{
string klucz = String.Format("online-{0}", id);
RedisCacheProvider.RedisCache.Set<string>(klucz, "1", DateTime.Now.AddMinutes(10));
}
public static void UsunUzytkownikaOnline(string id)
{
string klucz = String.Format("online-{0}", id);
RedisCacheProvider.RedisCache.Remove(klucz);
}
public static bool CzyOnline(string id)
{
string klucz = String.Format("online-{0}", id);
string status = RedisCacheProvider.RedisCache.Get<string>(klucz);
if (status == "1")
return true;
else
return false;
}
Brak komentarzy:
Prześlij komentarz