Files
crm.clientright.ru/check_redis_vs_propfind.php
Fedor 01c4fe80b5 chore: snapshot current working tree changes
Save all currently accumulated repository changes as a backup snapshot for Gitea so no local work is lost.
2026-03-26 14:19:01 +03:00

110 lines
6.1 KiB
PHP
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* Проверка: что кешируется в Redis и что используется при открытии папок
*/
error_reporting(E_ALL);
ini_set('display_errors', 1);
echo "=== ЧТО КЕШИРУЕТСЯ В REDIS ===\n\n";
$redis = new Redis();
$redis->connect('147.45.146.17', 6379);
$redis->auth('CRM_Redis_Pass_2025_Secure!');
// 1. Что есть в Redis сейчас
echo "1⃣ ЧТО ИНДЕКСИРУЕТСЯ В REDIS (каждую минуту):\n";
echo "────────────────────────────────────────────────────────────────────────────\n";
$keys = $redis->keys('crm:nc:fileid:*');
echo " 📊 Всего записей: " . count($keys) . "\n\n";
// Примеры ключей
echo " 📋 Примеры ключей:\n";
$sampleKeys = array_slice($keys, 0, 5);
foreach ($sampleKeys as $key) {
$value = $redis->get($key);
$data = json_decode($value, true);
echo " - $key\n";
echo " fileId: {$data['fileId']}, name: {$data['name']}\n";
}
echo "\n ✅ ЧТО ЭТО: Индекс fileId для ОТДЕЛЬНЫХ ФАЙЛОВ\n";
echo " Используется для: Открытие конкретного файла\n";
echo " НЕ используется для: Открытие папки (список файлов)\n\n";
// 2. Что происходит при открытии папки
echo "2⃣ ЧТО ПРОИСХОДИТ ПРИ ОТКРЫТИИ ПАПКИ:\n";
echo "────────────────────────────────────────────────────────────────────────────\n";
$testFolder = '/crm/crm2/CRM_Active_Files/Documents/Project';
echo " 📁 Открываем папку: $testFolder\n\n";
echo " Шаг 1: Nextcloud делает PROPFIND запрос к S3\n";
echo " \"Дай мне список ВСЕХ файлов в этой папке\"\n";
echo " ⏱️ Время: 2-5 секунд\n\n";
echo " Шаг 2: S3 возвращает XML со списком файлов:\n";
echo " <?xml>\n";
echo " <file1>...</file1>\n";
echo " <file2>...</file2>\n";
echo " ... (может быть 100+ файлов)\n";
echo " </xml>\n\n";
echo " Шаг 3: Nextcloud парсит XML и показывает список\n\n";
echo " ❌ ПРОБЛЕМА: Этот PROPFIND запрос НЕ кешируется!\n";
echo " Каждый раз при открытии папки - новый запрос к S3\n\n";
// 3. Проверяем, есть ли кеш для папок
echo "3ЕСТЬ ЛИ КЕШ ДЛЯ ПАПОК (PROPFIND результаты)?\n";
echo "────────────────────────────────────────────────────────────────────────────\n";
$propfindKeys = $redis->keys('propfind:*');
echo " 📊 Ключей с префиксом 'propfind:': " . count($propfindKeys) . "\n";
if (count($propfindKeys) == 0) {
echo " ❌ Кеш для папок НЕ используется!\n";
echo " PROPFIND результаты НЕ кешируются\n\n";
} else {
echo " ✅ Кеш для папок есть!\n";
echo " Примеры:\n";
foreach (array_slice($propfindKeys, 0, 3) as $key) {
echo " - $key\n";
}
}
// 4. Разница
echo "4⃣ РАЗНИЦА МЕЖДУ ТЕМ ЧТО ЕСТЬ И ЧТО НУЖНО:\n";
echo "────────────────────────────────────────────────────────────────────────────\n";
echo " ✅ ЧТО ЕСТЬ (индексируется каждую минуту):\n";
echo " crm:nc:fileid:crm2/.../file.pdf => fileId\n";
echo " Используется для: Открытие КОНКРЕТНОГО файла\n";
echo " Пример: Открыть файл \"документ.pdf\" → берем fileId из Redis → быстро!\n\n";
echo " ❌ ЧТО НЕТ (но нужно для папок):\n";
echo " propfind:/crm/.../Project/ => список всех файлов в папке\n";
echo " Используется для: Открытие ПАПКИ (список файлов)\n";
echo " Пример: Открыть папку \"Project\" → PROPFIND к S3 → медленно!\n\n";
// 5. Решение
echo "5⃣ РЕШЕНИЕ:\n";
echo "────────────────────────────────────────────────────────────────────────────\n";
echo " 💡 Кешировать результаты PROPFIND запросов для папок:\n";
echo " - При открытии папки проверять кеш в Redis\n";
echo " - Если есть - брать из кеша (0.01 сек)\n";
echo " - Если нет - делать PROPFIND, кешировать (TTL 5 минут)\n";
echo " - При добавлении/удалении файла - очищать кеш папки\n\n";
echo " 📊 ОЖИДАЕМЫЙ ЭФФЕКТ:\n";
echo " Первое открытие папки: 3-5 секунд (как сейчас)\n";
echo " Повторное открытие: 0.05 секунды (из кеша) ⚡\n";
echo " Ускорение: в 60-100 раз!\n\n";
echo "=== ИТОГ ===\n";
echo "✅ Индексация fileId для файлов - работает (каждую минуту)\n";
echo "❌ Кеширование PROPFIND для папок - НЕ работает\n";
echo "💡 Нужно добавить кеширование PROPFIND результатов\n";