.Net網站架構設計(四) 緩存技術


.Net網站架構設計(三) 緩存

在.Net framework 下面有很多緩存參考

使用Asp.Net緩存;

使用Remoting Singleton緩存;

使用內存映射文件;

使用SQL Server緩存;

使用靜態變量緩存;

使用Asp.net 會話狀態(Session State);

使用Asp.net客戶端緩存和狀態;

使用Internet Explorer緩存。

有關他們的使用請參考 .net 緩存方案


而我今天要介紹的互聯網下面的Redis緩存。

一、用Redis 共享IIs 集群的 Session信息。

IIs 集群 Session 會話這么保存?

當然你可以采用傳統的方式,讓其保存在SateManager服務器,或者緩存到數據中。

用戶Cookie 把Session key 保存起來,把SessionKey 做為 Redis  存儲的Key ,LoginUserInfo 作為登錄用戶的value;

多個IIS 集群 調用 Redis 集群。獲取用戶信息。

詳細參考NET下Session共享的幾種實現方式
v一下是筆者寫的MVC 下面 Redis key 的緩存

using Liming.BaseSystem.Model;
using Liming.Cache;
using NServiceKit.Redis;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Liming.Web.Comm
{
public class RedisHelper
{
public static string Host = "127.0.0.1";
public const string COOKIE_KEY = "LoginInfoSessionKey";
public LoginUserInfo GetLoginUser(HttpRequestBase Request)
{
if (Request != null && Request.Cookies.Get(COOKIE_KEY) != null)
{
String SessionKeyValue = Request.Cookies.Get(COOKIE_KEY).Value;

using (RedisClient redisClient = new RedisClient(Host))
{
LoginUserInfo ulr = redisClient.Get<LoginUserInfo>(SessionKeyValue);
return ulr;
}
}
else
{
return null;
}
}

public LoginUserInfo GetLoginUser(string LoginInfoSessionKey)
{
if(LoginInfoSessionKey.Trim()=="")
{
return null;
}
using (RedisClient redisClient = new RedisClient(Host))
{
LoginUserInfo ulr = redisClient.Get<LoginUserInfo>(LoginInfoSessionKey.Trim());
return ulr;
}
}

public void LoginUserInfoRemove(HttpContextBase Context)
{
HttpCookie cookie = new HttpCookie(COOKIE_KEY,"");
Context.Response.Cookies.Set(cookie);
//Context.Response.Cookies.Remove(COOKIE_KEY);
}
public string RegistUser(HttpContextBase Context, LoginUserInfo ulr)
{
string SessionKeyValue = "";
HttpCookie cookie = new HttpCookie(COOKIE_KEY, SessionKeyValue);
if (Context.Request.Cookies.Get(COOKIE_KEY) != null)
{
SessionKeyValue = Context.Request.Cookies.Get(COOKIE_KEY).Value;
if (SessionKeyValue.Trim() == "")
{
SessionKeyValue = Guid.NewGuid().ToString() + "_" + DateTime.Now.ToString("yyyy-MM-dd"); ;

}
using (RedisClient redisClient = new RedisClient(Host))
{
ulr.LoginInfoSessionKey = SessionKeyValue;
cookie = new HttpCookie(COOKIE_KEY, SessionKeyValue);
redisClient.Set<LoginUserInfo>(SessionKeyValue, ulr, DateTime.Now.AddDays(7));//7天后過期
}
}
else
{
SessionKeyValue = Guid.NewGuid().ToString() + "_" + DateTime.Now.ToString("yyyy-MM-dd"); ;
using (RedisClient redisClient = new RedisClient(Host))
{
ulr.LoginInfoSessionKey = SessionKeyValue;
cookie = new HttpCookie(COOKIE_KEY, SessionKeyValue);
redisClient.Set<LoginUserInfo>(SessionKeyValue, ulr, DateTime.Now.AddDays(7));//7天后過期
}
}
Context.Response.Cookies.Add(cookie);
return SessionKeyValue;
}
/// <summary>
/// 保存登陸用戶信息到redisServer
/// </summary>
/// <param name="ulr"></param>
public void SaveLoginUser(<pre name="code" class="csharp">public class LoginUserInfo
{
public string UserID {get;set;}
public string UserName{get;set;}


}

ulr) { using (RedisClient redisClient = new RedisClient(Host)) { redisClient.Set<LoginUserInfo>(ulr.LoginInfoSessionKey, ulr, DateTime.Now.AddDays(7));//7天后過期 } } }



二、用Redis 緩存修改少,查詢多的數據。

       我一般會緩存一下幾方面數據

       1、當前用戶權限

       2、當前用戶模塊

       3、當前用戶使用數據的數據結構。

       ....


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com