1.windows环境下,下载Memcached服务器端软件 安装
①.《服务端》
控制台下 d:memcached.exe -d install 安装(服务端文件我放在D盘根目录下了)
d:memcached.exe -d start 启动
【memcached.exe最好放在盘符的根目录下】
-p <num> 监听的端口
-l <ip_addr> 连接的IP地址, 默认是本机
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务
-u <username> 以<username>的身份运行 (仅在以root运行的时候有效)
-m <num> 最大内存使用,单位MB。默认64MB
-M 内存耗尽时返回错误,而不是删除项
-c <num> 最大同时连接数,默认是1024
-f <factor> 块大小增长因子,默认是1.25
-n <bytes> 最小分配空间,key+value+flags默认是48
-h 显示帮助
启动服务后,memcached服务默认占用的端口是11211,占用的最大内存默认是64M。
可以自己修改端口号,但是需要修改注册表
打开注册表,找到:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached Server
其中的ImagePath项的值为:"c:\memcached-1.2.6\memcached.exe" -d runservice
改成:"c:\memcached-1.2.6\memcached.exe" -p 12345 -m 1024 -d runservice
表示可以 缓存 1G数据。端口 12345
②.下载客户端(主要是得到3个*.dll 文件)
2. C#代码(项目需引用客户端dll)
【配置文件中的内容】用于指定Memcached的服务器列表,多台用“,”隔开
1.在全局文件的 Application_Start 方法中加入 初始化连接池的代码
//初始化Memcached的sockIOPool(套接字连接池) char[] separator = { ',' }; //Memcached的服务器集合(可以多台)用逗号分隔---在配置文件中读取 string[] serverlist = ConfigurationManager.AppSettings["Memcached.ServerList"].Split(separator); // 指定memcached服务器负载量 //int[] weights = { 3, 3, 2 }; // 初始化连接池 try { // 从连接池获取一个连接实例 SockIOPool pool = SockIOPool.GetInstance(); //设置服务器列表 pool.SetServers(serverlist); //设置服务器负载量 //pool.SetWeights(weights); //初始连接数 pool.InitConnections = 3; //最小连接数 5 pool.MinConnections = 3; //最大连接数 250 pool.MaxConnections = 50; // 连接超时 时间 pool.SocketConnectTimeout = 1000; //设置 读取 超时3秒钟 pool.SocketTimeout = 3000; // 设置主线程睡眠时间,每隔30秒醒来 pool.MaintenanceSleep = 30; //服务器失效转移(用于有多台Memcached 缓存服务器时,一旦宕机,自动切换到可用服务器) pool.Failover = true; // 关闭nagle算法 pool.Nagle = false; pool.Initialize(); } catch (Exception err) { //这里还可以使用Log4Net记录 log.Error(err.Message.ToString()); }
2.缓存数据和读取数据
MemcachedClient mc = new MemcachedClient(); DLL dll = new DLL(); List<T> list = dll.GetModels();//从数据库中取得数据 // 设置压缩模式 mc.EnableCompression = true; //如果超过1MB 压缩数据 mc.CompressionThreshold = 1024 * 1024; if (!mc.KeyExists("list"))//判断该键 是否存在 //将值放到cache中 mc.Set("list", list); // 读取数据 var list = mc.Get("list");