缓存redis操作

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

安装redis服务、
配置web.config
AutoStart="true" LocalCacheTime="180" RecordeLog="true">

============================================================================================================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;

namespace Cseth.WebService
{
public sealed class RedisCacheConfig : ConfigurationSection
{
///


/// 获取配置文件中的Redis配置
///

///
public static RedisCacheConfig GetRedisCacheConfig()
{
RedisCacheConfig config = (RedisCacheConfig)ConfigurationManager.GetSection("RedisCacheConfig");
if (config == null)
{
throw new ConfigurationErrorsException("没有找到【RedisCacheConfig】配置节点。");
}
return config;
}
///
/// 写缓存服务器列表
///

[ConfigurationProperty("WriteServerList", IsRequired = false)]
public string WriteServerList
{
get
{
return (string)base["WriteServerList"];
}
set
{
base["WriteServerList"] = value;
}
}
///
/// 度缓存服务器列表
///

[ConfigurationProperty("ReadServerList", IsRequired = false)]
public string ReadServerList
{
get
{
return (string)base["ReadServerList"];
}
set
{
base["ReadServerList"] = value;
}
}
///
/// 最大写连接数
///

[ConfigurationProperty("MaxWritePoolSize", IsRequired = false, DefaultValue = 15)]
public int MaxWritePoolSize
{
get
{
int _maxWritePoolSize = (int)base["MaxWritePoolSize"];
return _maxWritePoolSize > 0 ? _maxWritePoolSize : 15;
}
set
{
base["MaxWritePoolSize"] = value;
}
}
///
/// 最大读连接数
///

[ConfigurationProperty("MaxReadPoolSize", IsRequired = false, DefaultValue = 15)]
public int MaxReadPoolSize
{
get
{
int _maxReadPoolSize = (int)base["MaxReadPoolSize"];
return _maxReadPoolSize > 0 ? _maxReadPoolSize : 15;
}
set
{
base["MaxReadPoolSize"] = value;


}
}
///


/// 是否自动重启
///

[ConfigurationProperty("AutoStart", IsRequired = false, DefaultValue = true)]
public bool AutoStart
{
get
{
return (bool)base["AutoStart"];
}
set
{
base["AutoStart"] = value;
}
}
///
/// 本地缓存时间,单位:秒
///

[ConfigurationProperty("LocalCacheTime", IsRequired = false, DefaultValue = 36000)]
public int LocalCacheTime
{
get
{
return (int)base["LocalCacheTime"];
}
set
{
base["LocalCacheTime"] = value;
}
}
///
/// 是否记录日志,该设置仅用于排查redis运行时出现的问题,如redis工作正常,请关闭该项
///

[ConfigurationProperty("RecordeLog", IsRequired = false, DefaultValue = false)]
public bool RecordeLog
{
get
{
return (bool)base["RecordeLog"];
}
set
{
base["RecordeLog"] = value;
}
}
}
}
========================================================================================================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ServiceStack.Redis;

namespace Cseth.WebService
{
public class RedisManager
{
///
/// 加载Readis配置信息
///

private static RedisCacheConfig redisCacheConfig = RedisCacheConfig.GetRedisCacheConfig();
///
/// 缓存客户端管理器
///

public static PooledRedisClientManager prcm;
///
/// 静态构造函数
///

static RedisManager()
{
if (prcm == null)
{
CreateManager();
}
}
///
/// 创建缓存管理器
///

private static void CreateManager()
{
string[] writeServerList = redisCacheConfig.WriteServerList.Split(',');
string[] readServerList = redisCacheConfig.ReadServerList.Split(',');

prcm = new PooledRedisClientManager(readServerList, writeServerList,
new RedisClientManagerConfig
{
MaxWritePoolSize = redisCacheConfig.MaxWritePoolSize,
MaxReadPoolSize = redisCacheConfig.MaxReadPoolSize,
AutoStart = redisCacheConfig.AutoStart,

});
}
///


/// 客户端缓存操作对象
///

///
public static IRedisClient GetRedisClient()
{
if (prcm == null)
{
CreateManager();
}
return prcm.GetClient();
}
///
/// 写服务器数量
///

///
public static int GetWriteServerListCount()
{
return redisCacheConfig.WriteServerList.Split(',').Length;
}
///
/// 读服务器数量
///

///
public static int GetReadServerListCount()
{
return redisCacheConfig.ReadServerList.Split(',').Length;
}
}
}
======================================================================================================================================
调用
string hk = DbMappingKey["NP_CarrierAccount"] + ComputeHashKey(key.ToString());
using (IRedisClient redisClient = RedisManager.GetRedisClient())
{
if (redisClient.ContainsKey(hk))
{
rtnData = redisClient.Get>(hk);
}
else
{
var result = monContext.ExecuteQuery(strSQL);
rtnData = result.ToList();
if (rtnData.Count > 0)
{
redisClient.Set>(hk, rtnData);
}
}
}
======================================================================================================================================
session时间的设置
方法一:
Session的默认时间设置是20分钟,即超过20分钟后,服务器会自动放弃Session信息.

当我们在程序中打开webconfig的时候,可以看到一段如下的代码:
程序代码:
mode="InProc"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
cookieless="false"
timeout="20"
/>
上面一段的代码就是配置应用程序是如何存储Session信息的了.
其中的timeout="20" 即为 session的默认时间.需要更改时间我们在此处填上不同的数值就可以了,默认单位为分.

sessionState节点属性:

cookieless="true|false"
timeout="number of minutes"
stateConnectionString="tcpip=server:port"
sqlConnectionString="sql connection string"
stateNetworkTimeout="number of seconds"
/>

必须有的属性是

mode 设置将Session信息存储到哪里
Off 设置为不使用Session

功能
InProc 设置为将Session存储在进程内,就是ASP中的存储方式,这是默认值。
StateServer 设置为将Session存储在独立的状态服务中。
SQLServer 设置将Session存储在SQL Server中

可选的属性是:
cookieless 设置客户端的Session信息存储到哪里
ture 使用Cookieless模式
false 使用Cookie模式,这是默认值。
timeout 设置经过多少分钟后服务器自动放弃Session信息。默认为20分钟
stateConnectionString 设置Session信息存储在状态服务中时使用的服务器名称和端口号,例如:"tcpip=127.0.0.1:42424”。当mode的值是StateServer是,这个属性是必需的。
sqlConnectionString 设置与SQL Server连接时的连接字符串。当mode的值是SQLServer时,这个属性是必需的。
stateNetworkTimeout 设置当使用StateServer模式存储Session状态时,经过多少秒空闲后,断开Web服务器与存储状态信息的服务器的TCP/IP连接的。默认值是10秒

session时间的设置方法二: 不过有时修改配置文件不能很好的解决这个问题。你可以在公共程序里Global.asax里修改。我们在找到global.asax中找到 Session_Start后 按如下设置一下就可以了。

void Session_Start(object sender, EventArgs e)
{
// 在新会话启动时运行的代码
Session.Timeout = 600;
}

void Session_Start(object sender, EventArgs e)
{
// 在新会话启动时运行的代码
Application.Lock();
Application["sessionUserName"] = (int)Application["sessionUserName"] + 1;
Application.UnLock();

}

void Session_End(object sender, EventArgs e)
{
// 在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
// InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer
// 或 SQLServer,则不会引发该事件。
Application.Lock();
Application["sessionUserName"] = (int)Application["sessionUserName"] - 1;
Application.UnLock();
}

相关文档
最新文档