memcached最大能保存1M的數據,所以對於小的文本文件是徹底可行的。 html
腳本函數以下,將天氣預報網的某城市JSON數據保存到memcache中: linux
function cacheData() { expir=18000 mem='10.10.10.10' tmp=`curl http://m.weather.com.cn/data/101280601.html -s` | iconv -f utf-8 -t gbk tmp_length=`expr length $tmp` #tmp_length=${#tmp} printf "set WEATHER_FORECAST_ID_$id 0 $expir $tmp_length\r\n$tmp\r\n" | nc $mem 11211 }本例是直接將網頁文件讀取到變量中,亦可以使用 wget -o或者 curl -o參數將其導出到文本。爲何使用nc而不是telnet呢?由於telnet不支持管道,也就是說不能將命令發送到telnet去執行。此外,因爲服務器編碼是GBK(系統編碼爲 echo $LANG),而返回的數據是utf-8,可經過curl -I命令獲取網頁head信息從而查看到編碼格式:
curl -I http://m.weather.com.cn/data/101280601.html返回頭部:
所以要使用iconv命令轉換編碼格式,參考:curl抓取亂碼 web
memcache命令須要傳入數據長度的參數,所以須要獲取倒文本文件或者字符串數據的長度。文本文件的長度能夠使用wc -c命令獲取。字符串的長度經過expr length $tmp來得到,若是使用shell內部操做符的方式如${#tmp}則會將中文以及特殊符號只看成一個字符所以不行。 shell