要玩集群的时候,怎么处理会话状态Session?
InProc模式的sessionState是不能用了,因为这是在web服务器本机进程里的,会造成各节点数据不一致。除非在分流的时候用ip hash策略,不是长久之计。
- 用StateServer模式,可能单点故障
- 用SQLServer模式,需要另配一个数据库实例,SQLServer不方便做读写分离等集群化架构
- 用Custom模式,自定义
前两种不说了,有兴趣可以自己去看看,我们来看第三种,怎么自定义实现Session存储。
SessionStateStoreProviderBase
要自定义Session Provider,需要继承SessionStateStoreProviderBase,并override一系列方法,具体不列了,有点多。
这里提供一个源码参考:github
如果懒得自己实现,就直接用这个库。
项目名:
memcached-providers
Github地址:
https://github.com/enyim/memcached-providers
命名空间:
Enyim.Caching.Web
获取方法:
直接git clone源代码 或 VS使用 Nuget 找到Memcached SessionState Provider
配置方法:
需要配置membase,参考
注意,虽然该项目在Memecache下,但是它的SessionStateStoreProvider是由 Membase 提供存储的,Membase兼容Memcache的api,但是 未验证 是否可以直接由Memcache实例替代Membase。