博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Memcached+WebApi记录
阅读量:5905 次
发布时间:2019-06-19

本文共 8357 字,大约阅读时间需要 27 分钟。

一、安装Memcached

Memcached1.2.6

 http://files.cnblogs.com/files/jasonduan/11465401756756.zip

Memcached.ClientLibrary

 http://files.cnblogs.com/files/jasonduan/10524626586159.zip

网上好多文章

http://jingyan.baidu.com/article/335530da5f765019cb41c3ec.html

http://jingyan.baidu.com/album/c85b7a640fbfd5003bac9500.html

memcached.exe -d install

memcached.exe -d start

Memcached还有其他的一些常用的命令如下:

      -p 监听的端口 --默认端口11211
      -l 连接的IP地址, 默认是本机
      -d start 启动memcached服务
      -d restart 重起memcached服务
      -d stop|shutdown 关闭正在运行的memcached服务
      -d install 安装memcached服务
      -d uninstall 卸载memcached服务
      -u 以的身份运行 (仅在以root运行的时候有效)
      -m 最大内存使用,单位MB。默认64MB
      -M 内存耗尽时返回错误,而不是删除项 默认64
      -c 最大同时连接数,默认是1024
      -f 块大小增长因子,默认是1.25
      -n 最小分配空间,key+value+flags默认是48
      -h 显示帮助

 

在运行下输入“regedit”打开注册表,  找到路径 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached,下面找 到一个ImagePath 的字符串项,正好是服务的执行路径的字符串,

双击该串,在后面追加入“-m 1024 -c 2048 -p 11200”  重启服务即可

 

查看缓存区块,分析结果可调配-f参数

telnet 127.0.0.1 11200

查看缓存的各种状态

stats

 

二、定义MemCachedHelper

 <add key="memcachedServer" value="127.0.0.1:11200" />

using System.Linq;using System.Web;using System.Configuration;using Memcached.ClientLibrary;using System;using System.Collections;namespace API.Common{    public static class MemCachedHelper    {        private static readonly MemcachedClient memcachedClient;        static MemCachedHelper()        {            //读取web.config中的memcached服务器配置信息            if (string.IsNullOrWhiteSpace(ConfigurationManager.AppSettings["memcachedServer"]))            {                throw new Exception("请在web.config的appsetting中配置memcached服务器信息!");            }            string[] servers = ConfigurationManager.AppSettings["memcachedServer"].Split(new char[','], StringSplitOptions.RemoveEmptyEntries);            //初始化池            SockIOPool pool = SockIOPool.GetInstance();            pool.SetServers(servers);            pool.InitConnections = 3;            pool.MinConnections = 3;            pool.MaxConnections = 1000;            pool.SocketConnectTimeout = 1000;            pool.SocketTimeout = 3000;            pool.MaintenanceSleep = 30;            pool.Failover = true;            pool.Nagle = false;            pool.Initialize();            memcachedClient = new MemcachedClient();            memcachedClient.EnableCompression = false;        }        ///         /// 根据key获取value        ///         ///         /// 
public static object Get(string key) { return memcachedClient.Get(key); } public static T Get
(string key) { return (T)memcachedClient.Get(key); } public static Hashtable Get(string[] key) { return memcachedClient.GetMultiple(key); } public static bool Set(string key, object objObject, DateTime exp) { return memcachedClient.Set(key, objObject, exp); } public static bool Set(string key, object value) { return memcachedClient.Set(key, value); } public static bool Set(string key, object value, int minute) { return memcachedClient.Set(key, value, DateTime.Now.AddMinutes(minute)); } public static void Set
(string key, T values) { memcachedClient.EnableCompression = false; memcachedClient.Set(key, values); } public static void Set
(string key, T values, DateTime expiry) { try { memcachedClient.EnableCompression = false; memcachedClient.Set(key, values, expiry); } catch { } } public static Hashtable Stats() { return memcachedClient.Stats(); } public static void Remove(string key) { memcachedClient.Delete(key); } public static void RemoveAllCache() { memcachedClient.FlushAll(); } public static bool ContainsKey(string key) { return memcachedClient.KeyExists(key); } public static bool IsKeyExists(string key) { try { return memcachedClient.KeyExists(key); } catch { return false; } } public static bool Replace
(string key, T values, DateTime expiry) { return memcachedClient.Replace(key, values, expiry); } public static bool Replace
(string key, T values) { return memcachedClient.Replace(key, values); } }}

 三使用

using API.Model;using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Net.Http;using System.Web.Http;using C = API.Common;using B = API.BLL;using M = API.Model;namespace API.BPJ.Controllers.Product{    ///     /// 商品控制器    ///     public class ProductController : ApiController    {        ///         /// 根据经销商编号得到分类列表        ///         ///         ///         ///         ///         /// 
[HttpGet] public CommonResult GetProductCategoryList(string UserId, string ZY, string Sign, string Ts) { CommonResult apiResult = new CommonResult(); //检查请求 签名和时间戳不符合即返回 if (!C.ComHelper.CheckRequest(Sign, Ts, out apiResult.Result, out apiResult.Message)) { return apiResult; } string cachekey = "CategoryList" + UserId + ZY; if (!C.MemCachedHelper.IsKeyExists(cachekey)) { //如果没有缓存从数据库读取 默认设置缓存为1天时间 List
list = new B.Product().GetProductCategoryList(UserId, ZY); C.MemCachedHelper.Set
>(cachekey, list, DateTime.Now.AddDays(1)); apiResult.Data = list; } else { apiResult.Data = C.MemCachedHelper.Get
>(cachekey); } if (apiResult.Data != null) { apiResult.Result = "1"; apiResult.Message = "加载成功!"; } else { apiResult.Result = "2"; apiResult.Message = "加载失败!"; } return apiResult; } } }

 四注意问题

