通过shell存储网页到memcache

memcached最大能保存1M的数据,因此对于小的文本文件是完全可行的。

脚本函数如下,将天气预报网的某城市JSON数据保存到memcache中:

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抓取乱码

memcache命令需要传入数据长度的参数,因此需要获取倒文本文件或者字符串数据的长度。文本文件的长度可以使用wc -c命令获取。字符串的长度通过expr length $tmp来获得,如果使用shell内部操作符的方式如${#tmp}则会将中文以及特殊符号只当作一个字符因此不行。

  • key key 用于查找缓存值
  • flags 可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息                                          
  • expiration time 在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)                                           
  • bytes 在缓存中存储的字节点
  • value 存储的值(始终位于第二行)

参考:利用shell命令操作Memcached、linux shell 字符串操作(长度,查找,替换)详解、

memcached参数设置、分析wget与curl发送web请求方式的区别

你可能感兴趣的:(shell,memcache)