За последние 24 часа нас посетили 22582 программиста и 1145 роботов. Сейчас ищут 647 программистов ...

Вопросы по реализации онлайна на MySQL и его кешированию на PHP

Тема в разделе "PHP для новичков", создана пользователем Вероломство, 14 дек 2020.

  1. Вероломство

    Вероломство Активный пользователь

    С нами с:
    19 июн 2017
    Сообщения:
    615
    Симпатии:
    24
    Никогда не делал подсчёт онлайна именно мускулом, никогда не делал кеширование и никогда не работал с файлами (запись и т.д.) поэтому...

    Что имеем?
    PHP:
    1. <?php
    2.  
    3.  
    4. namespace core;
    5.  
    6.  
    7. class Cache
    8. {
    9.     public static function set($file, $data, $time)
    10.     {
    11.         file_put_contents("tmp/cache/{$file}.txt", serialize([
    12.             'data' => $data,
    13.             'time' => strtotime('now + ' . $time)
    14.         ]));
    15.     }
    16.  
    17.     public static function get($file)
    18.     {
    19.         $cache_file = "tmp/cache/{$file}.txt";
    20.         if (is_file($cache_file)) {
    21.             $content = unserialize(file_get_contents($cache_file));
    22.             if (time() <= $content['time']) {
    23.                 return $content['data'];
    24.             }
    25.             unlink($cache_file);
    26.         }
    27.         return false;
    28.     }
    29. }
    30.  
    31. // Использование
    32. $user_online = Cache::get('online');
    33. if ($user_online === false) {
    34.     // комменты для большего понятия
    35.     // `datetime_last` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    36.     // select count(*) from `user` where timestampdiff(minute, `datetime_last`, now()) < ?
    37.  
    38.     $user_online = User::countBy('timestampdiff(minute, `datetime_last`, now()) < ?', [
    39.         1
    40.     ]);
    41.     Cache::set('online', $user_online, '1 minute');
    42. }
    43. $this->setVars(compact('user_online'));
    Что интересует:

    Правильно ли подобрана функция мускула для подсчёта (timestampdiff)?
    Правильно ли более-менее накалякан класс кеширования?
    Нужно ли удалять файл, если кеш умер (unlink - или пусть будет ведь он перезаписывается потом)?

    Самый главный вопрос:

    Вот я на винде сижу, а если я на линях, то как поведёт себя работа с файлом, если будут косяки с правами, то как дать их именно средствами php?
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.823
    Симпатии:
    736
    Адрес:
    Татарстан
    Дать права
    PHP:
    По кешированю, не очень понятно зачем дату внутри хранить и каждый раз весь контент вытягивать... Достаточно смотреть время создания файла для принятия решения, нужен кеш или уже нет.

    И это, вроде используется фреймворк, там родное кеширование иесть
     
    Вероломство нравится это.
  3. Вероломство

    Вероломство Активный пользователь

    С нами с:
    19 июн 2017
    Сообщения:
    615
    Симпатии:
    24
    ФВ не используется - это самописька полностью.

    Понял, Вас, за дату файла - персональное, допилю обязательно по дате :)

    В нюанс с ноликом в правах chmod тоже вник.

    Ок, порешали, спс.
     
  4. Вероломство

    Вероломство Активный пользователь

    С нами с:
    19 июн 2017
    Сообщения:
    615
    Симпатии:
    24
    @ADSoft, дату я понял как взять создания файла, но мне ведь надо устанавливать время действия кеша :(
     
  5. Вероломство

    Вероломство Активный пользователь

    С нами с:
    19 июн 2017
    Сообщения:
    615
    Симпатии:
    24
    @ADSoft, всё догнал, touch(), сори...
     
  6. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.823
    Симпатии:
    736
    Адрес:
    Татарстан
    Зачем устанавливать? При создании редактировании дата последнего изменения меняется автоматически
     
  7. Вероломство

    Вероломство Активный пользователь

    С нами с:
    19 июн 2017
    Сообщения:
    615
    Симпатии:
    24
    мне надо к дате создания-изменения добавлять время жизни кеша, я сделал уже, получилось всё, спс за указание направления...