负载均衡@StackExchange.Redis实现Session外置--纯干货喂饱你

Redis和StackExchange.Redis

redis有多个数据库
一、redis 中的每个数据库,都由一个 redisDb 的结构存储。其中,redisDb.id 存储着 redis 数据库以整数表示的号码。redisDb.dict 存储着该库全部的键值对数据。redisDb.expires 保存着每个键的过时时间。git

二、当redis 服务器初始化时,会预先分配 16 个数据库(该数量能够经过配置文件配置),全部数据库保存到结构 redisServer 的一个成员 redisServer.db 数组中。当咱们选择数据库 select number 时,程序直接经过 redisServer.db[number] 来切换数据库。有时候当程序须要知道本身是在哪一个数据库时,直接读取 redisDb.id 便可。github

三、既然咱们知道一个数据库的全部键值都存储在redisDb.dict中,那么咱们要知道若是找到key的位置,redis 的字典使用哈希表做为其底层实现。redis

StackExchange.Redis,确定少不了提一下ServiceStack.Redis,这两个都是redis在c#里面比较优秀的SDk.数据库

ServiceStack.Redis 4 开始已经收费了,因此你懂的.StackOverflow他们在开发并使用StackExchange.Redisc#

我想可能微软也看见了它的"厉害",因此在微软官方出的RedisSessionStateProvider中也是采用的StackExchange.Redis来实现的数组

StackExchange.Redis实现Session

使用Nuget安装RedisSessionStateProvider,sessionState的模式默认有Custom,InProc,Off,SQLServer,StateServer这五种,默认的就是InProc,也就是咱们经常使用的进程内Session.使用自定义的Session实现确定就要选Custom模式了.服务器

Web.config配置session

1  <sessionState mode="Custom" customProvider="MySessionStateStore">
2       <providers>
3         <add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" connectionString="ip:端口,password=密码,ssl=false,abortConnect=false,connectTimeout=5000"/>
4       </providers>
5  </sessionState>

 如在代码中使用 Session["redissession"] = "sa";ide

则生成两个Hash key 学习

其中wmhe4v0zvbbfinkdnckutv4l就是ASP.NET_SessionId,经过监视请求也能够看见

StackExchange.Redis能够实现Redis全部命令,经常使用操做查看https://github.com/StackExchange/StackExchange.Redis

 

相关文章
相关标签/搜索