使用缓存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在前端做些事情了。