使用Redis存放token


相信做過微信公眾號開發的phper都知道,調取微信的接口都需要帶上access_token的。access_token是公眾號的全局唯一接口調用憑據。這個access_token每天獲取的次數有限制,所以,我們需要自己保存。另外這個token也是有有效期的。所以,我們需要定時刷新,重新獲取access_token.

使用何種方式來保存呢?

如果使用mysql的話,一個表只來存放一條數據,感覺大材小用而且不太優雅。使用文件來保存的話,性能不是太好,另外還是稍微有些麻煩的,需要考慮臟讀的問題。

下面我來介紹一種簡單優雅且性能很好的方式,使用Redis來存放token。

兩個命令

Redis有很多種數據類型,在這里,我們只需要最簡單的數據類型string下的2個簡單的命令,就可以完成我們需要的功能。

  • set

  • get

這兩個命令都非常簡單,set是為一個鍵設置一個字符串。

$redis->set('name', 'monkeyking');

上面表示,將鍵name的值設置為monkeyking。另外,它還可以為鍵設置過期時間。可以設置過期時間實在太方便了。

$redis->set('name', 'monkeyking', ['ex' => 100]);
# 過期時間設置為100秒后

get命令是獲取一個字符串。下面代碼的意思是獲取到鍵name的值。

$redis->get('name');

使用redis除了性能好之外,還有一個非常好的地方。因為它是單線程架構,所有的命令都是按順序執行的。上一條命令執行完后,下一條才會接着執行,所以不會出現臟讀的情況。

實現功能

介紹完set及get后,就可以來完成我們的需求了。

微信獲取access_token的接口,返回的數據格式如下:

{"access_token":"xEaew2sI2dsAd","expires_in":7200}

我們只需要將xEaew2sI2dsAd存起來,並設置下過期時間就行了。

代碼如下:

function setAccessToken ($token) {
    return $redis->set(
        'wx_access_token',
        $token,
        ['ex'=>7000]
    );
}
function getAccessToken (){
    return $redis->get('wx_access_token')
}

上面有一個注意點,過期時間需要設置比7200小一些。防止極端情況,比如剛好在7200秒拿到token,去微信調用接口。因為調取接口也是需要時間的,這樣token就會過期了,導致錯誤。

 

鏈接:https://mp.weixin.qq.com/s/xyUd1kqySbptjtbUu9Ivdw


免責聲明!

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



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