Portal SAMP
[Ajuda] melhor forma de usar cache_delete - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] melhor forma de usar cache_delete (/showthread.php?tid=3927)



melhor forma de usar cache_delete - tylerthecreator - 25/08/2023

Boa tarde, galera!

Busquei tutoriais e formas de uso do "cache_delete" e não encontrei, alguém pode me ajudar? Qual melhor forma de uso? Devo usar apenas nos SELECT ou em UPDATE também é necessário? 


Este exemplo de uso está correto?
Código:
    mysql_format(mysql, string, sizeof string, "SELECT `Nome` FROM `contas` WHERE `Nome`='%e';", account);
    new Cache:result = mysql_query(mysql, string);

    if(cache_num_rows())
    {
            etc...
            return true;
    }

    cache_delete(result);



RE: melhor forma de usar cache_delete - White_Blue - 25/08/2023

Não, você não precisa atualizar o banco de dados após usar o cache_delete, pois esse comando não afeta diretamente o banco de dados, apenas deleta o cache da memória.

Mas vale lembrar o seguinte, cache não vale para valores permanentes do banco de dados, o cache é apenas válido para valores temporários, que você pode definir usando as funções cache_set_active e cache_get_value.

Para deletar valores permanentes no banco de dados, você pode executar a query DELETE.

Exemplo:
Código PHP:
mysql_query(MySQL"DELETE FROM players;"); // Deleta todos os dados contidos na tabela 'player' 



RE: melhor forma de usar cache_delete - Dr Editor - 25/08/2023

Sua dúvida está relacionada a propria função. Basta interpretá-la.
Código PHP:
mysql_query(MySQL:handle, const query[], bool:use_cache true

O parâmetro use_cache especifica a necessidade do uso do cache e por padrão sempre vai usá-lo.
O fato de estar sempre ativo creio que seja porque a consulta, não importa qual for, retorna o número de linhas afetadas.
O ideal se utilizar DELETE, UPDATE ou INSERT é deixar o cache desativado, pois normalmente é pouco usado (isso quando é usado).
Sinceramente, não faço ideia do que acontece em um vazamento de memória onde o servidor fica muito tempo online e gera um certo acúmulo desse cache.
Talvez o servidor tome um crash ou comece a bugar os resultados... Dificil afirmar porque nunca tive essa experiência.
Recentemente sem querer descobri que havia esquecido de limpar o cache de algumas consultas, porém percebi isso muito cedo e não tive nenhum contra-tempo em decorrência disso.

Superficialmente o vazamento de memória consiste em gerar um identificador para cada consulta e ele é resposável pelo resultado desta.
Se não limparmos a memória esse identificador vai somando até, provavelmente, bater o limite do tipo numérico (2,147,483,647) e é nessa parte que nunca cheguei para contar o final da história (realmente estou curioso).


RE: melhor forma de usar cache_delete - strelo - 26/08/2023

Vou tentar ajudar com suas dúvidas sobre o uso do cache_delete e como aplicá-lo nos comandos SELECT e UPDATE.

O comando cache_delete é usado para liberar a memória ocupada por um conjunto de resultados em cache após uma consulta. Ele é particularmente útil quando você não precisa mais dos resultados da consulta armazenados na memória. No entanto, é importante observar que você só deve chamar cache_delete quando realmente não precisa mais dos dados armazenados em cache.

No exemplo que você forneceu, parece que você está usando a função mysql_query para executar uma consulta SELECT e, em seguida, verificando se há linhas retornadas usando cache_num_rows. Se houver linhas retornadas, você executa um bloco de código. No entanto, o código cache_delete(result) logo após isso pode não estar correto. Isso ocorre porque o result provavelmente é um identificador de resultado retornado pela função mysql_query e não é algo que a função cache_delete possa aceitar diretamente.

Aqui está um exemplo corrigido do seu código, assumindo que você está trabalhando no ambiente PAWNO:

Código:
mysql_format(mysql, string, sizeof string, "SELECT `Nome` FROM `contas` WHERE `Nome`='%e';", account);
new result = mysql_query(mysql, string);

if(cache_num_rows(result))
{
    // Processar os resultados aqui
    // ...

    // Após terminar de usar os resultados, você pode liberar a memória do cache
    cache_delete(result);

    return true;
}




Lembre-se de que você só deve chamar cache_delete quando tiver concluído o uso dos resultados da consulta. Essa função libera a memória ocupada pelo cache, tornando-a disponível para outras operações.

Quanto à sua pergunta sobre usar o cache_delete em consultas UPDATE, geralmente você não precisa se preocupar com isso. O cache_delete está mais relacionado a consultas SELECT que retornam resultados. Consultas UPDATE, INSERT e DELETE não lidam com conjuntos de resultados da mesma forma que as consultas SELECT, então normalmente você não precisa usar o cache_delete depois de uma operação de atualização.

Espero que isso tenha esclarecido suas dúvidas! Se você tiver mais perguntas, fique à vontade para perguntar.


RE: melhor forma de usar cache_delete - tylerthecreator - 26/08/2023

(26/08/2023 13:16)strelo Escreveu: Vou tentar ajudar com suas dúvidas sobre o uso do cache_delete e como aplicá-lo nos comandos SELECT e UPDATE.

O comando cache_delete é usado para liberar a memória ocupada por um conjunto de resultados em cache após uma consulta. Ele é particularmente útil quando você não precisa mais dos resultados da consulta armazenados na memória. No entanto, é importante observar que você só deve chamar cache_delete quando realmente não precisa mais dos dados armazenados em cache.

No exemplo que você forneceu, parece que você está usando a função mysql_query para executar uma consulta SELECT e, em seguida, verificando se há linhas retornadas usando cache_num_rows. Se houver linhas retornadas, você executa um bloco de código. No entanto, o código cache_delete(result) logo após isso pode não estar correto. Isso ocorre porque o result provavelmente é um identificador de resultado retornado pela função mysql_query e não é algo que a função cache_delete possa aceitar diretamente.

Aqui está um exemplo corrigido do seu código, assumindo que você está trabalhando no ambiente PAWNO:

Código:
mysql_format(mysql, string, sizeof string, "SELECT `Nome` FROM `contas` WHERE `Nome`='%e';", account);
new result = mysql_query(mysql, string);

if(cache_num_rows(result))
{
    // Processar os resultados aqui
    // ...

    // Após terminar de usar os resultados, você pode liberar a memória do cache
    cache_delete(result);

    return true;
}




Lembre-se de que você só deve chamar cache_delete quando tiver concluído o uso dos resultados da consulta. Essa função libera a memória ocupada pelo cache, tornando-a disponível para outras operações.

Quanto à sua pergunta sobre usar o cache_delete em consultas UPDATE, geralmente você não precisa se preocupar com isso. O cache_delete está mais relacionado a consultas SELECT que retornam resultados. Consultas UPDATE, INSERT e DELETE não lidam com conjuntos de resultados da mesma forma que as consultas SELECT, então normalmente você não precisa usar o cache_delete depois de uma operação de atualização.

Espero que isso tenha esclarecido suas dúvidas! Se você tiver mais perguntas, fique à vontade para perguntar.


Obrigado à todos pelas respostas. Muito obrigado, strelo, sua resposta foi certeira para minha dúvida.