zoukankan      html  css  js  c++  java
  • 夺命雷公狗---微信开发62----所以memcache对access_token进行全局缓存优化

    公众号调用接口并不是无限制的,为了防止公众号的程序错误而引发微信服务器负载异常,默认情况下,

    每个公众号调用接口都不能超过一定限制,当超过一定限制时,调用对应接口会收到错误信息,造成调用失败。

    我们也可以在手册里面清晰的看得到,如下所示:

    我们的memcache可以将数据限时存放在内存中,我可可以将access_token放入到memcache中,将有效时间设置为2小时,在2小时内,

    我们直接从memcache中获取access_token,而不是每次都从腾讯服务器中去取access_token,这样就大大降低了对获取access_token接口的调用次数。

    当2小时后,memcache中的access_token失效,这时我们可以在次到腾讯的服务器获取新的access_token,然后在此缓存到memcache中,如此类推即可。

    memcache是需要安装的,详细的安装方法可以观看夺命雷公狗的memcache课程里面的第一节课,里面详细的介绍了memcache的安装方法

    废话不多说,直接用access_token.php进行修改,代码如下所示:

    <?php
        //原理,就是使用curl函数,发出http请求,获取access_token
        $appid = 'wxed89d8f74fa6fc51';
        
        //创建一个memcached对象
        $mem = new Memcache;
        //链接到memcached服务
        if(!$mem->connect('127.0.0.1',11211)){
            die('memcache链接失败');
        }
        
        $access_token = $mem->get($appid);
        //如果获取到,说明memcache存在这个access_token就直接使用
        //如果没有获取到,$access_token就会false,我们就按原来的方法获取,并且将access_token缓存到memcache中
        if(!$access_token){
            $appsecret = 'd4624c36b6795d1d99dcf0547af5443d';
            $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$appsecret}";
            
            //我们使用curl函数
            //初始化
            $ch = curl_init();
            //设置变量
            curl_setopt($ch, CURLOPT_URL,$url); //这意思是,设置好发送的url地址发送到那
            //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,$url); 这样的意思是对方要不要验证,如果不用则按照下面的即可
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,FALSE); //如果不用验证,这样即可
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,FALSE); //如果不用验证HOST主机这样即可
            curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); //将curl_exec()获取的信息以文件流的形式返回,而不是直接输出
            //执行
            $output = curl_exec($ch); //返回来的值是一个json格式的值
            //关闭句柄
            curl_close($ch);
            //对返回的json结果要将他转为一个数组
            $jsoninfo = json_decode($output,true);
            //测试以下,看下是否拿到返的回数组
            //var_dump($jsoninfo); 
            
            $access_token = $jsoninfo['access_token'];
            
            //将access_token缓存到memcache中去, MEMCACHE_COMPRESSED 是压缩的意思
            $mem->set($appid,$access_token,MEMCACHE_COMPRESSED,7000);
        }
  • 相关阅读:
    接口限流算法小记
    mac下操作小记
    Java代理(静态代理、JDK动态代理、CGLIB动态代理)
    关系数据库(RDBMS)小记
    Socket端口复用
    SSH使用小记
    HTTP缓存及其使用
    关于浏览器跨域访问(同源策略)
    awk入门教程
    链路追踪工具之Zipkin学习小记
  • 原文地址:https://www.cnblogs.com/leigood/p/5276534.html
Copyright © 2011-2022 走看看