如果第一個指令碼不行,可以嘗試第二個指令碼方案!
網站採用了一些方法進行加速(redis\cdn),這樣就降低使用者訪問後端mysql的壓力、以及前端速度不太好的問題,對使用者請求到的所有頁面進行了緩衝,既然資料緩衝了,解決使用者看到的頁面是否為最新頁面就提上議程,下面這個指令碼就誕生了。
#!/bin/bash
# Author:Byrd
# Version:0.1
# Site:www.111cn.net
# Contact:root#111cn.net
# define category
for category in basic code database environment error mobile other project remark route service switch system
do
for ((i=2;i<15;i++))
do
# Define return value
RETURN=`curl -o /dev/null -s -k -w "%{http_code}" http://www.111cn.net /$category/page/$i/?r=y`
if [ $RETURN -eq 200 ]; then
# if return value 200,then flush page and category.
curl -o /dev/null -s -k -w "%{http_code}" http://www.111cn.net /$category/page/$i/?r=y >/dev/null 2>&1
curl -o /dev/null -s -k -w "%{http_code}" http://www.111cn.net /$category/?r=y >/dev/null 2>&1
else
# if return value not 200,then flush category first page and site page.break
curl -o /dev/null -s -k -w "%{http_code}" http://www.111cn.net /$category/?r=y >/dev/null 2>&1
curl -o /dev/null -s -k -w "%{http_code}" http://www.111cn.net /?r=y >/dev/null 2>&1
break
fi
done
done
將指令碼加入定時任務,由於網站不定期更新,更新不頻繁,因此每天執行任務即可。
[root@site scripts]# echo '#flush cache' >>/var/spool/cron/root #注釋
[root@site scripts]# echo '00 2 * * * /bin/sh /byrd/scripts/flush_site.sh >/dev/null 2>&1' >>/var/spool/cron/root #兩點執行計畫任務
[root@site scripts]# crontab -l
#flush cache
00 2 * * * /bin/sh /byrd/scripts/flush_site.sh >/dev/null 2>&1
另外一個思路:
1:redis的主要目的是為了快取資料;
2:把redis快取資料清空,然後重新啟動redis即可完成;
3:因為個人網站一般淩晨4:00左右訪問量最低,且更新周期不快;
這個指令碼一樣的功效,效果不如上面的指令碼,上面的額指令碼缺點是沒有做文章的判斷。
[root@www scripts]# cat clean_redis.sh
#!/bin/bash
# Author:Byrd
# Version:0.1
# Site:www.111cn.net
# Contact:root#111cn.net
CDATA=`ls -l /usr/local/redis/cache/dump.rdb | awk '{print $5}'` #取得硬碟快取資料大小
REDIS_PID=`ps aux | grep redis | grep -v grep | awk '{print $2}'` #取得redis進程id
if [ $CDATA -gt 3145728 ]; then
>/usr/local/redis/cache/dump.rdb
#kill ${REDIS_PID}
sleep 3
#/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
else
exit 1
fi
然後定時任務,每周或者每天執行一次即可!