notion de cache
Le cache sert à ajuster la vitesse de deux ou plusieurs substances différentes avec des vitesses incohérentes et à accélérer la plus lente au milieu. Par exemple, les caches de premier et de deuxième niveau du processeur stockent les données auxquelles le processeur a récemment accédé. La mémoire est utilisée pour enregistrer les données auxquelles le CPU accède fréquemment au disque dur, et le disque dur a également des caches de différentes tailles, même la carte RAID du serveur physique a des caches, le tout dans le but d'accélérer le CPU. accès aux données du disque dur, car la vitesse du CPU est trop rapide, les données nécessaires au CPU sont souvent incapables de répondre aux besoins du CPU dans un court laps de temps en raison du disque dur, donc le cache du CPU, la mémoire , le cache de la carte Raid et le cache du disque dur peuvent répondre aux exigences de données du processeur dans une certaine mesure, c'est-à-dire que le processeur peut lire les données du cache.Améliore considérablement l'efficacité du processeur
cache système
tampon et cache :
-
Tampon : le tampon est également appelé tampon d'écriture. Il est généralement utilisé pour les opérations d'écriture. Les données peuvent d'abord être écrites dans la mémoire, puis écrites sur le disque. Le tampon est généralement utilisé pour le tampon d'écriture afin de résoudre la mise en mémoire tampon des vitesses incohérentes de différents supports. Les données sont temporairement écrit en premier. À l'endroit le plus proche, pour augmenter la vitesse d'écriture, le processeur écrira d'abord les données sur le tampon de disque de la mémoire, puis pensera que les données ont été écrites, puis le noyau écrira sur le disque à une fois plus tard, de sorte que le serveur Panne de courant soudaine perdra une partie des données dans la mémoire.
-
Cache : le cache est également appelé cache de lecture. Il est généralement utilisé pour les opérations de lecture. Le processeur lit les fichiers à partir de la mémoire. S'il n'y a pas de mémoire, lisez du disque dur vers la mémoire, puis vers le processeur. Mettez les données qui doivent être lues fréquemment dans votre zone de cache la plus proche, vous pourrez la lire rapidement la prochaine fois que vous la lirez
Emplacement et hiérarchie de stockage du cache
- Couche utilisateur : cache DNS du navigateur, cache DNS de l'application, client du cache DNS du système d'exploitation
- Couche proxy : CDN, cache proxy inverse
- Niveau Web : Cache du serveur Web
- Couche d'application : page statique
- Couche de données : cache distribué de données, bibliothèque
- Couche système : cache du système d'exploitation
- Couche physique : cache disque, Raid Cache
Cache DNS
Le cache DNS du navigateur est par défaut de 60 secondes, c'est-à-dire que la résolution DNS ne sera pas effectuée si le même nom de domaine est accédé dans les 60 secondes.
cache de la couche d'application
Les services Web tels que Nginx et PHP peuvent définir des caches d'application pour accélérer la réponse aux demandes des utilisateurs. De plus, certains langages interprétés, tels que PHP/Python/Java, ne peuvent pas être exécutés directement et doivent d'abord être compilés en bytecode, mais le bytecode doit être interprété par un interpréteur comme Le code machine ne peut être exécuté que plus tard, donc le bytecode est aussi une sorte de cache, et parfois il y aura un phénomène que le bytecode n'est pas mis à jour après le lancement du code du programme. Par conséquent, avant de lancer la nouvelle version, vous devez d'abord vider le cache de l'application, puis lancer la nouvelle version.
En outre, la technologie statique de page dynamique peut être utilisée pour accélérer l'accès, par exemple : pour accéder à la page dynamique des données de la base de données, utiliser le programme pour générer à l'avance le fichier de page statique html, l'introduction du produit du site Web de commerce électronique, les informations de commentaire, des données non en temps réel, etc. peuvent être réalisées en utilisant cette technologie .
cache de la couche de données
Service de cache distribué :
- Redis
- Memcaché
base de données:
- Cache de requête MySQL
- cache innodb, cache MYISAM
cache matériel
- Cache CPU (cache de données L1 et cache d'instructions L1), cache L2, cache L3
- Cache disque : Cache disque
- Cache de matrice de disques : Raid Cache, qui peut utiliser des batteries pour éviter la perte de données due à une panne de courant
Bases de données relationnelles et non relationnelles
Base de données relationnelle
- Une base de données relationnelle est une base de données structurée, construite sur la base d'un modèle relationnel (modèle de table à deux dimensions), généralement orienté vers les enregistrements.
- L'instruction SQL (Standard Data Query Language) est un langage basé sur une base de données relationnelle, qui est utilisé pour effectuer la récupération et l'exploitation de données dans une base de données relationnelle.
- Les bases de données relationnelles courantes incluent Oracle, MySQL, SQL Server, Microsoft Access, DB2, PostgreSQL, etc.
Lorsque vous utilisez les bases de données ci-dessus, vous devez d'abord créer une base de données, créer une table et concevoir une structure de table, puis stocker les données en fonction de la structure de la table. Si les données ne correspondent pas à la structure de la table, le stockage échouera.
base de données non relationnelle
- NoSQL (NoSQL=NotonlysQL), qui signifie "pas seulement SQL", est le terme général pour les bases de données non relationnelles.
- Les bases de données autres que les bases de données relationnelles classiques sont considérées comme non relationnelles.
- Il n'est pas nécessaire de pré-construire des bases de données et des tables pour définir la structure de la table de stockage des données Chaque enregistrement peut avoir différents types de données et nombre de champs (tels que du texte, des images, des vidéos, de la musique, etc. dans les discussions de groupe WeChat).
- Les principales bases de données NOSQL comprennent Redis, MongBD, Hbase (base de données non relationnelle distribuée, utilisée pour le Big Data), Memcached, ElasticSearch (appelé ES, base de données indexée), TSDB (base de données continue dans le temps), etc.
La différence entre la base de données relationnelle et la base de données non relationnelle :
(1) Différentes méthodes de stockage des données
La principale différence entre les bases de données relationnelles et non relationnelles réside dans la manière dont les données sont stockées.
- Les données relationnelles sont intrinsèquement tabulaires et donc stockées dans les lignes et les colonnes d'une table de données. Les tables de données peuvent être associées les unes aux autres et stockées en collaboration, et il est également facile d'extraire des données.
- En revanche, les données non relationnelles ne tiennent pas dans les lignes et les colonnes des tableaux, mais sont regroupées en gros morceaux. Les données non relationnelles sont généralement stockées dans des ensembles de données, tels que des documents, des paires clé-valeur ou des structures de graphe. Vos données et leurs caractéristiques sont le facteur d'influence numéro un dans le choix du mode de stockage et d'extraction de vos données. (Il est facile de changer de type de données, il existe plusieurs types de données dans un ensemble de données)
(2) Différentes méthodes d'expansion
La plus grande différence entre les bases de données SQL et NoSQL réside peut-être dans le mode d'extension. Pour répondre à la demande croissante, bien sûr, une extension est nécessaire.
- Pour supporter plus de simultanéité, la base de données SQL est mise à l'échelle , c'est-à-dire pour augmenter la puissance de traitement et utiliser un ordinateur plus rapide, afin que le même ensemble de données puisse être traité plus rapidement. Étant donné que les données sont stockées dans des tables relationnelles, les goulots d'étranglement des performances pour les opérations pouvant impliquer de nombreuses tables doivent être surmontés en augmentant les performances de l'ordinateur. Bien que la base de données SQI ait beaucoup de place pour le développement, elle atteindra certainement la limite supérieure de l'expansion verticale à la fin. (Les données sont généralement stockées dans le système de fichiers local. La lecture et l'écriture peuvent partager les performances grâce à la séparation lecture-écriture et à l'équilibrage de charge, mais la lecture et l'écriture consomment toujours les performances d'E/S)
- Les bases de données NoSQL, quant à elles, évoluent horizontalement . Étant donné que le stockage de données non relationnelles est naturellement distribué, l'expansion des bases de données NoSQL peut partager la charge en ajoutant des serveurs de base de données plus courants (nœuds) au pool de ressources. (La distribution des données est stockée sur différents serveurs, qui peuvent être lus et écrits simultanément pour accélérer l'efficacité)
Conseils:
- Expansion horizontale : ajouter des serveurs. (moins cher)
- Expansion verticale : améliorez la configuration matérielle, par exemple en passant à un processeur plus performant, en augmentant le nombre de cœurs de processeur, de disques durs, d'E/S de disque et de clés USB. (sauf pour le disque dur, d'autres doivent être arrêtés pour ajouter)
(3) Support différent pour transactionnel
- Si les opérations de données nécessitent une transactionnalité élevée ou si des requêtes de données complexes doivent contrôler le plan d'exécution, la base de données SQL traditionnelle est votre meilleur choix en termes de performances et de stabilité. La base de données SQL prend en charge un contrôle précis de l'atomicité des transactions et il est facile d'annuler les transactions.
- Bien que les bases de données NoSQL puissent également utiliser des opérations transactionnelles, elles ne peuvent pas se comparer aux bases de données relationnelles en termes de stabilité, leur véritable valeur réside donc dans l'évolutivité des opérations et le traitement de grandes quantités de données.
- Les bases de données non relationnelles sont inférieures aux bases de données relationnelles en termes de traitement des transactions et de stabilité. Cependant, il offre de bonnes performances en lecture et en écriture, est facile à étendre et présente un avantage pour le traitement de données volumineuses.
Base de données relationnelle : particulièrement adaptée aux exigences transactionnelles élevées et aux tâches nécessitant de contrôler le plan d'exécution, et le contrôle fin des transactions est meilleur.
Base de données non relationnelle : le contrôle des transactions sera légèrement plus faible et sa valeur réside dans une évolutivité élevée et un traitement de gros volumes de données
Contexte de la base de données non relationnelle
Il peut être utilisé pour traiter les trois problèmes majeurs du type de site Web dynamique pur Web2.0.
(1) Hautes performances - exigences élevées de lecture et d'écriture simultanées pour la base de données.
(2) Stockage énorme - le besoin d'un stockage efficace et d'un accès à des données massives.
(3) HighScalability&&HighAvailability——Exigences pour une évolutivité élevée et une haute disponibilité de la base de données.
Les bases de données relationnelles et les bases de données non relationnelles ont leurs propres caractéristiques et scénarios d'application.L'étroite combinaison des deux apportera de nouvelles idées au développement des bases de données web2.0. Laissez les bases de données relationnelles se concentrer sur les relations et les garanties de cohérence des données, et les bases de données non relationnelles se concentrer sur le stockage et la haute efficacité . Par exemple, dans un environnement de base de données MySQI où les lectures et les écritures sont séparées, les données fréquemment consultées (c'est-à-dire les données à haute température) peuvent être stockées dans une base de données non relationnelle pour améliorer la vitesse d'accès.
2.5 Résumé
Base de données relationnelle :
- Exemple --> base de données --> table (table) --> ligne d'enregistrement (ligne), champ de données (colonne)
Base de données non relationnelle :
-
Instance --> base de données --> collection (collection) --> paire clé-valeur (clé-valeur)
-
Les bases de données non relationnelles ne nécessitent pas de création manuelle de bases de données et de collections (tables).
Présentation de Redis
Redis (Remote Dictionary Server) est une base de données NoSQL open source écrite en C.
Redis s'exécute sur la base de la mémoire et prend en charge la persistance Il adopte une forme de stockage clé-valeur (paire clé-valeur), qui est un élément indispensable de l'architecture distribuée actuelle.
Le programme serveur Redis est un modèle à processus unique, c'est-à-dire que plusieurs processus Redis peuvent être démarrés sur un serveur en même temps, et la vitesse de traitement réelle de Redis dépend entièrement de l'efficacité d'exécution du processus principal.
- Si un seul processus Redis est en cours d'exécution sur le serveur, lorsque plusieurs clients accèdent en même temps, la capacité de traitement du serveur diminuera dans une certaine mesure ;
- Si plusieurs processus Redis sont démarrés sur le même serveur, Redis mettra beaucoup de pression sur le processeur du serveur tout en améliorant les capacités de traitement simultané.
Autrement dit : dans l'environnement de production réel, il est nécessaire de décider du nombre de processus Redis à ouvrir en fonction des besoins réels. Si vous avez des exigences plus élevées en matière de simultanéité élevée, vous pouvez envisager d'ouvrir plusieurs processus sur le même serveur. Si les ressources CPU sont relativement restreintes, un seul processus peut être utilisé
Redis présente les avantages suivants :
(1) Vitesse élevée de lecture et d'écriture des données : la vitesse de lecture des données peut atteindre jusqu'à 110 000 fois/s et la vitesse d'écriture des données peut atteindre jusqu'à 81 000 fois/s.
(2) Structure de données prise en charge : clé-valeur, prend en charge les types de données riches : chaînes, listes, hachages, ensembles et ensembles triés et autres opérations de type de données.
- type de chaîne
- Listes type de liste
- Hachage hachage (hachage)
- Définit une collection non ordonnée
- Ensembles triés collections ordonnées (ou zsets)
(redis peut également être utilisé comme une file d'attente de messages, qui peut être réalisée via des ensembles triés)
(3) Prise en charge de la persistance des données : les données en mémoire peuvent être enregistrées sur le disque et peuvent être chargées à nouveau pour être utilisées lors du redémarrage.
(4) Atomicité : toutes les opérations Redis sont atomiques. (Accompagnement des transactions, toutes les opérations sont traitées comme des transactions)
(5) Prise en charge de la sauvegarde des données : sauvegarde des données en mode maître-récupérateur. (Prise en charge de la réplication maître-esclave)
Inconvénients de Redis
- Problème de cohérence en double écriture du cache et de la base de données
- Problème d'avalanche de cache
- problème de panne de cache
- Cache ## Scénarios applicables de Redis
- En tant que base de données basée sur la mémoire, Redis est un cache hautes performances qui est généralement utilisé dans les caches de session, les files d'attente, les classements, les compteurs, les articles les plus récents, les commentaires les plus récents, les abonnements de publication, etc.
- Redis convient aux scénarios avec des exigences élevées en matière de données en temps réel, un stockage de données avec des caractéristiques d'expiration et d'élimination, aucun besoin de persistance ou seulement une cohérence faible et une logique simple.
Pourquoi Redis est-il si rapide ?
-
1. Redis est une structure de mémoire pure, qui évite les opérations chronophages telles que les E/S de disque. (s'exécute en fonction de la mémoire)
-
2. Le module central du traitement des commandes Redis est à thread unique, ce qui réduit le coût de la concurrence des verrous, la création et la destruction fréquentes de threads et réduit la consommation de changement de contexte de thread. (modèle à un seul filetage)
-
3. Le mécanisme de multiplexage d'E/S est adopté, ce qui améliore considérablement l'efficacité de la concurrence. (mode sondage)
Note:
Il existe deux types d'E/S dans le système Linux : les E/S de disque et les E/S de requête réseau.
Le multithreading nouvellement ajouté dans Redis 6.0 utilise uniquement la multilinéarité pour le traitement des requêtes réseau, tandis que les commandes de lecture et d'écriture de données sont toujours traitées par un seul thread.
Comparaison entre Redis et memcached
Installation et déploiement Redis
关闭防火墙
systemctl stop firewalld
setenforce 0
#安装依赖环境
yum install -y gcc gcc-c++ make
#解压文件到指定文件夹 opt
tar zxvf redis-5.0.7.tar.gz -C /opt/
cd /opt/redis-5.0.7/
#安装
make
make PREFIX=/usr/local/redis install
#执行软件包提供的install_server.sh 脚本文件,设置Redis服务所需要的相关配置文件
cd /opt/redis-5.0.7/utils
./install_server.sh
……
慢慢回车
Please select the redis executable path []
手动输入
/usr/local/redis/bin/redis-server
#创建软链接
ln -s /usr/local/redis/bin/* /usr/local/bin/
/etc/init.d/redis_6379 stop #停止
/etc/init.d/redis_6379 start #启动
/etc/init.d/redis_6379 restart #重启
/etc/init.d/redis_6379 status
vim /etc/redis/6379.conf
70行,添加 监听的主机地址
bind 127.0.0.1 192.168.137.10
93行,Redis默认的监听端口
port 6379
137行,启用守护进程
daemonize yes
159行,指定 PID 文件
pidfile /var/run/redis_6379.pid
167行,日志级别
loglevel notice
172行,指定日志文件
logfile /var/log/redis_6379.log
------------------------------------------
#重启服务
/etc/init.d/redis_6379 restart
Décompressez le package et compilez-le
Installer dans le répertoire spécifié
Exécutez le fichier de script fourni par le package et établissez une connexion logicielle
Démarrez le service Redis et vérifiez
Entrez le fichier de configuration pour ajouter l'hôte d'écoute
redémarrer le service
Outil de commande Redis
- redis-server : outil pour démarrer Redis
- redis-benchmark : utilisé pour détecter l'efficacité de fonctionnement de Redis sur la machine
- redis-check-aof : réparer le fichier persistant AOF
- redis-check-rdb : réparer les fichiers persistants RDB
- redis-cli : outil de ligne de commande Redis
outil de ligne de commande redis-cli
语法:redis-cli -h host -p port -a password
-h:指定远程主机
-p:指定Redis服务的端口号
-a:指定密码,未设置数据库密码可以省略-a选项若不添加任何选项表示,则使用127.0.0.1:6379连接本机上的Redis数据库
redis-cli -h 192.168.137.10 -p 6379 #登录指定主机redis
redis-cli #登录本机redis
redis -outil de test de référence
redis-benchmark est l'outil officiel de test de performance Redis qui peut tester efficacement les performances des services Redis
基本的测试语法:redis-benchmark [选项] [选项值]
choix | effet |
---|---|
-h | Spécifiez le nom d'hôte du serveur |
p | spécifier le port du serveur |
-s | Spécifiez le socket du serveur |
-n | Précisez le nombre de demandes |
-d | Spécifiez la taille des données de la valeur SET/GET en octets |
-k | 1=garder en vie 0=reconnecter |
-r | SET/GET/INCR utilise une clé aléatoire, sADD utilise une valeur aléatoire |
-P | Pipe <numerq> requêtes |
--csv | Sortie au format csv. |
-l (petit L) | Générer une boucle, exécuter des tests pour toujours |
-t | Exécutez uniquement une liste de commandes de test séparées par des virgules |
-je (grand je) | Mode inactif. Ouvrir uniquement N connexions inactives et attendre |
Envoyez 100 connexions simultanées et 100 000 requêtes au serveur Redis avec l'adresse IP 192.168.137.10 et le port 6379 pour tester les performances
redis-benchmark -h 192.168.137.10 -p 6379 -c 100 -n 100000
#测试存取大小为100字节的数据包的性能
redis-benchmark -h 192.168.137.10 -p 6379 -q -d 100
#测试本机上Redis服务在进行 set与1push操作时的性能
redis-benchmark -t set,lpush -n 100000 -q
Commandes courantes de la base de données Redis
Pas sensible à la casse
set 存放数据,命令格式为 set key value
get 获取数据,命令格式为 get key
redis-cli
127.0.0.1:6379> set name my #设置name值为my
OK
127.0.0.1:6379> get name #查看name的值
"my"
Vérifier l'état des clés dans la base de données
keys 命令可以取符合规则的键值列表,通常情况可以结合*、?等选项来使用。
exists 命令可以判断键值是否存在。
del 命令可以删除当前数据库的指定 key。
type 命令可以获取 key 对应的 value 值类型。
keys afficher les clés dans la base de données
clés ? touches 与 *
set qq 1
set qq1 2
set q2 3
set q4 4
keys q?
keys q*
clés ??
La commande exists peut déterminer si une valeur de clé existe.
exists qq#判断 qq键是否存在
#1表示 qq键是存在
exists q
#0表示q键不存在
La commande del peut supprimer la clé spécifiée de la base de données actuelle.
del 键名
La commande type permet d'obtenir le type de valeur correspondant à la clé.
type 键名
La commande rename consiste à renommer une clé existante.
(覆盖)命令格式:rename 源key 目标key
Lors de l'utilisation de la commande rename pour renommer, le changement de nom sera effectué indépendamment de l'existence de la clé cible, et la valeur de la clé source écrasera la valeur de la clé cible. En utilisation réelle, il est recommandé d'utiliser la commande exists pour vérifier si la clé cible existe, puis de décider s'il faut exécuter la commande rename pour éviter d'écraser des données importantes
commande reamenx
La commande renamenx consiste à renommer une clé existante et à détecter si le nouveau nom existe. Si la clé cible existe, elle ne sera pas renommée.
(不覆盖)命令格式:renamenx 源key 目标key
La commande dbsize vérifie le nombre de clés dans la base de données actuelle.
dbsize
Définissez un mot de passe à l'aide de la commande config set requirepass password
config set requirepass 密码
Utilisez la commande config get requirepass pour afficher le mot de passe (une fois le mot de passe défini, le mot de passe doit d'abord être vérifié, sinon toutes les opérations ne sont pas disponibles )
config get requirepass
supprimer le mot de passe
config set requirepass ''
Commandes communes multi-base de données Redis
- Redis prend en charge plusieurs bases de données. Redis contient 16 bases de données par défaut, et les noms des bases de données sont nommés séquentiellement avec des numéros 0-15.
- Plusieurs bases de données sont indépendantes les unes des autres et n'interfèrent pas les unes avec les autres
Basculer entre plusieurs bases de données
命令格式:select 序号
Après avoir utilisé redis-cli pour se connecter à la base de données Redis, la base de données avec le numéro de série 0 est utilisée par défaut
Déplacer des données entre plusieurs bases de données
格式:move 键值 序号
Effacer les données dans la base de données
FLUSHDB :清空当前数据库数据
FLUSHALL :清空所有数据库的数据,慎用!