<?xml version='1.0' encoding='UTF-8'?>
<rss version='2.0'>
	<channel>
		<title>cotonti.com : Расскажите в 2х словах как работает кеширование данных по $db_users</title>
		<link>https://www.cotonti.com</link>
		<description>Son konu mesajları</description>
		<generator>Cotonti</generator>
		<language>en</language>
		<pubDate>Wed, 15 Apr 2026 04:06:46 -0000</pubDate>

		<item>
			<title>Cotonti Aik</title>
			<description><![CDATA[<blockquote class="fp"><a href="https://www.cotonti.com/forums?m=posts&amp;q=9167&amp;d=1#45835">#45835</a> <strong>Alex300: </strong>
<p>Класс <strong>CotDb</strong> <a href="https://github.com/Cotonti/Cotonti/blob/master/system/database.php" rel="nofollow">https://github.com/Cotonti/Cotonti/blob/master/system/database.php</a> не содержит метода query_cache() и никогда его не содержал. И добавления этого метода в него не планируется. Работа с кешем в Cotonti устроена не много иначе.</p>

<p>Просьба: не вводить людей в заблуждение.</p>
</blockquote>

<p>Прошу пощения ориентировался на свою которую переписал под себя Вы правы. </p>
]]></description>
			<pubDate>Cum, 06 Oca 2023 19:59:33 -0000</pubDate>
			<link><![CDATA[https://www.cotonti.com/tr/forums?m=posts&q=9167&d=0#post45836]]></link>
		</item>
		<item>
			<title>Alex300</title>
			<description><![CDATA[<p>Класс <strong>CotDb</strong> <a href="https://github.com/Cotonti/Cotonti/blob/master/system/database.php" rel="nofollow" target="_blank" rel="nofollow noreferrer noopener">https://github.com/Cotonti/Cotonti/blob/master/system/database.php</a> не содержит метода query_cache() и никогда его не содержал. И добавления этого метода в него не планируется. Работа с кешем в Cotonti устроена не много иначе.</p>

<p>Просьба: не вводить людей в заблуждение.</p>
]]></description>
			<pubDate>Cum, 06 Oca 2023 19:50:20 -0000</pubDate>
			<link><![CDATA[https://www.cotonti.com/tr/forums?m=posts&q=9167&d=0#post45835]]></link>
		</item>
		<item>
			<title>Cotonti Aik</title>
			<description><![CDATA[<blockquote class="fp"><a href="https://www.cotonti.com/forums?m=posts&amp;q=9167&amp;d=1#45833">#45833</a> <strong>Alex300: </strong>
<p>Хм, интересно, и где же объявлен метод query_cache()? Может я что то упустил?</p>
</blockquote>

<p>Добрый вечер, как я понял метод <code>query_cache()</code> объявлен внутри класса <code>CotDB</code>, этот класс находится в файле <code>./system/lib/cotdb.php</code></p>

<p>Этот метод может быть объявлен по примеру:</p>

<pre class="brush:php;">
class CotDB
{
    // Другие свойства и методы класса

    /**
     * Execute a SQL query and cache the result
     *
     * @param string $query SQL query
     * @param string $cache_name Cache file name
     * @param int $ttl Cache TTL in seconds
     * @return CotDBResult
     */
    public function query_cache($query, $cache_name, $ttl = 600)
    {
        // Реализация метода
    }
}</pre>

<p><code>query_cache()</code> - это метод класса <code>CotDB</code>, который принимает три параметра: строку с SQL-запросом, строку с именем файла кеша и целое число с временем кеша (TTL) в секундах. Он возвращает результат выполнения запроса в виде объекта <code>CotDBResult</code>.</p>

<p>https://www.cotonti.com/system/lib/cotdb.php (The page you are looking for is unavailable for security reason.)</p>

<p>Как вариант реализации метода <code>query_cache()</code>:</p>

<pre class="brush:php;">
class CotDB
{
    // Другие свойства и методы класса

    /**
     * Execute a SQL query and cache the result
     *
     * @param string $query SQL query
     * @param string $cache_name Cache file name
     * @param int $ttl Cache TTL in seconds
     * @return CotDBResult
     */
    public function query_cache($query, $cache_name, $ttl = 600)
    {
        // Путь к файлу кеша
        $cache_file = $this-&gt;cache_dir . '/' . $cache_name . '.php';

        // Если файл кеша существует и не истек срок его жизни, возвращаем результаты из кеша
        if (file_exists($cache_file) &amp;&amp; (time() - filemtime($cache_file) &lt; $ttl)) {
            return unserialize(file_get_contents($cache_file));
        }

        // Выполняем запрос
        $result = $this-&gt;query($query);

        // Сохраняем результаты в кеш
        file_put_contents($cache_file, serialize($result));

        // Возвращаем результаты
        return $result;
    }
}</pre>

<p>Проверяем есть ли сам файл, не стек ли тайминг файла, если все хорошо берем из кеше если нет то следовательно к БД.</p>
]]></description>
			<pubDate>Cum, 06 Oca 2023 19:11:43 -0000</pubDate>
			<link><![CDATA[https://www.cotonti.com/tr/forums?m=posts&q=9167&d=0#post45834]]></link>
		</item>
		<item>
			<title>Alex300</title>
			<description><![CDATA[<p>Хм, интересно, и где же объявлен метод query_cache()? Может я что то упустил?</p>
]]></description>
			<pubDate>Cum, 06 Oca 2023 18:46:35 -0000</pubDate>
			<link><![CDATA[https://www.cotonti.com/tr/forums?m=posts&q=9167&d=0#post45833]]></link>
		</item>
		<item>
			<title>Cotonti Aik</title>
			<description><![CDATA[<p>Cotonti использует систему кеширования, чтобы ускорить работу сайта и уменьшить нагрузку на базу данных. Кеширование позволяет сохранять ответы на часто запрашиваемые запросы в памяти, чтобы не было необходимости выполнять их снова, когда они запрашиваются повторно.</p>

<p>В Cotonti, кеширование данных из таблицы $db_users выполняется с помощью функции $db-&gt;query_cache(). Она принимает запрос к базе данных и имя файла кеша, в который будут сохранены результаты. Например:</p>

<pre class="brush:php;">
$res = $db-&gt;query_cache("SELECT * FROM $db_users WHERE id=123", 'user_123');</pre>

<p>При следующем вызове этой функции с тем же именем файла кеша, будут возвращены сохраненные ранее результаты запроса, вместо того чтобы выполнять запрос снова. </p>

<p>Это ускоряет работу сайта, так как нет необходимости обращаться к базе данных при каждом запросе. Кеширование особенно полезно для таблиц, содержащих большое количество данных или часто запрашиваемых записей.</p>

<p>Кеш также может быть настроен так, чтобы он автоматически обновлялся после определенного времени или при выполнении определенных действий, таких как изменение данных в таблице. Это позволяет удерживать кеш в актуальном состоянии, чтобы он всегда возвращал точные и актуальные данные.</p>

<p><strong>Вот пример того, как можно использовать функцию $db-&gt;query_cache() для кеширования результатов запроса к таблице $db_users:</strong></p>

<pre class="brush:php;">
// Получаем данные пользователя с id=123 из кеша
$res = $db-&gt;query_cache("SELECT * FROM $db_users WHERE id=123", 'user_123');

// Если данные не найдены в кеше, выполняем запрос к базе данных
if (!$res) {
    $res = $db-&gt;query("SELECT * FROM $db_users WHERE id=123");
}

// Обрабатываем результаты запроса
while ($row = $res-&gt;fetch()) {
    // Работаем с данными пользователя
}</pre>

<p>В этом примере, если данные пользователя с id=123 уже есть в кеше, то они будут загружены из кеша, а не из базы данных. Если же данные не найдены в кеше, то будет выполнен запрос к базе данных, и результаты будут сохранены в кеш для последующих запросов.</p>
]]></description>
			<pubDate>Cum, 06 Oca 2023 15:16:08 -0000</pubDate>
			<link><![CDATA[https://www.cotonti.com/tr/forums?m=posts&q=9167&d=0#post45829]]></link>
		</item>
		<item>
			<title>Alex300</title>
			<description><![CDATA[<p>Когда достаешь одно поле - не уверен. Но в целом да.</p>
]]></description>
			<pubDate>Pzt, 03 Eki 2022 13:01:06 -0000</pubDate>
			<link><![CDATA[https://www.cotonti.com/tr/forums?m=posts&q=9167&d=0#post45709]]></link>
		</item>
		<item>
			<title>Kopusha</title>
			<description><![CDATA[<p>По сути если мне надо выдернуть в разных местах/модулях/плагинах что то наподобии (что естественно коряво, но я это писал только изучая php и оно как бы работает, но отсутствие LIMIT 1 меня уже напрягает;-) )</p>

<pre class="brush:php;">
$notify_lang = $db-&gt;query("SELECT user_lang FROM $db_users WHERE user_id=".$item['item_userid'])-&gt;fetchColumn();
</pre>

<pre class="brush:as3;">
$m_mail = $db-&gt;query("SELECT user_email FROM $db_users WHERE user_id=".$item['item_userid'])-&gt;fetchColumn();
</pre>

<p>мне лучше делать</p>

<pre class="brush:as3;">
ВМЕСТО		
//$notify_lang = $db-&gt;query("SELECT user_lang FROM $db_users WHERE user_id=".$item['item_userid'])-&gt;fetchColumn();
//$m_mail = $db-&gt;query("SELECT user_email FROM $db_users WHERE user_id=".$item['item_userid'])-&gt;fetchColumn();

ВОТ ТАК		
$u_usr = cot_user_data($item['item_userid']);
$notify_lang = $u_usr['user_lang'];
$m_mail = $u_usr['user_email'];</pre>

<p> </p>
]]></description>
			<pubDate>Pzt, 03 Eki 2022 09:41:35 -0000</pubDate>
			<link><![CDATA[https://www.cotonti.com/tr/forums?m=posts&q=9167&d=0#post45708]]></link>
		</item>
		<item>
			<title>Alex300</title>
			<description><![CDATA[<p>Вот тут <a href="https://github.com/Cotonti/Cotonti/blob/master/modules/users/inc/users.functions.php#L242" rel="nofollow" target="_blank" rel="nofollow noreferrer noopener">https://github.com/Cotonti/Cotonti/blob/master/modules/users/inc/users.functions.php#L242</a> - достаточно примитивно.</p>

<p>Основная магия тут:</p>

<pre class="brush:as3;">
static $u_cache = array();

if ($cacheitem &amp;&amp; isset($u_cache[$uid]))
{
	return $u_cache[$uid];
}
// ... получение данных пользователя и сохранение в $u_cache</pre>

<p>Статическая переменная <strong>$u_cache</strong> сохраняет свое значение между вызывами функции. Если вы несколько раз вызовите ее для полученя данных одного и того же пользователя (за один запрос к серверу) то данные из БД будут запрошены только один раз.</p>

<p>В другом варианте наверное что то похожее.</p>
]]></description>
			<pubDate>Pzt, 03 Eki 2022 07:28:00 -0000</pubDate>
			<link><![CDATA[https://www.cotonti.com/tr/forums?m=posts&q=9167&d=0#post45707]]></link>
		</item>
		<item>
			<title>Kopusha</title>
			<description><![CDATA[<p>Собственно что хочу понять: <br />
есть вот это - https://github.com/Cotonti/Cotonti/blob/master/system/functions.php#L2393</p>

<p>и вот это - https://github.com/Cotonti/Cotonti/blob/master/modules/users/inc/users.functions.php#L242</p>

<p>как там кеширование устроено, я не очень понимаю. ПРостыми словами бы)))<br />
Заранее спасибо!</p>
]]></description>
			<pubDate>Paz, 02 Eki 2022 11:36:42 -0000</pubDate>
			<link><![CDATA[https://www.cotonti.com/tr/forums?m=posts&q=9167&d=0#post45705]]></link>
		</item>
	</channel>
</rss>