Ankündigung

Einklappen
Keine Ankündigung bisher.

Wie SQL Abfrage in memcache schreiben

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Wie SQL Abfrage in memcache schreiben

    Hallo,

    manual hab ich bereits gelesen und es nun auch mehrere tage versucht aber ich verstehe es leider nicht. Nach Möglichkeit bitte auch nicht darauf hinweisen, dass memcache nur für megaseiten einzusetzen ist...

    Also ich hab z.B. folgende SQL Abfrage:

    PHP-Code:
    // Chat online users:
    $chat_online_user_ids = array();
    $chat_online_user_names = array();
    $sql 'SELECT
        userID,
        userName
        FROM
        `ajax_chat_online`;'
    ;
    $result $db->sql_query($sql);
    while(
    $row $db->sql_fetchrow($result))
        {
        
    array_push($chat_online_user_ids$row['userID']);
        
    array_push($chat_online_user_names$row['userName']);
        }
    $db->sql_freeresult($result); 
    Diese würde ich nun gerne so gestalten, dass die Abfrage für 10 Minuten im Memcache steht. Die Verbindung zum memcache steht bereits. eingetragen in der php.ini...kein deamon (was auch immer das ist)

    Ich habe es jetzt z.B. so geschrieben, dies scheint aber falsch zu sein, da nichts in den memcache geschrieben wird.

    PHP-Code:
    $chatuser $memcache->get("chatuser");

    if (!
    $chatuser)        
    {
    // Chat online users:
    $chat_online_user_ids = array();
    $chat_online_user_names = array();
    $sql 'SELECT
        userID,
        userName
        FROM
        `ajax_chat_online`;'
    ;
    $result $db->sql_query($sql);
    while(
    $row $db->sql_fetchrow($result))
        {
        
    array_push($chat_online_user_ids$row['userID']);
        
    array_push($chat_online_user_names$row['userName']);
        }
    $db->sql_freeresult($result);
    $memcache->set("chatuser",$chatuser,0,600); 

    danke

  • #2
    PHP-Code:
    $memcache->set("chatuser",$chatuser,0,600); 
    Schaut so aus, dass $chatuser leer ist.

    Kommentar


    • #3
      ich versteh leider nicht was du damit sagen willst. ist es zu tief? muss es innerhalb von dem while sein?

      Kommentar


      • #4
        ist es vielleicht so richtig? irgendwie nicht..sonst würde er es ja cachen...

        PHP-Code:
        $chatuser $memcache->get("chatuser"); 

        if (!
        $chatuser)         

        // Chat online users: 
        $chat_online_user_ids = array(); 
        $chat_online_user_names = array(); 

        $sql 'SELECT 
            userID, 
            userName 
            FROM 
            `ajax_chat_online`;'

            
        $chatuser $db->sql_query($sql); 
        $memcache->set("chatuser",$chatuser,0,600);

        while(
        $row $db->sql_fetchrow($chatuser)) 
            { 
            
        array_push($chat_online_user_ids$row['userID']); 
            
        array_push($chat_online_user_names$row['userName']); 
             
            } 
        $db->sql_freeresult($chatuser); 

        Kommentar


        • #5
          In beiden Codeausschnitten machst du nichts mit $chatuser. Im ersten ist die Variable leer, im zweiten enthält sie eine Result-Resource.

          Kommentar


          • #6
            bitte erbarme sich jemand und füge den code ein damit es funktioniert. danke

            Kommentar


            • #7
              Bau dein Code so um, dass in Chat User genau das drinnen ist, was du brauchst. Wenn das klappt baust du den memcache Code umzu.

              Ich kann da grad nicht mehr zu sagen, da ich den memcache nie genutzt habe, aber das der code falsch ist, ist offensichtlich.

              Ne gute Frage ist auch, was

              PHP-Code:
              array_push($chat_online_user_ids$row['userID']);
              array_push($chat_online_user_names$row['userName']); 
              mit $chatuser zu tun hat.

              Einfach mal Zeile für Zeile durchdenken was dein Code jetzt macht und was du eigentlich willst.

              Kommentar


              • #8
                So sollte es lüppen...

                PHP-Code:
                $chat_online_user_ids $memcache->get("chat_online_user_ids");
                $chat_online_user_names $memcache->get("chat_online_user_names");  

                if (!
                $chat_online_user_ids || !$chat_online_user_names)        
                {
                // Chat online users:
                $chat_online_user_ids = array();
                $chat_online_user_names = array();
                $sql 'SELECT
                    userID,
                    userName
                    FROM
                    `ajax_chat_online`;'
                ;
                $result $db->sql_query($sql);
                while(
                $row $db->sql_fetchrow($result))
                    {
                    
                array_push($chat_online_user_ids$row['userID']);
                    
                array_push($chat_online_user_names$row['userName']);
                    }
                $db->sql_freeresult($result);
                $memcache->set("chat_online_user_ids",$chat_online_user_ids,0,600); 
                $memcache->set("chat_online_user_names",$chat_online_user_names,0,600); 

                Die Variable, welche du aus Memcache holst, muss für den Script auch verwertbar sein. Daher bringt es nichts, einfach eine neue Variable zu erstellen. Der Einfachkeithalber nehmen wir die im SQL-Teil auch verwendeten Variablennamen.

                Da es 2 Variablen sind, musst du auch 2 Keys aus dem Memcache holen. Es sei denn, zu würdest diese Variablen zu einem Array, etc kombinieren, aber bei 2 Variablen ist das imho nicht nötig.

                Du musst auch darauf achten, was du in den Memcache schreibst. $chatuser wurde vorher nie gesetzt, also schreibst du auch nix rein ...

                Kommentar

                Lädt...
                X