經過shell存儲網頁到memcache

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

  • key key 用於查找緩存值
  • flags 能夠包括鍵值對的整型參數,客戶機使用它存儲關於鍵值對的額外信息                                          
  • expiration time 在緩存中保存鍵值對的時間長度(以秒爲單位,0 表示永遠)                                           
  • bytes 在緩存中存儲的字節點
  • value 存儲的值(始終位於第二行)

參考:利用shell命令操做Memcachedlinux shell 字符串操做(長度,查找,替換)詳解緩存

memcached參數設置分析wget與curl發送web請求方式的區別 服務器

相關文章
相關標籤/搜索