Оригинальный автор, публичный аккаунт [программист чтение], прошу обратить внимание на паблик-аккаунт, просьба указывать источник перепечатываемой статьи.
На производительность сервера влияет множество факторов, таких как ограничения аппаратного оборудования, такого как ЦП, память и жесткий диск, а также общая архитектура сервера, качество кода программистов, используемые алгоритмы, плюсы и минусы. структур данных.
Однако лично я считаю, что наибольшее влияние на производительность сервера оказывает база данных. Когда сервер сталкивается с большим количеством одновременных запросов, узкое место в производительности часто возникает в базе данных, поскольку база данных не может обрабатывать такое большое количество одновременных запросов. , а использование кластеров базы данных часто означает более высокий уровень. Поэтому, если между уровнем кода и базой данных добавляется слой кэша, нагрузка на базу данных может быть эффективно снижена, а производительность сервера может быть значительно улучшена.
Когда дело доходит до кэширования, что первое приходит нам на ум?Redis
, может этоRedis
Наше первое впечатление, хотя такое понимание Redis не совсем правильное, т.к.Redis
Может сделать, не только это, давайте исследовать вместе.
Что такое Редис
Redis
это имяSalvatore Sanfilippoчеловек использовали в 2009 годуANSI C
Система хранения данных в памяти с открытым исходным кодом, написанная автором Redis. Большая часть причин, по которым автор Redis разработал Redis, также заключается в том, что база данных не может удовлетворить его потребности.
Конечно, мы можем просто понимать Redis какБаза данных в памяти (NoSQL)илиСервер пары "ключ-значение".
Redis
Предоставляет клиентов для нескольких структур данных и разных языков программированияAPI
, Кроме того, он также предоставляет множество функций и возможностей, таких как постоянство, репликация master-slave, транзакции и т. Д., Точно так же, как швейцарский армейский нож, это оружие в разработке серверов.
Несмотря на то чтоRedis
Предоставляет очень мощные функции, ноRedis
Код .Redis
исходный код.
Особенности Redis
Ниже перечислены некоторыеRedis
свойства, давайтеRedis
Существует более полное понимание.На самом деле, из этих характеристик также видно, чтоRedis
власти.
высокоскоростной
Redis
Скорость отклика очень высокая, и самая большая причина, по которой она такая быстрая, заключается в том, чтоRedis
Операции с данными выполняются в памяти.Из диаграммы иерархии памяти ниже видно, что скорость чтения и записи памяти намного выше, чем у жестких дисков (будь то твердотельные или механические жесткие диски), поэтому Redis, естественно, очень быстрый.
Упорство
Раньше мы говорилиRedis
поместить данные в память, ноRedis
Он также предоставляет механизм сохранения, так что данные, хранящиеся пользователем в памяти, могут регулярно сохраняться на устройствах хранения, таких как жесткие диски, чтобы гарантировать, что данные не исчезнут при выключении и перезапуске сервера.Redis
служба поддержкиRDB
иAOF
Два механизма персистентности, есть шанс, о разнице между этими двумя механизмами мы поговорим в следующих статьях.
Несколько типов данных
Redis
Поддерживает несколько типов структур данных, которые такжеRedis
иMemcached
Одно из отличий,Memcached
только поддержкаString
тип, покаRedis
КромеString
,Hash
,List
,Set
,Sort Set
В дополнение к этим основным типам данных существуютBitMaps(位图)
,HyperLogLog(超小内存唯一值计数)
,GEO(地理信息定位)
и другие расширенные типы данных.
Поддерживает клиентов с несколькими языками программирования.
Redis предоставляет клиентские API для большинства языков программирования. Некоторые из этих API предоставляются официально, а некоторые предоставлены сообществом открытого исходного кода, поэтому независимо от того, какой язык вы используете для разработки серверных приложений, вы можете легко подключиться к Redis.
Ниже приведен адрес списка всех API языков программирования, перечисленных на официальном сайте Redis.
# redis支持的客户端列表
https://redis.io/clients
опубликовать подписаться
Redis
Поддержка функций подписки и публикации, поэтому вы можете использоватьRedis
Чтобы реализовать простую очередь сообщений, один конец выступает в качестве издателя для публикации сообщений вRedis
, а другой конец выступает в роли потребителя, обрабатывая данные изRedis
Новости.
Lua-скрипт
Redis
Добавлена функция сценариев в V2.6u, позволяющая клиентам писать сценарии на языке Lua и отправлять их наRedis
Преимущества этого: снижение нагрузки на сеть, атомарные операции и повторное использование скриптов О том, как использовать скрипты Lua в Redis, я расскажу, когда у меня будет время.
дела
Redis поддерживает транзакции. Когда нам нужно выполнить несколько команд, гарантируется атомарность выполнения нескольких команд, потому что в транзакции выполнение нескольких команд будет либо успешным, либо неудачным. Конечно, для выполнения нескольких команд используйте Lua Scripts может быть удобнее.
репликация master-slave
Redis поддерживает функцию репликации master-slave, то есть данные главного сервера могут быть синхронизированы с несколькими подчиненными серверами, поэтому репликация master-slave фактически обеспечивает основу для высокой доступности и распространения Redis.
Схема примера репликации ведущий-ведомыйРаспределенная высокая доступность
Redis также поддерживает высокую доступность и распределение.Фактическая репликация master-slave является лишь основой фактической высокой доступности, но невозможно достичь высокой доступности с помощью репликации master-slave.Высокая доступность Redis достигается за счетRedis Sentinel(哨兵)
Для этого Redis Sentinel — это функция, добавленная в версии 2.8, и для ее распространения требуетсяRedis cluster
поддержка функций,Redis_cluster
Это функция, добавленная после v3.0.
один поток
Redis
Он однопоточный. Однопоточный здесь означает, что он однопоточный, когда Redis действует как сервер для получения клиентских сетевых запросов. Поэтому одновременно Redis не может обрабатывать два запроса одновременно. Только один запрос обрабатывается и обрабатывается.Следующий запрос, но Redis по-прежнему использует многопоточность при реализации определенной функции, такой как сохранение данных на оборудовании, что достигается путем открытия другого потока.
Установите и запустите Redis
Redis
Установка очень проста, вот два способа установки, один изRedis
Скачайте исходники на официальном сайте, потом скомпилируйте и установите, другой удобнее, прямо сDocker Hub
остановитьRedis
изdocker
зеркало.
Ниже описан процесс установки Redis в системе Linux.
Скомпилируйте и установите, используя исходный код
# 下载redis源码安装包
wget http://download.redis.io/releases/redis-5.0.5.tar.gz
# 解压缩
tar -zxvf redis-5.0.5.tar.gz
# 进入redis源码目录
cd redis-5.0.5
# 编译 & 安装
make && make install
Установка Docker и начало использования образа Redis
Redis предоставляет образ докера, поэтому мы можем легко получить и запустить образ Redis, но только если он установлен на вашем сервере.docker
.
# 从Docker Hub上拉取官方镜像,redis:latest
docker pull redis
# 从镜像中启动一个容器
docker run --name my_redis -p 6379:6379 -d redis
Здесь следует отметить, что автор Redis не разработал версию Redis для Windows.Возможно, автор Redis считает, что сервер, установленный с системой Windows, не подходит для запуска Redis, или по какой-то причине, но Microsoft по-прежнему предоставляет Windows версия Редиса.
# redis的windows版本
https://github.com/microsoftarchive/redis/releases
Несколько способов запустить Redis
Без параметров запустить сервер с конфигурацией по умолчанию
# 使用默认配置启动
redis-server
Запустите сервер с аргументами командной строки
# 使用命令参数配置启动
redis-server --port 6380
Запустите сервер с конфигурационным файлом
# 使用配置文件启动
redis-server ~/redis-5.0.5/redis.conf
Подключиться к Редису
После запуска сервера Redis с помощью описанных выше методов мы можем использовать клиент Redis для подключения к серверу и записи или чтения данных на сервер.Как мы уже говорили ранее, Redis поддерживает большинство языков программирования, поэтому вы можете использовать клиент Redis для подключиться к серверу. Выберите другой API в зависимости от ситуации.
Подключитесь к Redis с помощью клиента командной строки
После установки Redis вы можете использовать клиент, который входит в установочный пакет Redis.redis-cli
, который представляет собой клиент командной строки со следующими примерами использования:
# 直接使用,不带参数,会连接本地服务器
redis-cli
# 指定地址和端口号
redis-cli -h 服务器地址 -p 端口号
Подключиться к серверу Redis с помощью кода
Демонстрационное использование здесьgolang
разработаноredigo/redis
пакетное соединениеRedis
сервер.
# 获取go语言的某个redis客户端库
go get github.com/gomodule/redigo/redis
Ниже приведено использованиеredigo/redis
Простой пример кода библиотеки для подключения к Redis:
package main
import (
"fmt"
"github.com/gomodule/redigo/redis"
)
var redisCon redis.Conn
func main() {
var err error
redisCon ,err = redis.Dial("tcp","localhost:6379")
if err != nil{
panic(err)
}
defer redisCon.Close()
rs,err := redisCon.Do("set","test_key","test_value")
if err != nil{
panic(err)
}
fmt.Println(rs)
}
Приведенный выше код может быть относительно простым, и у нас есть возможность узнать больше о том, как использовать Golang для лучшего подключения и работы с Redis.
Сценарии применения
Ниже перечислены некоторыеRedis
Мы также можем гибко использовать его в соответствии с нашими потребностями.Redis
Для достижения цели повышения производительности сервера.
кеш-система
Redis
Наиболее часто используется сценарий для кэширования данных.Из-за быстрых операций чтения и записи данных в памяти скорость отклика очень высока, и его можно использовать для кэширования некоторых горячих данных или данных, которые не сильно меняются. таким образом, когда пользователи запрашивают эти данные, непосредственно изRedis
Быстрое чтение, избегание частого чтения и записи базы данных, а также повышение пропускной способности данных и скорости сервера.
Таблица лидеров
Redis
изsort set
Тип данных очень подходит для функции ранжирования.Например, [Список рекомендуемых авторов] для [Самородки] на самом деле реализуется путем помещения вычисленного ранжирующего веса автора наRedis
изsort set
чтобы добиться этого, такRedis
Реализовать такие функции действительно очень удобно и просто.
Внедрить функцию сообщества
Функция Redis имеет естественную подходящую с некоторыми функциями сообщества. Использование структуры данных, поддерживаемой Redis, легко хранить данные, такие как количество последователей, количество последователей, следующий список, список подписчиков и Сокрашены в функциях сообщества, такие как количество последователей. Счетчики доступны с количеством подписчиков, наблюдателей и фангистов доступныset
тип для хранения.
прилавок
Redis
Встроенныйincr
Команды можно легко подсчитать в одном потоке, и эта операция является атомарной, поэтому не нужно беспокоиться о двух запросах на подсчет одного и того же значения ключа в определенное время.Эта функция счетчика очень полезна в некоторых сценариях, таких как майнинг В статье Джин количество прочтений, комментариев и лайков может быть достигнуто с помощью функции подсчета Redis.Подумайте об этом, если эти данные напрямую записываются в базу данных, то каждый раз, когда кто-то лайкает, читает и комментирует, базе данных требуется Предполагается, что база данных будет зависать, и с помощью функции подсчета Redis можно быстро и легко завершить реализацию этой функции.
очередь сообщений
Redis
Поддерживает функции публикации и подписки, так что вы можете поместитьRedis
В качестве простой очереди сообщений, когда у нас есть бизнес, которому необходимо использовать очередь сообщений, мы можем рассмотреть возможность ее использования.Redis
Для этого, конечно же, существует множество зрелых систем промежуточного программного обеспечения очередей сообщений, таких какKafka
,RabbitMQ
,RocketMQ
,ActiveMQ
, то их использование может потребовать дополнительных затрат на оборудование и программное обеспечение, а также затрат на обучение, поэтому вы можете использоватьRedis
Вместо функции очереди сообщений.
система реального времени
Для некоторых данных, которые необходимо обрабатывать в режиме реального времени, их также можно записать напрямую.Redis
, а затем обрабатываются другими системами, что на самом деле является использованиемRedis
Функция публикации и подписки для достижения цели обработки данных в реальном времени, например, в некоторых системах обработки почтовых ящиков спама.
резюме
В этой статье мы кратко рассказали оRedis
Что, что можно сделать, и понять его мощные возможности и функции, продемонстрировав, как установить, запустить и подключитьRedis
, а также дайте нам знать, как использоватьRedis
, конечно, хочется лучше понять и использоватьRedis
, и нужно более глубокое изучение, а ниже есть возможность, продолжим исследования в этой области.
Ваше внимание — самое большое поощрение на моем писательском пути!