Рубрики
Uncategorized

Redis-отличная практика в эксплуатации и развитии оригинального беспроводного центра Tuniu

Автор оригинала: David Wong.

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