1、model需要Serializable 否则不能set

2、序列化后的json对象,每个属性都带有k__BackingField后缀,加入[DataContract]  [DataMember]就就可以了

namespace API.Model{        [Serializable]    [DataContract]    public class ProductCategory    {        [DataMember]        public int CId { get; set; }        [DataMember]        public string CName { get; set; }        [DataMember]        public string CCode { get; set; }        [DataMember]        public string PCode { get; set; }        [DataMember]        public string Thumbnail { get; set; }        [DataMember]        public string Picture { get; set; }            }}

 localhost:6103/api/Product/GetProductCategoryList?UserId=1&ZY=1&Sign=&Ts=

{    "Result": "1",    "Message": "加载成功!",    "Data": [        {            "CId": 268,            "CName": "个护化妆",            "CCode": "003",            "PCode": "0",            "Thumbnail": "http://images.bpj.com/ProductCategory/201603/gehuhuazhang.jpg",            "Picture": "http://images.bpj.com/ProductCategory/201603/gehuhuazhang.jpg"        },        {            "CId": 269,            "CName": "个护健康",            "CCode": "004",            "PCode": "0",            "Thumbnail": "http://images.bpj.com/ProductCategory/201603/gehujiankang.jpg",            "Picture": "http://images.bpj.com/ProductCategory/201603/gehujiankang.jpg"        },        {            "CId": 338,            "CName": "家居用品",            "CCode": "005",            "PCode": "0",            "Thumbnail": "http://images.bpj.com/ProductCategory/201603/jiajuyongpin.jpg",            "Picture": "http://images.bpj.com/ProductCategory/201603/jiajuyongpin.jpg"        },        {            "CId": 499,            "CName": "母婴玩具",            "CCode": "007",            "PCode": "0",            "Thumbnail": "http://images.bpj.com/ProductCategory/201603/muyingwanju.jpg",            "Picture": "http://images.bpj.com/ProductCategory/201603/muyingwanju.jpg"        }    ]}

 

转载于:https://www.cnblogs.com/jasonduan/p/5580007.html

你可能感兴趣的文章
iOS MJRefresh下拉刷新(上拉加载)使用详解
查看>>
docker启动Mysql(转)
查看>>
第16章 使用Squid部署代理缓存服务
查看>>
debian下samba配置
查看>>
新建的linux虚拟机找不到eth0解决办法
查看>>
Java中如何解决double和float精度不准的问题
查看>>
Cisco网络设备命名规则
查看>>
大数据于产业金融领域的运用究竟如何很好的实现
查看>>
Android,ios,WP三大手机系统对比
查看>>
监视EntityFramework中的sql流转你需要知道的三种方式Log,SqlServerProfile, EFProfile
查看>>
EBS单实例上所有正在运行的并发请求以及请求目前的状态
查看>>
Html中各种空格的显示
查看>>
mysql 批处理文件出错后继续执行
查看>>
记录一下Swift3.0的一些代码格式的变化
查看>>
C# Socket连接 无法访问已释放的对象
查看>>
【资料下载区】【GMT43相关代码、资料下载地址】更新日期2017/06/28
查看>>
Golang面向过程编程-函数
查看>>
jsp页面和js代码中使用sessionScope获取session值
查看>>
使用Numpy验证Google GRE的随机选择算法
查看>>
Java Socket编程----通信是这样炼成的
查看>>