亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 數(shù)據(jù)庫(kù) > Redis > 正文

詳解用Redis實(shí)現(xiàn)Session功能

2020-10-28 21:38:18
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

0.什么是Redis

Redis是一個(gè)開(kāi)源的使用ANSI C語(yǔ)言編寫(xiě)、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫(kù),并提供多種語(yǔ)言的API

1.與其他用戶(hù)狀態(tài)保存方案比較

一般開(kāi)發(fā)中用戶(hù)狀態(tài)使用session或者cookie,兩種方式各種利弊。

Session:在InProc模式下容易丟失,并且引起并發(fā)問(wèn)題。如果使用SQLServer或者SQLServer模式又消耗了性能

Cookie則容易將一些用戶(hù)信息暴露,加解密同樣也消耗了性能。

Redis采用這樣的方案解決了幾個(gè)問(wèn)題,

①.Redis存取速度快。

②.用戶(hù)數(shù)據(jù)不容易丟失。

③.用戶(hù)多的情況下容易支持集群。

④.能夠查看在線(xiàn)用戶(hù)。

⑤.能夠?qū)崿F(xiàn)用戶(hù)一處登錄。(通過(guò)代碼實(shí)現(xiàn),后續(xù)介紹)

⑥.支持持久化。(當(dāng)然可能沒(méi)什么用)

2.實(shí)現(xiàn)思路

1.我們知道session其實(shí)是在cookie中保存了一個(gè)sessionid,用戶(hù)每次訪(fǎng)問(wèn)都將sessionid發(fā)給服務(wù)器,服務(wù)器通過(guò)ID查找用戶(hù)對(duì)應(yīng)的狀態(tài)數(shù)據(jù)。

在這里我的處理方式也是在cookie中定義一個(gè)sessionid,程序需要取得用戶(hù)狀態(tài)時(shí)將sessionid做為key在Redis中查找。

2.同時(shí)session支持用戶(hù)在一定時(shí)間不訪(fǎng)問(wèn)將session回收。

借用Redis中Keys支持過(guò)期時(shí)間的特性支持這個(gè)功能,但是在續(xù)期方面需要程序自行攔截請(qǐng)求調(diào)用這個(gè)方法(demo有例子)

下面開(kāi)始代碼說(shuō)明 

3.Redis調(diào)用接口

首先引用ServiceStack相關(guān)DLL。

在web.config添加配置,這個(gè)配置用來(lái)設(shè)置Redis調(diào)用地址每臺(tái)服務(wù)用【,】隔開(kāi)。主機(jī)寫(xiě)在第一位 

 <appSettings>   <!--每臺(tái)Redis之間用,分割.第一個(gè)必須為主機(jī)-->  <add key="SessionRedis" value="127.0.0.1:6384,127.0.0.1:6384"/>  </appSettings>

初始化配置

