Это пять! :)
Проблемку решил. У меня есть робот, который обслуживает мой магазин (в том числе общается в соцсетях). Вот он каждый час и чистит кэш. оставляет только 100 самых популярных товаров (берётся из таблицы products в поле view таким запросом:
SELECT product_id FROM vanoid.product where viewed>0 order by viewed desc limit 100
). Единственный возможный минус- может убить картинку, которую только что запрашивали, и запросили ещё раз сразу после чистки кэша. Ну- тогда просто в кэш оно запишется ещё раз. Пока буду тестировать.
Ком нужно- вот код. Написано на Delphi.
procedure TForm1.Cleancache1Click(Sender: TObject);
var q:TADOQuery;
SL:TStringList;
procedure GoDir(dir:string);
var i,ind:integer;
List:TStringList;
art:integer;
begin
if CloseAttempt then exit;
if not IDFTP1.Connected then IDFTP1.Connect;
IDFTP1.ChangeDir(dir);
List:=TStringList.create;
List.Clear; IDFTP1.List(List,'',false); List.Sort;
for i:=0 to List.Count-1 do
begin
if pos('.',List[i])=0 then GoDir(dir+'/'+List[i]);
if pos('.jpg',List[i])=length(List[i])-4+1 then
begin
art:=strtoint(Replace(Replace(dir,'/domains/тратата.ru/image/cache/data/img',''),'/',''));
if not SL.Find(inttostr(art),ind) then
begin
AddLog('Deleting from cache: '+List[i]);
IDFTP1.Delete(List[i]);
end
else
begin
AddLog(List[i]+' not deleted as top 100 popular');
end;
end;
end;
List.Clear; IDFTP1.List(List,'',false); List.Sort;
if list.Count=2 then
begin
IDFTP1.ChangeDir('..');
IDFTP1.RemoveDir(dir);
end;
List.Free;
end;
begin
AddLog('Cleaning image cache');
q:=TADOquery.Create(nil);
q.Connection:=MySqlConnection;
q.SQL.Add('SELECT product_id FROM vanoid.product where viewed>0 order by viewed desc limit 100');
q.Open;
SL:=TStringList.Create;
while not q.Eof do
begin
SL.Add(q.Fields[0].asstring);
q.Next;
end;
SL.Sort;
q.free;
GoDir('/domains/тратата.ru/image/cache/data/img');
SL.Free;
AddLog('Cleaning image cache complete');
end;