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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM