使用缓存Memcache存储access_token

接上篇文本,千辛万苦终于拿到了access_token。

正常情况下access_token有效期为7200秒,重复获取将导致上次获取的access_token失效。目前,获取access_token接口的调用频率限制为2000次/天。

所以我们将把它存起来,对于access_token的存储,可以考虑存储在文件、数据库或内存中。

这里我们就使用缓存Memcache存储及更新access_token(Memcache是一个高性能的分布式的内存对象缓存系统,将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。)

在 1.4.5 版本以前 memcached 可以作为一个服务安装,由于公司项目使用的就是1.4.5之前的版本,下载好解压,复制到你的服务器

 

C:\Users\Administrator\Desktop\memcached\memcached.exe -d install

  

服务里面会多一个memcached的服务,然后

C:\Users\Administrator\Desktop\memcached\memcached.exe -d start 或者右键启动

Memcache就装好了。

然后做为一个前端开发,就要去写后端代码了,首先引入依赖的dll

后端语言c#

    public class WxCache
    {
        public string access_token { get;set;}
        public int expires_in { get;set;}
    }

  

        public string GetToken() {
            //因为服务是装在服务器上的,这里的ip就写127.0.0.1,端口是默认的11211
            //可以改,没试到就不说了,大家自行百度
            //这里的MemCache已经是封装过后的,做了一些初始化配置
            MemCache cache = new MemCache(new[] { "127.0.0.1:11211" }, "");
            //判断是否有token,没有就发请求
            if(string.IsNullOrEmpty(cache.Get<string>("token"))){
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create("获取token的url");
                request.Method = "GET";
                request.ContentType = "text/html;charset=UTF-8";
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                Stream myResponseStream = response.GetResponseStream();
                StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.UTF8);
                string retString = myStreamReader.ReadToEnd();
                var result = JsonConvert.DeserializeObject<WxCache>(retString);
                myStreamReader.Close();
                myResponseStream.Close();
                //拿到的数据反序列化,token存起来
                //MemCache可以设置过期时间,这里设置的是1个半小时
                cache.Set("token", result.access_token, DateTime.Now.AddMinutes(90));
                return result.access_token;
            }
            else {
                //一个半小时内缓存还在,就用没有过期的token
                return cache.Get<string>("token");
            }
        }

  

  结束,接下来就可以拿着access_token在前端做些事情了。

 

posted @ 2017-11-01 17:46  anyhoo  阅读(1461)  评论(1编辑  收藏  举报