使用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] ); } functiongetAccessToken (){ return $redis->get('wx_access_token') }
上面有一個注意點,過期時間需要設定比7200小一些。防止極端情況,比如剛好在7200秒拿到token,去微信呼叫介面。因為調取介面也是需要時間的,這樣token就會過期了,導致錯誤。
連結:https://mp.weixin.qq.com/s/xyUd1kqySbptjtbUu9Ivdw