Redis-Краткое введение
Redis-это база данных ключей и значений с открытым исходным кодом, включенная в сеть, основанная на памяти и постоянном журнале, написанная на языке ANSI C и предоставляющая API на нескольких языках. С 15 марта 2010 года разработка Redis велась компанией VMware. С мая 2013 года Redis разрабатывается компанией Pivotal.( Автор Redis в настоящее время находится в офисе ) Спонсорство.
тип данных
Строка (Строка)
Список (Список)
Набор (Набор)
Набор сортировки (Упорядоченный набор)
Хэш (Хэш)
Redis – Сценарий Применения
Автор Redis антирез описывает некоторые из наиболее подходящих сценариев применения Redis. NoSQLFan кратко перечисляет их здесь, чтобы вы могли их увидеть:
Операция извлечения последних N данных
Перечислите приложение, возьмите ВЕРХНЮЮ операцию N
Приложение, требующее точной настройки времени истечения срока действия
Встречное применение
Операция Uniq для получения всех значений перестановки данных за определенный период времени
Система реального времени, система защиты от мусора
Pub/Sub Построение системы сообщений в реальном времени
Построение системы очередей
кэш
Операционный сценарий НИОКР
Отдел исследований и разработок радиотехнических операций, как сторона беспроводной связи Завод вооружения CMS, управление местоположением, центр управления, RBZ и другие инструменты оперативной поддержки были успешно созданы.
Список оружия
CMS: Сеялка с беспроводным Управлением
RBZ: Модель EAV (Динамическая Форма + Центр атрибутов + Система меток)
Центр привилегий: Модель RBAC3
Управление Местоположением: Все Зависит От Местоположения
^^^^^^^ ^^^^^^^ Возвращаясь к теме, вот как мы играем в Red в деталях.
Сценарии включают кэширование страниц CMS, ограничитель скорости API, анализ производительности страниц, статистику состояния API, интеллектуальные строки напоминания об исключениях CMS. В частности, применение анализа производительности страниц, статистики состояния API, интеллектуального напоминания CMS и т. Д. Просто зашкаливает, что делает производительность страниц и интерфейсов канбанскими и интеллектуализированными, а применение технологий становится понятным с первого взгляда.
сцена поле Некоторые пояснения
Сценарий применения: Какая категория приложений
Тип данных: Используемый тип данных
Описание кода: PHP, расширенный php redis
Кэширование страниц CMS
Строковые типы данных на основе Redis для Хранения статических данных страниц CMS Для повышения скорости доступа к страницам, связанным с CMS, и снижения давления mysql.
Тип данных: Строка
Сценарий приложения: кэширование
Код:
$staticHtml = Yii::app()->redis->get($cmsCacheKey);
if (! $staticHtml || $this->clearcache) {
$staticHtml = CmsTools::getStaticHtml($pageId, $cityCode);
Yii::app()->redis->setex($cmsCacheKey, 3600, $staticHtml);
}
Ограничитель скорости API
Строковые типы данных на основе Redis используются для управления частотой доступа к API. Контроль доступа к IP-адресу для запроса в течение определенного периода времени Официальные варианты использования
Тип данных: Строка
Сценарий применения: счетчик
Код:
public static function rateLimit($apiKey = null)
{
// Redis key value
$apiRunCountKey = Yii::app()->request->userHostAddress . '-' . $apiKey;
// Initialization interface access frequency
if (Yii::app()->redis->get($apiRunCountKey) === false) {
Yii::app()->redis->setex(
$apiRunCountKey,
self::$RateLimitTime,
self::$RateLimitCount
);
}
// Get the current executable frequency
$currentApiCount = Yii::app()->redis->decr($apiRunCountKey);
if ($currentApiCount < 0) {
Yii::log($apiRunCountKey, 'info', 'webadmin.cms.api.rate');
return false;
}
return true;
}
// CMS Page-Reset Frequency Control
return PowerApiService::rateLimit('cms-refresh-page-' . $pageId)
&& CmsTool::refreshStaticPage($pageId);анализ производительности
Типы данных упорядоченного набора на основе Redis, Анализ производительности выполнения страниц 。
Тип данных: Набор сортировки
Сценарии применения: Ранжирование
Код:
// Record PC Home Page Generation Time Based on City
Yii::app()->redis->zAdd(
'homepage-cache-profile',
round($endTime - $startTime, 2),
$this->letter
);
// Summarize PC Home Page Performance Data
Yii::app()->redis->zRange('homepage-cache-profile', 0, -1, true);
// Record CMS page reset time based on page
Yii::app()->redis->zAdd(
'cms-refresh-page-profile',
round($pageEndTime - $pageStartTime, 2),
$pageId
);
// Get pages with CMS, 0-30s performance
Yii::app()->redis->zRangeByScore('cms-refresh-page-profile', 0, 30);
// Get CMS, > 30s Performance Page
Yii::app()->redis->zRangeByScore('cms-refresh-page-profile', 30, 900);Статистика статуса API
Используя синтетический тип данных Redis, Обобщайте вызовы API, контролируйте запросы API в реальном времени и анализируйте запросы на тайм-аут 。
Типы данных: Строка, Список, Набор сортировки
Сценарии применения: Счетчики, Ранжирование
Код (немного длинный):
/**
* Webadmin-API-Status
*/
public static $webApiList200 = 'web:api:list:200';
public static $webApiList500 = 'web:api:list:500';
public static $webApiListTimeOut = 'web:api:list:timeout';
public static $webApiListCache = 'web:api:list:cache';
public static $webApiListLatest = 'web:api:List:latest';
public static function collectApiStatus(ApiStatus $apiStatus)
{
$apiAction = array(
'n'=> $apiStatus - > name, // interface name
'p'=> $apiStatus - > params, // interface parameters
'c'=> $apiStatus - > client, // client
'e'=> $apiStatus - > elapsed (), // response time
't'=> time ()// timestamp
);
// Latest Request - Data Entry
Yii::app()->redis->lPush(self::$webApiListLatest, json_encode($apiAction));
Yii::app()->redis->ltrim(self::$webApiListLatest, 0, 29);
// Latest Request - Front Desk Rendering
//$apiLatest = Yii::app()->redis->lGetRange(self::$webApiListLatest, 0, 29);
// Collection Cache
if ($apiStatus->cache) {
self::collectApiResponseCache($apiStatus->name); //zIncrBy
}
// Collection status
if ($apiStatus->status == 200) {
self::collectApiResponse200($apiStatus->name); //zIncrBy
} else if ($apiStatus->status == 500) {
self::collectApiResponse500($apiStatus->name); //zIncrBy
} else {
//
}
// Collection timeout
if ($apiStatus->elapsed() > 2000) {
self::collectApiResponseTimeOut($apiAction); //zIncrBy
}
}API-Статус:
Интеллектуальное напоминание CMS-Ненормальная схема
Используя тип данных Redis, линейное представление всех этажей CMS может быть обобщено в квазиреальном времени. Точное местоположение аномальной линии пола Операторам легко работать лучше.
Типы данных: Строка, Список, Набор сортировки
Сценарии приложений: очереди, ранжирование, кэширование
Код (немного вокруг):
// Redis key value
$cmsCheckPrdKey = cms: {$pageId}: {$cityCode}; //CMS-page ID-reserved City
// Push CMS Floor Line Information
PowerApiService::push(
$cmsCheckPrdKey,
array(
'pid'=> $pageId, //page ID
'code'=> $cityCode, // City Code
'mid'=> $moduleId, // Product Module ID
'i'=> $preRouteIds, // Operational Configuration Line
't'=> time ()// timestamp
)
);
/**
* Worker-Computing Abnormal Products in CMS
*/
public static function cmsCheckPrd($item = array())
{
$pid = $item ['pid']; // page ID
$code = $item ['code']; // City Code
$mid = $item ['mid']; // Product Module ID
$i = $item ['i']; // The line to be calculated
$t = $item ['t']; // request timestamp
// Timestamp, used to determine the effectiveness of the queue, is omitted here
// Judging Line Effectiveness by Searching Interface
$solr = new PowerSolrService();
$recommend = new ror_service_recommend();
$recommend->ids = $i;
$recommend->queryFields = array("productId");
$o = $solr - > recommendQuery Origin ($recommend); // valid line
// Data difference set = abnormal line
$diff = array_diff($i, $o);
if ($diff) {
// By virtue of the characteristics of ordered sets, the abnormal lines of modules = score
Yii::app()->redis->zAdd($cmsCheckPrdKey, $mid, $mid . ':' . implode(',', $diff));
// Data validity = 1 day
Yii::app()->redis->expire($cmsCheckPrdKey, 86400);
}
// Getting CMS Page Module Information
//Yii::app()->redis->zRange($cmsCheckPrdKey, 0, -1);
// Cut the data and get the abnormal circuit corresponding to the module
//list($moduleID, $modulePrd) = explode(':', $checkString);
}Рисунок 1 (Напоминание о этаже):
Статистика аномальных уровней CMS (расчет в реальном времени):
| 1992 | Шанхай | 4 |
| 1992 | Гуанчжоу | 7 |
| 1992 | Чэнду | 6 |
| 1949 | Пекин | 6 |
! Очевидно, что сценарий приложения Redis – это нечто большее, чем это. =)
Учебное пособие
Редис-это здорово, помните Когда у вас в руке молоток, смотрите, чтобы все было забито гвоздями. Поймите его и используйте его хорошо.
Попробуйте Redis
Официальный сайт Redis
Разработка и внедрение Redis