Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Caching record con ordinamento casuale

    Salve a tutti,
    avrei necessità di creare una cache per dei record di un database, ma come visualizzazione avrei la necessità di vederli random. Faccio un'esempio pratico nel caso in cui non sono stato chiaro.

    ho la mia query che mi restituisce diversi record, è una join fra diverse tabelle (circa 3 o 4 a seconda della query), volevo cachare il risultato o anche la pagina in se, ma ho la difficoltà che questi record devono essere visualizzati ordinati in modo casuale, fino a che faccio di continuo la query non c'è nessun problema perchè me la sgavagno con l'ORDER BY RAND(), l'unico problema che mi sorge ora, che con i visitatori che ho, comincia ad essere oneroso per il server..

    avevo intenzione di usare una classe di caching che è presente in opencart, che è abbastanza semplice e facile da gestire.

    Grazie per la risposta

  2. #2
    Dipende da come funziona la classe di caching

  3. #3
    te la posto, ma questa classe non permette di riordinare i dati, visto che li memorizzo come stinghe

    Codice PHP:
    <?php
    final class Cache 
        private 
    $expire 3600

      public function 
    __construct() {
            
    $files glob(DIR_CACHE 'cache.*');
            if (
    $files) {
                foreach (
    $files as $file) {
                    
    $time substr(strrchr($file'.'), 1);
                   if (
    $time time()) { unlink($file); }
            }
            }
      }

        public function 
    get($key) {
            
    $files glob(DIR_CACHE 'cache.' $key '.*');
            if (
    $files) {
                foreach (
    $files as $file) {
                    
    $handle fopen($file'r');
                    
    $cache fread($handlefilesize($file));
                    
    fclose($handle);
                    return 
    unserialize($cache);
                }
            }
      }

      public function 
    set($key$value) {
           
    $this->delete($key);
            
    $file DIR_CACHE 'cache.' $key '.' . (time() + $this->expire);
            
    $handle fopen($file'w');
            
    fwrite($handleserialize($value));
            
    fclose($handle);
        }
        
      public function 
    delete($key) {
            
    $files glob(DIR_CACHE 'cache.' $key '.*');
            if (
    $files) {
               foreach (
    $files as $file) {
                   
    unlink($file);
               }
            }
      }
    }
    ?>

  4. #4
    Visto che la cache consiste in un elenco di file in una directory, leggi quella directory, estrai le chiavi dai nomi dei file, le metti in un array, lo mescoli ed estrai i valori dalla cache usando l'elenco di chiavi mescolate.

  5. #5
    Codice PHP:
    [..] serialize($value) [..] 
    Questa riga mi può aiutare molto..

    visto che me la salva in un file, ma il mio problema di riordinarli casualmente rimane come faccio a ordinare casualmente un'array senza perdere troppo tempo.. visto che i risultati possono essere tanti :S

  6. #6
    Dipende da cosa significa "tanti". Fare lo shuffle() su un array di un milione di valori sul mio portatile richiede circa 1,3 secondi.

  7. #7
    faccio due prove

    intanto grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.