1. Introduction :
Comme la plupart des bases de données NoSQL, Redis suit également le modèle de stockage de données Clé/Valeur. Dans certains cas, Redis enregistrera les clés/valeurs en mémoire pour améliorer l'efficacité de la requête et de la modification des données. Cependant, cette approche n'est pas toujours un bon choix. Compte tenu de cela, nous pouvons l'optimiser davantage, c'est-à-dire essayer de conserver uniquement les données Clés dans la mémoire, ce qui peut garantir l'efficacité de la récupération des données, et les données Valeurs peuvent être échangées sur le disque lorsqu'elles sont rarement utilisé.
Dans les applications réelles, seulement environ 10 % des clés sont des clés relativement couramment utilisées, donc Redis peut échanger les clés et valeurs restantes moins couramment utilisées sur le disque via le stockage virtuel, et une fois celles-ci échangées, lorsque les clés ou Les valeurs doivent être lues, Redis les relit dans la mémoire principale.
2. Scénarios d'application :
Pour la plupart des bases de données, le moyen le plus idéal d'exécuter est de charger toutes les données en mémoire, et les opérations de requête ultérieures peuvent être entièrement basées sur la mémoire. Cependant, en réalité, ce scénario n’est pas courant. Dans la plupart des cas, seule une partie des données peut être chargée en mémoire.
Dans Redis, il existe un concept très important, c'est-à-dire que les clés ne sont généralement pas échangées, donc s'il y a un grand nombre de clés dans votre base de données et que chaque clé n'est associée qu'à une petite valeur, alors ce scénario est pas idéal pour utiliser la mémoire virtuelle. Si au contraire la base de données ne contient qu’un petit nombre de clés, mais que la valeur associée à chaque clé est très grande, alors ce scénario est parfait pour utiliser le stockage virtuel.
Dans les applications réelles, afin que la mémoire virtuelle joue un rôle plus complet et nous aide à améliorer l'efficacité de fonctionnement du système, nous pouvons fusionner des clés avec de nombreuses valeurs plus petites en clés avec un petit nombre de valeurs plus grandes. La méthode la plus importante consiste à changer le mode clé/valeur d'origine en un mode basé sur le hachage, ce qui permet à de nombreuses clés d'origine de devenir des attributs dans le hachage.
3. Configuration :
1). Ajoutez les éléments de configuration suivants dans le fichier de configuration pour permettre au serveur Redis actuel d'activer la fonction de mémoire virtuelle lors de son démarrage.
vm-enabled yes
2). Définissez le nombre maximum d'octets de mémoire virtuelle disponibles pour Redis dans le fichier de configuration. Si les données en mémoire sont supérieures à cette valeur, certains objets seront échangés sur le disque et la mémoire occupée par les objets échangés sera libérée. L'échange ne s'arrêtera que lorsque la mémoire utilisée sera inférieure à cette valeur.
vm-max-memory (bytes)
La règle d'échange de Redis est d'essayer de considérer les données "les plus anciennes", c'est-à-dire que les données qui n'ont pas été utilisées depuis le plus longtemps seront échangées. Si les âges des deux objets sont identiques, les données ayant la valeur la plus élevée seront échangées en premier. Il convient de noter que Redis n'échangera pas de clés sur le disque, donc si les données des clés à elles seules ont rempli toute la mémoire virtuelle, alors ce modèle de données ne sera pas adapté à l'utilisation du mécanisme de mémoire virtuelle, ou la valeur doit être définie plus haut. Grand pour accueillir toutes les données des clés. Dans les applications réelles, si nous envisageons d'utiliser la mémoire virtuelle Redis, nous devons allouer autant de mémoire que possible à Redis pour éviter les échanges fréquents d'entrée et de sortie.
3). Définissez le nombre de pages et le nombre d'octets occupés par chaque page dans le fichier de configuration. Afin de transférer des données de la mémoire vers le disque, nous devons utiliser un fichier d'échange. Ces fichiers n'ont rien à voir avec la persistance des données et Redis les supprimera tous avant de quitter. Étant donné que la plupart des accès aux fichiers d'échange sont aléatoires, il est recommandé de stocker le fichier d'échange sur un disque SSD, ce qui peut grandement améliorer l'efficacité de fonctionnement du système
vm-pages 134217728 vm-page-size 32
Dans la configuration ci-dessus, Redis échangera le fichier Divisé en pages vm-pages, les octets occupés par chaque page sont vm-page-size, puis la taille finale du fichier d'échange disponible pour Redis est : vm-pages * vm-page-size. Étant donné qu'une valeur peut être stockée sur une ou plusieurs pages, mais qu'une page ne peut pas contenir plusieurs valeurs, nous devons donc prendre pleinement en compte cette fonctionnalité de Redis lors de la définition de vm-page-size.
4). Il y a un paramètre de configuration très important dans le fichier de configuration Redis, à savoir :
vm-max-threads 4
CPU cores。如果将该值设置为0,那么Redis在与交换文件进行IO交互时,将以同步的方式执行此操作。
对于Redis而言,如果操作交换文件是以同步的方式进行,那么当某一客户端正在访问交换文件中的数据时,其它客户端如果再试图访问交换文件中的数据,该客户端的请求就将被挂起,直到之前的操作结束为止。特别是在相对较慢或较忙的磁盘上读取较大的数据值时,这种阻塞所带来的影响就更为突兀了。然而同步操作也并非一无是处,事实上,从全局执行效率视角来看,同步方式要好于异步方式,毕竟同步方式节省了线程切换、线程间同步,以及线程拉起等操作产生的额外开销。特别是当大部分频繁使用的数据都可以直接从主内存中读取时,同步方式的表现将更为优异。
如果你的现实应用恰恰相反,即有大量的换入换出操作,同时你的系统又有很多的cores,有鉴于此,你又不希望客户端在访问交换文件之前不得不阻塞一小段时间,如果确实是这样,我想异步方式可能更适合于你的系统。
至于最终选用哪种配置方式,最好的答案将来自于不断的实验和调优。
以上就是Redis教程(十一):虚拟内存介绍的内容,更多相关内容请关注PHP中文网(www.php.cn)!