怎么使用复述,实现会话功能

  介绍

这篇文章主要介绍怎么使用复述,实现会话功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

我们来简单介绍下复述。

复述(远程字典服务器),即远程字典服务,是一个开源的使用ANSI C语言编写,支持网络,可基于内存亦可持久化的日志型,键值数据库,并提供多种语言的API。从2010年3月15日起,复述的开发工作由VMware主持。从2013年5月开始,复述的开发由关键赞助。

1。与其他用户状态保存方案比较

一般开发中用户状态使用会话或者饼干,两种方式各种利弊。

会话:在InProc模式下容易丢失,并且引起并发问题。如果使用或状态"置疑"者模状态"置疑"式又消耗了性能

饼干则容易将一些用户信息暴露,加解密同样也消耗了性能。

复述,采用这样的方案解决了几个问题,

1.复述,存取速度快。

2。用户数据不容易丢失。

3。用户多的情况下容易支持集群。

4。能够查看在线用户。

5。能够实现用户一处登录。(通过代码实现,后续介绍)

6。支持持久化。(当然可能没什么用)

2。实现思路

1。我们知道会话其实是在cookie中保存了一个sessionid,用户每次访问都将sessionid发给服务器,服务器通过身份证查找用户对应的状态数据。

在这里我的处理方式也是在cookie中定义一个sessionid,程序需要取得用户状态时将sessionid做为关键在复述中查找。

2。同时会话支持用户在一定时间不访问将会话回收。

借用复述,中键支持过期时间的特性支持这个功能,但是在续期方面需要程序自行拦截请求调用这个方法(演示有例子)

下面开始代码说明

3.复述,调用接口

首先引用ServiceStack相关DLL。

在网络。配置添加配置,这个配置用来设置复述,调用地址每台服务用【,】隔开。主机写在第一位

& lt; appSettings>      ,,,& lt; !——每台复述之间用,分割。第一个必须为主机——比;   ,,,& lt; add 关键=癝essionRedis",价值=https://www.yisu.com/zixun/" 127.0.0.1:6384, 127.0.0.1:6384 "/>      

初始化配置

static 经理()   ,,,,,,,{   ,,,,,,,,,,,string  sessionRedis=, ConfigurationManager.AppSettings (“SessionRedis");   ,,,,,,,,,,,string  timeOut =, ConfigurationManager.AppSettings (“SessionRedisTimeOut");      ,,,,,,,,,,,if  (string.IsNullOrEmpty (sessionRedis))   ,,,,,,,,,,,{   ,,,,,,,,,,,,,,,throw  new 例外(“web.config 缺少配置SessionRedis,每台复述之间用,分割。第一个必须为主机“);   ,,,,,,,,,,,}      ,,,,,,,,,,,if  (string.IsNullOrEmpty(超时)==false)   ,,,,,,,,,,,{   ,,,,,,,,,,,,,,,TimeOut =, Convert.ToInt32(超时);   ,,,,,,,,,,,}      ,,,,,,,,,,,var  host =, sessionRedis.Split (char.Parse (“”));   ,,,,,,,,,,,var  writeHost =, new  string[],{,主机[0]};   ,,,,,,,,,,,var  readHosts =, host.Skip (1) .ToArray ();      ,,,,,,,,,,,ClientManagers =, new  PooledRedisClientManager (writeHost, readHosts,, new  RedisClientManagerConfig   ,,,,,,,,,,,{   ,,,,,,,,,,,,,,,MaxWritePoolSize =, writeReadCount,//靶础绷唇映亓唇邮?   ,,,,,,,,,,,,,,,MaxReadPoolSize =, writeReadCount,//岸痢绷唇映亓唇邮?   ,,,,,,,,,,,,,,,AutoStart =,真的   ,,,,,,,,,,,});   ,,,,,,,}

为了控制方面写了一个委托

///,& lt; summary>   ,,,,,,,///,写入   ,,,,,,,///,& lt;/summary>   ,,,,,,,///,& lt; typeparam  name=癋"祝辞& lt;/typeparam>   ,,,,,,,///,& lt; param  name=癲oWrite"祝辞& lt;/param>   ,,,,,,,///,& lt; returns> & lt;/returns>   ,,,,,,,public  F  TryRedisWrite (Func, doWrite)   ,,,,,,,{   ,,,,,,,,,,,PooledRedisClientManager  prcm =, new 经理().GetClientManagers ();   ,,,,,,,,,,,IRedisClient  client =,空;   ,,,,,,,,,,,试一试   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

怎么使用复述,实现会话功能