Redis実戦(13)仮想メモリ


まずredisの仮想メモリとオペレーティングシステムの仮想メモリは同じではないが,考え方と目的は同じであることを説明する.頻繁にアクセスしないデータを一時的にメモリからディスクに交換し、他のアクセスが必要なデータに貴重なメモリ領域を空けることです.特にredisのようなメモリデータベースでは、メモリが常に不足しています.複数のredisサーバにデータを分割できる以外は.また、データベース容量を向上させる方法は、仮想メモリを使用して、頻繁にアクセスしないデータ交換ディスクに接続することです.私たちが格納しているデータの一部が常に頻繁にアクセスされ、ほとんどのデータがアクセスされていない場合は、Webサイトにとって確かに少量のユーザーだけが頻繁にアクティブになっています.少量のデータが頻繁にアクセスされる場合、仮想メモリを使用すると、1台のredis serverデータベースの容量が向上するだけでなく、パフォーマンスにもあまり影響を与えません.redisはオペレーティングシステムが提供する仮想メモリメカニズムを使用するのではなく、自分で自分の仮想メモリメカニズムを実現している.主な理由は2つある.1、オペレーティングシステムの仮想メモリは4 kページが最小単位で交換されている.一方、redisのほとんどのオブジェクトは4 k未満であるため、1つのオペレーティングシステムページに複数のredisオブジェクトがある可能性があります.さらにredisの集合オブジェクトタイプはlistのようにsetが複数のオペレーティングシステムページに存在する可能性があります.最終的には10%keyのみが頻繁にアクセスされる可能性がありますが、すべてのオペレーティングシステムのページはオペレーティングシステムによってアクティブとみなされ、メモリが本当に消費された場合にのみオペレーティングシステムがページを交換します.2、redisはオペレーティングシステムの交換方式に比べて、ディスクに交換されたオブジェクトを圧縮することができ、ディスクに保存されたオブジェクトはポインタとオブジェクトメタデータ情報を除去することができ、一般的に圧縮されたオブジェクトはメモリの中のオブジェクトより10倍小さく、このようにredisの仮想メモリはオペレーティングシステムの仮想メモリより多くのio操作を少なくすることができる.
#   vm     
vm-enabled yes #  vm   
vm-swap-file /tmp/redis.swap #     value        
vm-max-memory 1000000 #redis          
vm-page-size 32 #       32    
vm-pages 134217728 #        
vm-max-threads 4 #    value              

redisの仮想メモリはkeyの検索速度を保証するために設計されており、valueはswapファイルにのみ交換されます.したがって、メモリの問題がvalueの小さいkeyが多すぎるため、仮想メモリは解決されず、オペレーティングシステムと同様にredisもページごとにオブジェクトを交換します.redisは、同じページに1つのオブジェクトしか保存できないことを規定しています.ただし、1つのオブジェクトは複数のページに保存できます.redisが使用するメモリがvm-max-memoryを超えないまでvalueは交換されません.最大メモリ制限を超えると、redisは期限切れのオブジェクトを選択します.2つのオブジェクトが同じ期限切れになると、比較的大きなオブジェクトが優先的に交換され、正確な式swappability=age*log(size_in_memory)になります.vm-page-sizeの設定は、自分のアプリケーションに基づいてページのサイズをほとんどのオブジェクトを収容できるように設定する必要があります.大きすぎるとディスク領域が浪費され、小さすぎると交換ファイルが破片になります.ファイル内の各ページを交換する場合、redisはメモリに1 bit値を対応させてページの空き状態を記録します.したがって、上記の構成のページ数(vm-pages 134217728)のように、ページの空き状態を記録するために16 Mのメモリが消費されます.vm-max-threadsは、交換タスクとして使用されるスレッドの数を表します.0より大きい場合はサーバに設定するcpuカーネルの数を推奨し、0である場合は交換プロセスはプライマリスレッドで行われます.