2014-01-04 1 views
0

У меня есть огромный многомерный массив с конфигурациями, которые я хочу сохранить в памяти. Эти конфигурации определяют, могут ли пользователи войти на веб-страницу.Правильно ли использовать кеш APC для хранения информации, связанной с определенным сеансом?

Первоначально i tought APC будет кэшировать данные только в течение определенного сеанса. Но быстро я понимаю, что я ошибся.

Итак, я придумал эту идею.

#Codeigniter множеств а session_id

$sessionId = $this->session->userdata('session_id'); 

# и с этой session_id я могу PREfix каждый ключ, хранящийся с кэшем APc

$key = $session_id . '_' . 'config'; 

#then я сериализовать массив данных

$data = serialize($configurations_array); 

#load APC КЭШ БИБЛИОТЕКА

$this->load->driver('cache', array('adapter' => 'apc', 'backup' => 'file')); 

#set ДАННЫХ И кэша, используя тот же длительность сеанса ОТ CONFIG FILE

$this->cache->save($key, $data_serialized, $this->config->item('sess_expiration')); 

ДАННЫЕ # Чтение из кэша

$cached_configurations = $this->cache->get($key); 
var_dump($cached_configurations); 

#remove ДАННЫЕ О LOGOUT

apc_delete($key); 

Что вы можете сказать об этом?

EDIT

Я забыл упомянуть, что я проверил его и он работает отлично.

+0

Каковы данные, которые вы храните? (Можно ли его воссоздать, если он выпадет из кеша?) – duskwuff

ответ

2

Почему вы не связываете данные, связанные с сеансом, в самом сеансе (очевидно, не в cookie сеанса, а на стороне сервера)? Я думаю, что CodeIgniter предоставляет некоторые возможности для хранения данных сеанса на стороне сервера (без использования APC).

Ваше решение, созданное вручную, может работать, но кажется нетрадиционным способом решения очень стандартной проблемы. В простом PHP я просто использую $_SESSION['foo'] = 'bar' после session_start() для хранения данных сеанса на стороне сервера. В cookie сеанса хранится только идентификатор сеанса.

This article объясняет, как использовать собственные PHP-сессии с помощью CodeIgniter. Собственные сессии PHP поддерживаются обычными файлами, регулярно очищаемыми. Если данные сеанса очень велики, вы можете рассмотреть storing it in the database.

Независимо от того, какое решение вы выбрали, мой совет - сохранить его простым и использовать стандартные решения.

+1

спасибо за обмен.Мне пришлось заменить сеанс codeigniter на собственный сеанс, но с этим решением я смог сохранить эти 1500 символов в сеансе. Это намного лучше, чем использование APC вручную. – Lothre1

Смежные вопросы