接上篇文本,千辛万苦终于拿到了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在前端做些事情了。

使用缓存Memcache存储access_token的更多相关文章

  1. 使用缓存Memcache存储更新微信access token

    关键字:Memcache access_token 更新 存储 7200 本文介绍如何使用缓存Memcache存储及更新 access token的方法. 一.Access Token access_ ...

  2. 高性能文件缓存key-value存储—Memcached

    1.高性能文件缓存key-value存储—Redis 2.ASP.NET HttpRuntime.Cache缓存类使用总结 备注:三篇博文结合阅读,简单理解并且使用,如果想深入学习,请多参考文章中给出 ...

  3. memcache 存储单个KEY,数据量过大的时候性能慢!以及简单的memcache不适合用到的场景

    今天有人问到我:memcache存储大数据量,10K,100K,1M的时候,效果怎么样??我回答:不好,效果非常慢.对方问:为什么啊??我回答不上来...于是就找了点资料. memcached使用需要 ...

  4. 实现基于Memcache存储的Session类

    自主实现Session功能的类,基于文件方式存储Session数据,测试基本通过,还比较好玩,实际应用没有意义,只不过是学习Session是如何实现的. 使用基于文件的Session存取瓶颈可能都是在 ...

  5. python运维开发(十一)----python操作缓存memcache、redis

    内容目录: 缓存 memcache redis memcache Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数 ...

  6. Memcache存储大量数据的问题

    Memcache存储大数据的问题  huangguisu Memcached存储单个item最大数据是在1MB内,假设数据超过1M,存取set和get是都是返回false,并且引起性能的问题. 我们之 ...

  7. Memcache存储机制与指令汇总

    1.memcache基本简介 memcached是高性能的分布式内存缓存服务器.一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度.提高可扩展性. Memcach ...

  8. ASP.NET MVC用户登录(Memcache存储用户登录信息)

    一.多站点共享用户信息解决方案: 采用分布式缓存Memcache模拟Session进行用户信息信息共享 1.视图部分

  9. 分布式缓存Memcache和Redis

    引言 针对于如今计算机的CPU和网络设施,相应用程序来说,运行效率的瓶颈.已经不是代码的长度(实现同一个功能)和带宽了,而是,代码訪问资源的过程.即:让我们的程序慢下来的罪魁祸首就是IO操作. 程序从 ...

随机推荐

  1. Spring配置属性文件

    在项目开发阶段和交付阶段数据库的连接信息往往是不同的,可以把这些信息写成属性文件,再在Spring中导入即可引用 jdbc.properties属性文件如下: jdbc.driverClassName ...

  2. 读取properties属性文件

    1.通过类加载器加载 InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("Chap ...

  3. Apache2.4 + Tomcat7 负载均衡配置

    一.配置tomcat 多启动 1.下载免安装版 tomcat7 http://mirror.bit.edu.cn/apache/tomcat/tomcat-7/v7.0.81/bin/apache-t ...

  4. 启动PHPstudy提醒80、3306端口被占用

    端口占用会出现如下提醒 解决办法: 进入dos窗口:快捷键win+R,然后输入cmd 在dos窗口中输入命令:netstat   -ano(查找各端口所在进程的PID) 找到80和3306的程序PID ...

  5. arm-linux-gcc 4.3.2编译uboot 1.1.6

    在第三期项目的视频中,官方提供了一整套新的工具链,bootloader, 内核和文件系统(arm-linux-gcc_4.3.2, uboot-2012.04.01, linux-3.4.2)其中ub ...

  6. Java 简单实用方法二

    整理以前的笔记,在学习Java时候,经常会用到一些方法.虽然简单但是经常使用.因此做成笔记,方便以后查阅 这篇博文先说明构造和使用这些方法. 1,判断String类型数据是否包含中文 可以通过正则表达 ...

  7. Java实现CORS跨域请求

    问题 使用前后端分离模式开发项目时,往往会遇到这样一个问题 -- 无法跨域获取服务端数据 这是由于浏览器的同源策略导致的,目的是为了安全.在前后端分离开发模式备受青睐的今天,前端和后台项目往往会在不同 ...

  8. 翻译 | 玩转 React 表单 —— 受控组件详解

    原文地址:React.js Forms: Controlled Components 原文作者:Loren Stewart 译者:小 B0Y 校对者:珂珂君 本文涵盖以下受控组件: 文本输入框 数字输 ...

  9. C++11获取线程的返回值

    C++11 std::future and std::promise 在许多时候,我们会有这样的需求--即我们想要得到线程返回的值. 但是在C++11 多线程中我们注意到,std::thread对象会 ...

  10. mongoDB学习手记2--建库、删库、插入、更新

    上一篇  讲了在windows系统下的安装和启动,本文主要讲怎么建库.删库.插入.更新 在讲之前我们说一下mongoDB的一些基本概念,我们对比关系型数据库能更直观的理解 SQL术语/概念 Mongo ...