Redis是一個開源的使用ANSI C語言編寫、支持網絡、可基於內存亦可持久化的日志型、Key-Value數據庫,並提供多種語言的API
---維基百科
InProc模式下容易丟失,並且引起並發問題。如果使用SQLServer或者SQLServer模式又消耗了性能
Redis采用這樣的方案解決了幾個問題,
1.Redis存取速度快。
2.用戶數據不容易丟失。
3.用戶多的情況下容易支持集群。
4.能夠查看在線用戶。
5.能夠實現用戶一處登錄。(通過代碼實現,後續介紹)
6.支持持久化。(當然可能沒什麼用)
程序需要取得用戶狀態時將sessionid做為key在Redis中查找。
自行攔截請求調用這個方法(demo有例子)
初始化配置
sessionRedis= ConfigurationManager.AppSettings[ timeOut = ConfigurationManager.AppSettings[ ( Exception( (.IsNullOrEmpty(timeOut)=== host = sessionRedis.Split(.Parse( writeHost = [] { host[ readHosts = host.Skip(= PooledRedisClientManager(writeHost, readHosts, = writeReadCount, MaxReadPoolSize = writeReadCount, AutoStart =
為了控制方便寫了一個委托
F TryRedisWrite<F>(Func<IRedisClient, F>= = (client = Exception( + client.Host + + (client !=一個調用的例子其他的具體看源碼
KSet(Dictionary<, T><IRedisClient, > fun = (IRedisClient client) =><T>
context = cookie = (cookie == || ==去存取用戶的方法
Get<T>() T:, RedisClient<T> RedisClient<> Login<T>(T obj) T : , RedisClient<T>().KSet(SessionId, obj, TimeSpan(, Managers.TimeOut,
KSetEntryIn(<IRedisClient, > fun = (IRedisClient client) =>封裝以後RedisClient<>().KSetEntryIn(SessionId, TimeSpan(, Managers.TimeOut,
這裡我利用了MVC3中的ActionFilter,攔截用戶的所有請求
在Global.asax中要注冊一下
Session SessionExt(
調用方法
點擊下載
SessionManager包含 獲取用戶列表數量,注銷某個用戶,根據用戶ID獲取用戶信息,在線用戶對象列表,在線用戶SessionId列表等方法
後續將實現用戶一處登錄功能