2016-02-15 9 views
0

Я работаю над веб-приложением, которое использует mysql как backend и redis как кеширующий сервер, и я сохранил записи в базе данных mysql, а также redis (используя библиотеку predis).Как получить связанные данные в Redis, Predis?

Во время сбора записей из базы данных сначала проверьте, присутствует ли ключевой ключ (первичный ключ i.e id), если «да» получает данные непосредственно из redis, иначе попадает в базу данных для данных.

Предположим, что таблицы базы данных сообщений, комментариев.

Во время хранения данных для записи, комментарии подробности, используемых сообщения, комментарии таблицы для хранения соответствующих данных.

Комментариев таблицы, содержащие внешний ключ после таблицы называется POST_ID

В Redis сервера, используется хэш-ключ (ID) и для сообщений, комментариев и но различных областей для поста, комментариев, как post_ {ID} на пост, comment_ {ID} для комментариев и сохраненных значений с помощью H Установите, SADD Redis команды в allposts, allcomments множеств.

Легко выполнить операцию соединения с использованием обычного запроса sql для извлечения связанных данных.

Есть ли какие-либо решения для сбора связанных данных в redis или predis?

ответ

0

Вы можете использовать префиксы для связанных данных, таких как group1_yourhashedkey, group2_yourhashedkey ... и т. Д. Вы не можете подключаться к Redis. Redis - это сервер кеша, а не сервер sql.

http://redis.io/commands/KEYS

Я также предлагаю не использовать первичный ключ из SQL в качестве ключа, потому что вы используете более одной таблицы, и, скорее всего, вы будете иметь повторяющиеся числовые идентификаторы (особенно, если вы используете Autoincrement таблицы). Сделать md5 с чем-то уникальным.

0

Ну, есть способы сделать «присоединиться» к redis, но они не стоят усилий. Особенно, когда вы используете Redis в качестве кэша прокси:

Во время выборки записей из базы данных, сначала проверьте ли ключ присутствует (первичный ключ т.е. идентификатор) в Redis, если «да» получить данные непосредственно из Redis, в противном случае удар база данных для данных.

Вы, наверное, уже есть функция, как:

function getDataByIds($table, $ids) 

где $ таблицы «сообщения» или «комментарии» и т.д., и $ Идентификаторы ищутся ключи.

Сделайте это быстро (используйте http://redis.io/commands/hmget для загрузки, используйте «SELECT * FROM commments WHERE id IN (1,2,3,4, ..)»Для загрузки отсутствуют ключи в одном запросе, используйте конвейерная для установки в Redis загружены ключи)

Тогда просто вручную загружать внешние ключи:

$comments = getDataByIds('comments', $commentsIds); 
$postsIds = array_column($comments,'post_id'); 
$posts = getDataByIds('posts', $postsIds); 
foreach($comments as &$comment) { 
    $comment['post'] = $posts[$comment['post_id']]; 
}; 

Если вы хотите сделать присоединяется на стороне сервера, вы можете попробовать:

http://redis.io/commands/SORT

SORT mylist BY weight_*->fieldname GET object_*->fieldname 

или с помощью Lua скриптов.

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