Redis存储AccessToken
AccessToken 2小时有效。
就不要每次都调取了,这样会造成浪费。
或者存入Session中,设置过期时间。
或者存入Redis中,设置过期时间。
过期之后,进行重新获取。
<?php
class WeixinAction extends CommonAction{
public $red;
const TOKEN_EXPIRES = 1000;
public function _initialize(){
parent::_initialize();
vendor('Func.Red');
$this->red = Red::create();
}
// 获取access_token
public function get_access_token() {
// 查询缓存中是否存在
$k = "access_token_".C('APPID');
if ($this->getCacheTtl($k)) {
return $this->getCache($k);
}
vendor('Func.Http');
// 获取Token
$request_url = "https://api.weixin.qq.com/cgi-bin/token?";
$request_url .= "grant_type=client_credential&appid=".C('APPID')."&secret=".C('APP_SECRET');
$data = json_decode(Http::doGet($request_url,30),true);
$this->setCache($k,$data['access_token'],$data['expires_in'] - self::TOKEN_EXPIRES);
return $data['access_token'];
}
// 存
protected function setCache($k, $v, $expires = -1)
{
if ($expires == -1) {
return $this->red->set($k, $v);
} else {
return $this->red->setex($k, $expires, $v);
}
}
// 取
public function getCache($k) {
return $this->red->get($k);
}
// 查看剩余时间
public function getCacheTtl($k)
{
$ttl = $this->red->ttl($k);
if ($ttl != '-2') {
return $ttl;
} else {
return false;
}
}
// 查看是否存在
public function cacheExists($k)
{
return $this->red->exists($k);
}
}
想得到AccessToken需要知道AppID和AppSecret。这两个数据,可以配置起来。
然后需要初始化Redis。
然后需要几个独立的Redis函数。
存储,获取,判断是否过期。
判断Redis中是否存在,且未过期。
如果有,直接获取。
如果没有,通过HttpGet请求,得到AccessToken。存入Redis中,并返回。
Redis很强大,只要保证key值不重复,就可以存储任何数据。
这里key值通过AppID进行唯一标示,防止有别的access_token也要存储。
PHP的redis扩展函数,功能强大!
Redis存储AccessToken的更多相关文章
- nginx+iis+redis+Task.MainForm构建分布式架构 之 (redis存储分布式共享的session及共享session运作流程)
本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,上一篇分享文章制作是在windows上使用的nginx,一般正式发布的时候是在linux来配 ...
- Redis存储Tomcat集群的Session
Redis存储Tomcat集群的Session 如何 做到把新开发的代码推送到到生产系统中部署,生产系统要能够零宕机.对使用用户零影响. 设想 是使用集群来搞定,通过通知负载均衡Nginx,取下集群中 ...
- redis 存储session实现session共享
nginx 作为代理 tomcat集群 redis存储共享session nginx采用轮询方式将动态请求反向代理给tomcat,tomcat通过加载相应jar包方式实现获得redis中共享的sess ...
- Tomcat 使用Redis存储Session
Tomcat Redis Session Github 地址. 下载 commons-pool2-2.2.jar,jedis-2.5.2.jar,tomcat-redis-session-manage ...
- Asp.net Core 使用Redis存储Session
前言 Asp.net Core 改变了之前的封闭,现在开源且开放,下面我们来用Redis存储Session来做一个简单的测试,或者叫做中间件(middleware). 对于Session来说褒贬不一, ...
- php使用redis存储
一.Redis扩展模块 # wget https://codeload.github.com/phpredis/phpredis/zip/develop -O phpredis.zip # unzip ...
- Redis 存储、查询
[TOC] 数据存储 假设我们在MySQL数据库中有这样一张表: mysql> desc user_info; Field Type Null Key Default Extra id int( ...
- Redis存储Session
net Core 使用Redis存储Session 前言 Asp.net Core 改变了之前的封闭,现在开源且开放,下面我们来用Redis存储Session来做一个简单的测试,或者叫做中间件(m ...
- redis存储session配制方法
redis存储session配制方法需要三个模块: 1.redis 2.express-session 3.connect-redis 项目中的配置方法代码片段如下: 首先连接redis,连接redi ...
随机推荐
- python fire库的使用
一. 介绍 fire是python中用于生成命令行界面(Command Line Interfaces, CLIs)的工具,不需要做任何额外的工作,只需要从主模块中调用fire.Fire(),它会自动 ...
- python中的set类型
一. 定义 set是一个无序且不重复的元素集合 set和dict类似,是一组key的集合,但不存储value set有以下特性: 1. 由于key不能重复,所有set中没有重复的key 2. 元素为不 ...
- 解决Oracle数据库IP地址改变创建数据库的问题
方案一 查了相关的资料后才知道,只要修改安装Oracle的目录下面的listener.ora和tnsnames.ora里面的内容即可.看图看图 修改什么内容呢?看图看图. 就是HOST地址改一下就可 ...
- 上传图片到阿里云oss
阿里云地址 登录阿里云管理控制台,创建对象存储oss private static final String endpoint = "http://oss-cn-shanghai.aliyu ...
- Fiddler工作原理与代理设置
1,什么是Fiddler Fiddler是一个http协议调试代理工具,它能够记录客户端和服务器之间的所有 HTTP请求,可以针对特定的HTTP请求,分析请求数据.设置断点.调试web应用.修改请求的 ...
- 剑指offer--37.和为S的两个数字
链接:https://www.nowcoder.com/questionTerminal/390da4f7a00f44bea7c2f3d19491311b来源:牛客网@华科渣硕 不要被题目误导了!证明 ...
- DRF 的 版本,解析器,与序列化
DRF 的 版本,解析器,与序列化 补充 配置文件中的 类的调用: (字符串) v1 = ["view.xx.apth.Role","view.xx.apth.Role& ...
- 持久层框架:MyBatis 3.2(1)
MyBatis 的前身就是 iBatis .是一个数据持久层(ORM)框架. iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架.iBATIS提供的持久 ...
- 2 秒杀系统模拟基础实现,使用Redis实现
这一篇,我们来使用redis进行数据存储. 新建一个redis的service实现类 package com.tianyalei.service; import com.tianyalei.model ...
- 命令行工具jdb调试Java程序
一直在gdb 下调试c/c++程序. 突然要写个java程序,又不是很喜欢使用eclipse,那怎么调试程序呢.你还可以使用 jdb. 它是jdk 内置的一个java debug工具.类似与 gdb. ...