static Managers()    {      string sessionRedis= ConfigurationManager.AppSettings["SessionRedis"];      string timeOut = ConfigurationManager.AppSettings["SessionRedisTimeOut"];      if (string.IsNullOrEmpty(sessionRedis))      {        throw new Exception("web.config 缺少配置SessionRedis,每臺(tái)Redis之間用,分割.第一個(gè)必須為主機(jī)");      }      if (string.IsNullOrEmpty(timeOut)==false)      {        TimeOut = Convert.ToInt32(timeOut);      }      var host = sessionRedis.Split(char.Parse(","));      var writeHost = new string[] { host[0] };      var readHosts = host.Skip(1).ToArray();      ClientManagers = new PooledRedisClientManager(writeHost, readHosts, new RedisClientManagerConfig      {        MaxWritePoolSize = writeReadCount,//“寫(xiě)”鏈接池鏈接數(shù)        MaxReadPoolSize = writeReadCount,//“讀”鏈接池鏈接數(shù)        AutoStart = true      });    }

 為了控制方便寫(xiě)了一個(gè)委托

 /// <summary>    /// 寫(xiě)入    /// </summary>    /// <typeparam name="F"></typeparam>    /// <param name="doWrite"></param>    /// <returns></returns>    public F TryRedisWrite<F>(Func<IRedisClient, F> doWrite)    {      PooledRedisClientManager prcm = new Managers().GetClientManagers();      IRedisClient client = null;      try      {        using (client = prcm.GetClient())        {          return doWrite(client);        }      }      catch (RedisException)      {        throw new Exception("Redis寫(xiě)入異常.Host:" + client.Host + ",Port:" + client.Port);      }      finally      {        if (client != null)        {          client.Dispose();        }      }    }

 一個(gè)調(diào)用的例子其他的具體看源碼

   /// <summary>    /// 以Key/Value的形式存儲(chǔ)對(duì)象到緩存中    /// </summary>    /// <typeparam name="T">對(duì)象類(lèi)別</typeparam>    /// <param name="value">要寫(xiě)入的集合</param>    public void KSet(Dictionary<string, T> value)    {      Func<IRedisClient, bool> fun = (IRedisClient client) =>      {        client.SetAll<T>(value);        return true;      };      TryRedisWrite(fun);    }

4.實(shí)現(xiàn)Session

按上面說(shuō)的給cookie寫(xiě)一個(gè)sessionid

  /// <summary>  /// 用戶(hù)狀態(tài)管理  /// </summary>  public class Session  {    /// <summary>    /// 初始化    /// </summary>    /// <param name="_context"></param>    public Session(HttpContextBase _context)    {      var context = _context;      var cookie = context.Request.Cookies.Get(SessionName);      if (cookie == null || string.IsNullOrEmpty(cookie.Value))      {        SessionId = NewGuid();        context.Response.Cookies.Add(new HttpCookie(SessionName, SessionId));        context.Request.Cookies.Add(new HttpCookie(SessionName, SessionId));      }      else      {        SessionId = cookie.Value;      }    }  }

去存取用戶(hù)的方法

    /// <summary>    /// 獲取當(dāng)前用戶(hù)信息    /// </summary>    /// <typeparam name="T"></typeparam>    /// <returns></returns>    public object Get<T>() where T:class,new()    {      return new RedisClient<T>().KGet(SessionId);    }    /// <summary>    /// 用戶(hù)是否在線(xiàn)    /// </summary>    /// <returns></returns>    public bool IsLogin()    {      return new RedisClient<object>().KIsExist(SessionId);    }    /// <summary>    /// 登錄    /// </summary>    /// <typeparam name="T"></typeparam>    /// <param name="obj"></param>    public void Login<T>(T obj) where T : class,new()    {      new RedisClient<T>().KSet(SessionId, obj, new TimeSpan(0, Managers.TimeOut, 0));    } 

 6.續(xù)期

默認(rèn)用戶(hù)沒(méi)訪(fǎng)問(wèn)超過(guò)30分鐘注銷(xiāo)用戶(hù)的登錄狀態(tài),所以用戶(hù)每次訪(fǎng)問(wèn)都要將用戶(hù)的注銷(xiāo)時(shí)間推遲30分鐘

這需要調(diào)用Redis的續(xù)期方法 

 

    /// <summary>    /// 延期    /// </summary>    /// <param name="key"></param>    /// <param name="expiresTime"></param>    public void KSetEntryIn(string key, TimeSpan expiresTime)    {      Func<IRedisClient, bool> fun = (IRedisClient client) =>      {        client.ExpireEntryIn(key, expiresTime);        return false;      };      TryRedisWrite(fun);    }
 封裝以后/// <summary>/// 續(xù)期/// </summary>public void Postpone(){new RedisClient<object>().KSetEntryIn(SessionId, new TimeSpan(0, Managers.TimeOut, 0));}

這里我利用了MVC3中的ActionFilter,攔截用戶(hù)的所有請(qǐng)求

namespace Test{  public class SessionFilterAttribute : ActionFilterAttribute  {    /// <summary>    /// 每次請(qǐng)求都續(xù)期    /// </summary>    /// <param name="filterContext"></param>    public override void OnActionExecuting(ActionExecutingContext filterContext)    {      new Session(filterContext.HttpContext).Postpone();    }  }}

在Global.asax中要注冊(cè)一下

public static void RegisterGlobalFilters(GlobalFilterCollection filters)    {      filters.Add(new SessionFilterAttribute());    }    protected void Application_Start()    {      RegisterGlobalFilters(GlobalFilters.Filters);    } 

 5.調(diào)用方式

為了方便調(diào)用借用4.0中的新特性,把Controller添加一個(gè)擴(kuò)展屬性 

public static class ExtSessions{public static Session SessionExt(this Controller controller)  {    return new Session(controller.HttpContext);  }}

調(diào)用方法

  public class HomeController : Controller  {    public ActionResult Index()    {      this.SessionExt().IsLogin();      return View();    }  }

6.代碼下載

點(diǎn)擊下載

7.后續(xù)

SessionManager包含 獲取用戶(hù)列表數(shù)量,注銷(xiāo)某個(gè)用戶(hù),根據(jù)用戶(hù)ID獲取用戶(hù)信息,在線(xiàn)用戶(hù)對(duì)象列表,在線(xiàn)用戶(hù)SessionId列表等方法

后續(xù)將實(shí)現(xiàn)用戶(hù)一處登錄功能

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
亚洲高清av| 中文字幕 在线观看| 2018中文字幕一区二区三区| 国产精品资源站在线| 国产免费黄色网址| 九色蝌蚪在线| 国产美女在线精品免费观看| 99国产精品国产精品毛片| 那种视频在线观看| 国产精品激情偷乱一区二区∴| 一区二区在线电影| 久久精品国产成人av| 97人妻人人澡人人爽人人精品| 亚洲91精品在线| jizz日本免费| 亚洲第一页在线视频| 亚洲产国偷v产偷v自拍涩爱| 亚洲第一综合色| 国产精品久久久久久久裸模| 午夜精品久久久久久久男人的天堂| 97人妻精品一区二区三区免| 日韩av网站电影| 久久精品视频一区二区| 国产福利第一视频| 天天天综合网| 欧美性生活大片视频| 国产伦精品一区二区三区免费迷| 久草在线视频网站| 亚洲iv一区二区三区| 国产偷久久久精品专区| 日韩专区第三页| 天堂av在线播放| 亚洲优女在线| 国产精品流白浆视频| 国产精品视频观看| 亚洲少妇18p| 久久夜色精品国产| 69精品小视频| 毛片在线视频观看| av在线电影网| 老牛国内精品亚洲成av人片| a'aaa级片在线观看| 日韩精品dvd| 国产精品久久久久一区| 中文在线一区二区| 国产精品久久久久久妇女6080| 美女网站免费看| 福利av在线| 超碰中文字幕在线| 国产永久免费网站| 国产国产一区| www.男人天堂| 亚洲电影在线看| 美女视频亚洲色图| 精品无码一区二区三区电影桃花| 精品网站999www| 国产精品久久97| 欧美激情综合在线| 91caoporn在线| 日本视频一二三区中文字幕| 亚洲巨乳在线观看| 国产东北露脸精品视频| 欧美在线高清| jizz在亚洲| 精品一区二区成人免费视频| 国产精品成人免费观看| 国产二级一片内射视频播放| 黄色美女久久久| 日韩精品免费在线播放| 777777国产7777777| 亚洲免费中文字幕| 最近中文字幕在线中文视频| 在线日韩av观看| 91精品国产综合久久精品图片| 最新日韩在线| 91精品国产91久久久久久最新毛片| 校花撩起jk露出白色内裤国产精品| 国产a级网站| 男人添女人下面高潮视频| 久久久久久久久中文字幕| xvideos国产精品| av影院在线播放| 国产一级二级三级| 在线免费看毛片| 国产韩国精品一区二区三区| 国偷自产av一区二区三区小尤奈| 黄色网址网站在线观看| 精品久久久久久无码国产| 新天天拍日日拍狠狠拍| 亚洲色大成网站www久久九九| 日本在线人成| 日韩一区二区在线| 在线观看亚洲精品视频| 欧美在线极品| 日韩国产成人在线| 国产一区二区在线网站| 懂色av中文一区二区三区天美| 国产女主播喷水视频在线观看| 51国偷自产一区二区三区| 少妇被狂c下部羞羞漫画| 超碰公开在线| 亚洲视频在线免费看| 奇米一区二区三区av| 黄色在线免费观看| 国产精品天天摸av网| 中文字幕av片| 热久久久久久久| 欧美激情 亚洲a∨综合| 亚洲精品无码久久久| 亚洲自拍高清视频网站| 国产成人欧美日韩在线电影| 精品偷拍激情视频在线观看| 蜜臀精品一区二区| 欧美一卡2卡3卡4卡无卡免费观看水多多| 免费福利在线观看| 中文字幕av影视| 欧美理论电影在线精品| 成人无号精品一区二区三区| 国产夫妻自拍av| 在线观看中文字幕一区| 久久蜜桃一区二区| 欧美人牲a欧美精品| 美女精品久久| 欧美亚洲黄色| 国产精品午夜在线| 91福利在线尤物| 激情五月亚洲色图| 亚洲一卡二卡三卡| 日韩欧美另类在线| 久久久亚洲精华液精华液精华液| 另类专区亚洲| 日韩av一二三四区| 日韩欧美在线免费观看视频| 亚洲精品国产高清久久伦理二区| 四虎成人在线| 亚洲精品成人在线播放| 在线成人激情黄色| 永久免费看mv网站入口78| 日韩欧美中文一区二区| 国产精品成人69xxx免费视频| 免费精品99久久国产综合精品应用| 久久婷婷国产精品| 欧美日本黄色片| 欧美日本亚洲韩国国产| 国产精品大片免费观看| 亚洲天堂日韩电影| 男人天堂视频在线| 污污的网站在线免费观看| 中文字幕亚洲无线码a| 久久99成人| 亚洲国产成人一区| 成人av网站免费观看| 久久婷五月综合| 深夜福利一区二区| 韩国女主播成人在线观看| 国产不卡一区二区三区在线观看| 盗摄女厕thunder| 大桥未久在线播放| 天天综合久久| 成人欧美一区二区三区在线播放| 成人在线网站| 欧美黑人乱大交ⅹxxxxx| 国内精品视频免费| 成全视频全集| 美女主播精品视频一二三四| 亚洲国产一区自拍| 久久精品一区二区三区不卡牛牛| 欧美一区二区三区免费视| 国产一区二区小视频| 色综合色综合色综合色综合| 中文字幕+乱码+中文字幕明步| 韩国精品福利一区二区三区| 在线观看三级视频| 男女av在线| 四虎影院在线免费播放| 欧美亚洲福利| 岛国av在线一区| 国产叼嘿视频在线观看| 国产精品一色哟哟| 日本一区二区三区视频视频| 久久五月天婷婷| 亚洲欧洲精品一区二区| 清纯唯美综合亚洲| 欧美日韩亚洲一区在线观看| 亚洲一级淫片| 91精彩视频在线观看| 美女亚洲精品| 中文字幕资源网在线观看免费| 99热免费精品| 免费黄色网页在线观看| 鲁丝一区二区三区| 91精品黄色| 日韩av电影免费在线观看| 玩弄japan白嫩少妇hd| 91精品国产乱码久久久久久久| 久久国产美女视频| 久久精品日韩一区二区三区| 91tv国产成人福利| 久久久蜜桃一区二区人| av电影在线观看| 亚洲天堂久久久久久久| 在线成人黄色| 久久久久国产一区二区三区| 日本福利视频在线观看| 影音先锋国产精品| 91高清免费在线观看| 国产熟妇搡bbbb搡bbbb| 黄色av片三级三级三级免费看| 999久久久国产999久久久| 中出嫩模无套| 欧美极品少妇xxxxⅹ喷水| 精品国产一区二区三区久久狼5月| 国产精品一卡二卡| 91在线观看高清| 日韩欧美一二区| www.欧美日本韩国| 二区在线视频| 丁香花高清视频完整版在线观看| 日韩一区二区精品在线观看| 天天干天天爽天天操| 亚洲图片第一页| 91污色多多| 欧美性猛交乱大交| 亚洲欧美日韩精品永久在线| 亚洲高清毛片一区二区| 亚洲成人一二三| 手机av在线免费观看| 久久久神马电影| 欧美精彩视频一区二区三区| 欧美亚洲日本在线观看| 久久99精品国产一区二区三区| 日韩美女黄色片| 久久福利影院| 伊人久久久大香线蕉综合直播| 国产精品视频yy9099| 欧美欧美天天天天操| 国产三区在线观看| 久久免费美女视频| 成人a级免费视频| 国产一区二区剧情av在线| 黄色片免费在线| 亚洲欧美清纯在线制服| 国产精品成人av在线| 午夜激情在线播放| 亚洲国产日韩a在线播放性色| 韩国理伦片久久电影网| 欧美色视频一区二区三区在线观看| 国产亚洲精品午夜高清影院| 欧美另类变人与禽xxxxx| 色呦呦网站入口| a级日韩大片| 俄罗斯女人裸体性做爰| www.成人精品免费网站青椒| 亚洲最大的免费视频网站| 精品国产九九九| 玖玖玖免费嫩草在线影院一区| 欧美人动与zoxxxx乱| 日韩精品三级| av不卡一区| 欧美成人免费播放| 欧美成人观看免费全部完小说| 福利电影一区二区三区| 美女扒开腿让男人桶爽久久动漫| 成人在线免费播放视频| 天天摸天天做天天爽水多| 精品免费一区二区| 日本激情视频网站| 亚洲美女电影在线| 精品午夜福利在线观看| 91麻豆精品国产91久久久久| 欧美亚洲日本在线观看| 日本少妇高潮喷水视频| 欧美一级在线免费| 丁香婷婷自拍| 日韩www在线| 日韩欧美一级在线播放| av免费网站在线观看| 日韩精品在线观看网站| 91农村精品一区二区在线| 国产普通话bbwbbwbbw| 久久久久一区二区| 天天色综合成人网| 精品成人久久| 国模一区二区三区白浆| 国产叼嘿视频在线观看| 欧美白人猛性xxxxx交69| 亚洲一区二区三区四区电影| 国产精品亚洲αv天堂无码| 日本女人性生活视频| 97夜夜澡人人双人人人喊| 免费一级特黄特色大片| 欧美大片1688网站| 欧美视频你懂的| 国产在线黄色| 天堂中文最新版在线中文| 免费在线观看的av网站| 国产精品视频一区二区三区四| 91精品国产黑色瑜伽裤| 免费在线观看av电影| 国内精品不卡在线| 欧美日韩午夜视频在线观看| baoyu777.永久免费视频| 伊人久久久久久久久久久久久| 亚洲成人久久久久| 久草中文在线视频| 欧美精品粉嫩高潮一区二区| 亚洲成人影院在线观看| 精品久久香蕉国产线看观看亚洲| 国产卡1卡2卡三卡在线| 中文字幕第一页在线播放| 欧美三级伦理在线| 好看的视频你懂的| 国产精品一级伦理| 国产在线拍揄自揄视频不卡99| 久久久久久艹| 国产欧美日本| 日韩av免费网站| 五月激激激综合网色播| 亚洲狠狠婷婷综合久久久久图片| 好吊色视频988gao在线观看| 国产精品久久久久久久久免费丝袜| 成全电影大全在线观看| 欧美一区91| 福利网站在线观看| 日韩电影中文字幕一区| 精品国产黄a∨片高清在线| 欧美日韩亚洲系列| www.99热.com|