Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

LeafaR19

Cache interno

Recommended Posts

Vou tentar explicar da melhor forma possível, mas não pe muito fácil....

 

Vou montar um jogo estilo MMORPG, mas é claro que tenho que fazer o possível pra não ficar fazendo consultas no mysql, aí pensei o seguinte, fazer um cache interno, java tem, e várias plataformas também ja vi, mas ainda não consegui acha pro PHP, sou um player, vou jogando e meus dados é gravado em um cache interno, e somente a cada 15 minutos iria salvar esses dados no DB, assim não averia tanta query indo para do DB/mysql e fazendo o servidor ficar lerdo, usaria um tipo de classe que salvaria tudo e depois enviaria...

 

Alguém tem alguma idéia?

 

Ex: cache interno de java

 

package com.l2jfree.gameserver.datatables;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javolution.util.FastMap;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.l2jfree.Config;
import com.l2jfree.L2DatabaseFactory;
import com.l2jfree.gameserver.model.L2TeleportLocation;

/**
 * This class ...
 *
 * @version $Revision: 1.3.2.2.2.3 $ $Date: 2005/03/27 15:29:18 $
 */
public class TeleportLocationTable
{
	private final static Log						_log	= LogFactory.getLog(TeleportLocationTable.class.getName());

	private static TeleportLocationTable			_instance;

	private FastMap<Integer, L2TeleportLocation>	_teleports;

	public static TeleportLocationTable getInstance()
	{
		if (_instance == null)
		{
			_instance = new TeleportLocationTable();
			_instance.reloadAll();
		}
		return _instance;
	}

	private TeleportLocationTable()
	{

	}

	public void reloadAll()
	{
		_teleports = new FastMap<Integer, L2TeleportLocation>();

		Connection con = null;
		try
		{
			try
			{
				con = L2DatabaseFactory.getInstance().getConnection(con);
				PreparedStatement statement = con.prepareStatement("SELECT Description, id, loc_x, loc_y, loc_z, price, fornoble FROM teleport");
				ResultSet rset = statement.executeQuery();
				L2TeleportLocation teleport;

				while (rset.next())
				{
					teleport = new L2TeleportLocation();

					teleport.setTeleId(rset.getInt("id"));
					teleport.setLocX(rset.getInt("loc_x"));
					teleport.setLocY(rset.getInt("loc_y"));
					teleport.setLocZ(rset.getInt("loc_z"));
					if (Config.ALT_GAME_FREE_TELEPORT)
						teleport.setPrice(0);
					else
						teleport.setPrice(rset.getInt("price"));
					teleport.setIsForNoble(rset.getInt("fornoble") == 1);

					_teleports.put(teleport.getTeleId(), teleport);
				}

				rset.close();
				statement.close();

				_log.info("TeleportLocationTable: Loaded " + _teleports.size() + " Teleport Location Templates.");
			}
			catch (Exception e)
			{
				_log.error("error while creating teleport table ", e);
			}
		}
		finally
		{
			try
			{
				if (con != null)
					con.close(); 
			}
			catch (SQLException e)
			{
				e.printStackTrace();
			}
		}
 	}

	/**
	 * @param template id
	 * @return
	 */
	public L2TeleportLocation getTemplate(int id)
	{
		return _teleports.get(id);
	}
}

Ele salva todos os teleports em uma classe, assim quando alguem vai teleporta ele checa no "cache interno" e não no db, facilitando o mysql...

 

Gostaria de fazer cache interno em PHP, não é tão fácil, tentei várias coisas, então vim aqui pra pedir ajuda de outros profissionais em PHP

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acredito que você possa trabalhar com seções, ou persistir no objeto mesmo.

php também tem OO ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode ir salvando as informações em TXTs (ou XMLs) e de X em X minutos você roda um cronjob que pega todos esses arquivos e "publica" no banco de dados.

 

Procure sobre memcached, talvez te ajude. ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.