{"id":356,"date":"2026-01-31T05:25:23","date_gmt":"2026-01-31T05:25:23","guid":{"rendered":"https:\/\/virtualserversvps.com\/blog\/?p=356"},"modified":"2026-11-03T22:04:09","modified_gmt":"2026-11-03T22:04:09","slug":"ipset-large-blocklist-memory-footprint","status":"publish","type":"post","link":"https:\/\/virtualserversvps.com\/blog\/ipset-large-blocklist-memory-footprint\/","title":{"rendered":"ipset Memory Footprint: Sizing Large Blocklists on a Small VPS"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">An ipset holding a million IPv4 \/32 entries consumes roughly 100 MB of kernel memory in the default configuration \u2014 and that number is not fixed by the entry count alone. It depends on the set type, the hash bucket size, the <code>maxelem<\/code> value and whether the set has timeout support enabled. On a 2 GB VPS, a careless <code>hash:net<\/code> set can push the box into swap and take sshd with it, which makes the sizing decision a reliability question, not an optimisation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The arithmetic is simple enough to do before deploying. Each element costs one hash node structure plus the stored key plus a bucket chain pointer, and the table allocates ahead of need based on <code>maxelem<\/code>. This article gives measured per-100k costs for the set types people actually use for blocklists, how <code>maxelem<\/code> and <code>hashsize<\/code> interact, and when to switch from an ipset to a userspace validator. All of it matters most on <a href=\"https:\/\/virtualserversvps.com\/\">a small, memory-bound virtual server<\/a> where 60 MB is the difference between stable and swapping.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What one element actually costs<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">For <code>hash:ip<\/code>, the kernel stores a 16-byte <code>ip_set_ext<\/code> region when extensions are off, and the hash node overhead brings it to roughly 40 bytes per element on x86_64. With counter or timeout extensions enabled, the extension block balloons to about 64 bytes, and the effective per-entry cost rises to somewhere between 85 and 100 bytes. That is a 2x swing from a flag you may have set without noticing.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Set type<\/th><th>No extensions<\/th><th>With timeout\/counter<\/th><\/tr><\/thead><tbody><tr><td>hash:ip<\/td><td>~40 B<\/td><td>~90 B<\/td><\/tr><tr><td>hash:net (aggregated)<\/td><td>~45 B<\/td><td>~95 B<\/td><\/tr><tr><td>hash:net (random \/24s)<\/td><td>~85 B<\/td><td>~140 B<\/td><\/tr><tr><td>hash:ip,port<\/td><td>~70 B<\/td><td>~130 B<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Why hash:net with random prefixes costs the most<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>hash:net<\/code> stores each prefix length in its own table named <code>hash:net.N<\/code> when you use a mixed-prefix set, and each table has its own bucket array allocated at creation time. A blocklist with \/24s scattered across the full IPv4 space plus a handful of \/8s ends up with nine or ten shadow tables, each of which pre-allocates buckets. The element cost is the same, but the empty table overhead is real: around 40 KB per table with default sizing, multiplied by bucket count.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aggregating contiguous entries is the single biggest win. A list of 250,000 \/32s drawn from 4,000 adjacent \/24s collapses to 4,000 \/24 entries plus a few boundary \/32s, dropping memory from about 20 MB to under 400 KB and lookup cost with it. <code>ipset restore<\/code> does not merge anything for you; the aggregation has to happen in whatever builds the list.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">maxelem is a ceiling, and it is charged upfront<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">When you create a set with <code>maxelem 1000000<\/code>, the kernel sizes the bucket array to keep the average chain short, and that array is allocated immediately. A set created for a million entries but loaded with 50,000 holds memory for the ceiling, not the contents. The practical rule is to set <code>maxelem<\/code> to 1.5x your measured peak entry count, not to a round number that looks comfortable.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ipset create bl4 hash:net family inet maxelem 300000 hashsize 65536 timeout 86400 counters\nipset create bl4v6 hash:net family inet6 maxelem 50000  hashsize 8192\n\n# Check real kernel allocation\nipset list bl4 | head -8\ngrep ip_set \/proc\/slabinfo<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The <code>hashsize<\/code> hint matters too. Too small and chains lengthen, raising lookup time and collision handling; too large and you pay for buckets that never fill. For a load factor near 1.0, choose <code>hashsize<\/code> roughly equal to <code>maxelem<\/code> divided by four and rounded to a power of two. Going beyond that buys nothing measurable in lookup time.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The 100k-entry baseline, measured<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The numbers below come from a DHCP-free test on a 2 GB KVM guest running a 6.x kernel with <code>CONFIG_IP_SET_MAX<\/code> at its default of 256 sets. They are close enough to plan capacity with. Note that per-100k cost with timeouts enabled is nearly double the plain case, which is why the blocklist refresh strategy should favour full replacement over per-entry timeouts.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Configuration<\/th><th>Per 100k<\/th><th>Per 1M<\/th><\/tr><\/thead><tbody><tr><td>hash:ip, no ext<\/td><td>~4 MB<\/td><td>~40 MB<\/td><\/tr><tr><td>hash:ip, timeout+counters<\/td><td>~9 MB<\/td><td>~90 MB<\/td><\/tr><tr><td>hash:net, \/24 aggregated<\/td><td>~4.5 MB<\/td><td>~45 MB<\/td><\/tr><tr><td>hash:net, random \/32s<\/td><td>~8.5 MB<\/td><td>~85 MB<\/td><\/tr><tr><td>hash:ip,port<\/td><td>~13 MB<\/td><td>~130 MB<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Budgeting against total VPS RAM<\/h2>\n\n\n<p>Keep ipsets under a quarter of available RAM. On a 1 GB VPS that is 256 MB, but the OS, the packet path and the firewall rule counters take their own share, so a realistic ceiling is about 150 MB of set data. Beyond that point you start losing page cache and the box spends time reclaiming rather than forwarding packets.<\/p>\n<!-- \/wp:post-content -->\n\n<!-- wp:list -->\n<ul><li>1 GB VPS: stay under 40 MB of sets, roughly 800k plain \/32s<\/li><li>2 GB VPS: stay under 90 MB, roughly 2M plain \/32s<\/li><li>4 GB VPS: stay under 180 MB, roughly 4M plain \/32s with aggregation<\/li><li>Any size: reserve 8 percent for kernel slab and set metadata overhead<\/li><\/ul>\n<!-- \/wp:list -->\n\n<!-- wp:heading {\"level\":2} -->\n<h2 class=\"wp-block-heading\">Operating limits you will hit before memory<\/h2>\n<!-- wp:paragraph -->\n<p>Two ceilings bite sooner than RAM on busy boxes. The default maximum number of elements per set is one million, configurable at module load with <code>maxelem<\/code> up to 2^32. The bucket limit and <code>ip_set_max<\/code> are also finite. If <code>ipset add<\/code> returns &#8220;element already added&#8221; during a refresh, you are colliding with an existing set, not exhausting memory.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>Hot updates matter more than raw size. Rebuilding a 90 MB set with <code>ipset swap<\/code> doubles peak memory for the duration of the swap, so plan for 2x during refresh or accept a brief window where the new set is not yet active. Using <code>ipset restore -exist<\/code> against the live set avoids the doubling but holds stale entries until they are explicitly removed.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:heading {\"level\":2} -->\n<h2 class=\"wp-block-heading\">When to leave the kernel behind<\/h2>\n<!-- wp:paragraph -->\n<p>Above roughly five million entries or when the list needs frequent per-entry expiry, the ipset approach becomes awkward. A userspace validator with a compressed trie or a sorted array plus binary search can hold ten million prefixes in under 40 MB and reload atomically without kernel swap windows. The tradeoff is that it adds a lookup step per new connection.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p>For most single-server blocklists, the kernel set at 500k to 2M entries is still the faster and simpler design. Measure with <code>slabinfo<\/code> after a full load rather than trusting a formula, and re-check after any kernel upgrade, since structure sizes have changed between major versions. On <a href=\"https:\/\/virtualserversvps.com\/\">a properly provisioned KVM server<\/a> the difference between a 4 MB and a 90 MB set is the difference between headroom and an OOM kill.<\/p>\n<!-- \/wp:paragraph -->\n<!-- \/wp:heading -->","protected":false},"excerpt":{"rendered":"<p>When it comes to web hosting, choosing the right solution can make all the difference for your website\u2019s performance and reliability. One popular option that has gained traction in recent years is the Virtual Private Server (VPS). In this guide, we\u2019ll dive into what a VPS is, its benefits, and why it might be the perfect fit for your hosting needs. For more insights on VPS options, check out\u00a0Virtual Servers VPS.<\/p>\n","protected":false},"author":1,"featured_media":357,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":6,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-356","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-vps-guides-tutorials"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.1 (Yoast SEO v26.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>ipset Memory Footprint: Sizing Large Blocklists on a Small VPS - Virtual Servers VPS Blog<\/title>\n<meta name=\"description\" content=\"When it comes to web hosting, choosing the right solution can make all the difference for your website\u2019s performance and reliability. One popular option that has gained traction in recent years is the Virtual Private Server (VPS). In this guide, we\u2019ll dive into what a VPS is, its benefits, and why it might be the perfect fit for your hosting needs. For more insights on VPS options, check out\u00a0Virtual Servers VPS.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/virtualserversvps.com\/blog\/ipset-large-blocklist-memory-footprint\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"ipset Memory Footprint: Sizing Large Blocklists on a Small VPS\" \/>\n<meta property=\"og:description\" content=\"ipset Memory Footprint: Sizing Large Blocklists on a Small VPS\" \/>\n<meta property=\"og:url\" content=\"https:\/\/virtualserversvps.com\/blog\/ipset-large-blocklist-memory-footprint\/\" \/>\n<meta property=\"og:site_name\" content=\"Virtual Servers VPS Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-31T05:25:23+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-11-03T22:04:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/virtualserversvps.com\/blog\/wp-content\/uploads\/2026\/01\/669987-3.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"640\" \/>\n\t<meta property=\"og:image:height\" content=\"426\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Virtual-Servers-Vps-Editor\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Virtual-Servers-Vps-Editor\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/virtualserversvps.com\/blog\/ipset-large-blocklist-memory-footprint\/\",\"url\":\"https:\/\/virtualserversvps.com\/blog\/ipset-large-blocklist-memory-footprint\/\",\"name\":\"ipset Memory Footprint: Sizing Large Blocklists on a Small VPS - Virtual Servers VPS Blog\",\"isPartOf\":{\"@id\":\"https:\/\/virtualserversvps.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/virtualserversvps.com\/blog\/ipset-large-blocklist-memory-footprint\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/virtualserversvps.com\/blog\/ipset-large-blocklist-memory-footprint\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/virtualserversvps.com\/blog\/wp-content\/uploads\/2026\/01\/669987-3.jpg\",\"datePublished\":\"2026-01-31T05:25:23+00:00\",\"dateModified\":\"2026-11-03T22:04:09+00:00\",\"author\":{\"@id\":\"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/82a299a8284a66ff49f97c74684724a0\"},\"description\":\"When it comes to web hosting, choosing the right solution can make all the difference for your website\u2019s performance and reliability. One popular option that has gained traction in recent years is the Virtual Private Server (VPS). In this guide, we\u2019ll dive into what a VPS is, its benefits, and why it might be the perfect fit for your hosting needs. For more insights on VPS options, check out\u00a0Virtual Servers VPS.\",\"breadcrumb\":{\"@id\":\"https:\/\/virtualserversvps.com\/blog\/ipset-large-blocklist-memory-footprint\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/virtualserversvps.com\/blog\/ipset-large-blocklist-memory-footprint\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/virtualserversvps.com\/blog\/ipset-large-blocklist-memory-footprint\/#primaryimage\",\"url\":\"https:\/\/virtualserversvps.com\/blog\/wp-content\/uploads\/2026\/01\/669987-3.jpg\",\"contentUrl\":\"https:\/\/virtualserversvps.com\/blog\/wp-content\/uploads\/2026\/01\/669987-3.jpg\",\"width\":640,\"height\":426},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/virtualserversvps.com\/blog\/ipset-large-blocklist-memory-footprint\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/virtualserversvps.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"ipset Memory Footprint: Sizing Large Blocklists on a Small VPS\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/virtualserversvps.com\/blog\/#website\",\"url\":\"https:\/\/virtualserversvps.com\/blog\/\",\"name\":\"Virtual Servers VPS Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/virtualserversvps.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/82a299a8284a66ff49f97c74684724a0\",\"name\":\"Virtual-Servers-Vps-Editor\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/d820b15f1cd028e97610d9adf536df7be5cb6423869967037d468d5355fa003f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/d820b15f1cd028e97610d9adf536df7be5cb6423869967037d468d5355fa003f?s=96&d=mm&r=g\",\"caption\":\"Virtual-Servers-Vps-Editor\"},\"sameAs\":[\"https:\/\/virtualserversvps.com\/blog\"],\"url\":\"https:\/\/virtualserversvps.com\/blog\/author\/virtualserversvps\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"ipset Memory Footprint: Sizing Large Blocklists on a Small VPS - Virtual Servers VPS Blog","description":"When it comes to web hosting, choosing the right solution can make all the difference for your website\u2019s performance and reliability. One popular option that has gained traction in recent years is the Virtual Private Server (VPS). In this guide, we\u2019ll dive into what a VPS is, its benefits, and why it might be the perfect fit for your hosting needs. For more insights on VPS options, check out\u00a0Virtual Servers VPS.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/virtualserversvps.com\/blog\/ipset-large-blocklist-memory-footprint\/","og_locale":"en_US","og_type":"article","og_title":"ipset Memory Footprint: Sizing Large Blocklists on a Small VPS","og_description":"ipset Memory Footprint: Sizing Large Blocklists on a Small VPS","og_url":"https:\/\/virtualserversvps.com\/blog\/ipset-large-blocklist-memory-footprint\/","og_site_name":"Virtual Servers VPS Blog","article_published_time":"2026-01-31T05:25:23+00:00","article_modified_time":"2026-11-03T22:04:09+00:00","og_image":[{"width":640,"height":426,"url":"https:\/\/virtualserversvps.com\/blog\/wp-content\/uploads\/2026\/01\/669987-3.jpg","type":"image\/jpeg"}],"author":"Virtual-Servers-Vps-Editor","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Virtual-Servers-Vps-Editor","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/virtualserversvps.com\/blog\/ipset-large-blocklist-memory-footprint\/","url":"https:\/\/virtualserversvps.com\/blog\/ipset-large-blocklist-memory-footprint\/","name":"ipset Memory Footprint: Sizing Large Blocklists on a Small VPS - Virtual Servers VPS Blog","isPartOf":{"@id":"https:\/\/virtualserversvps.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/virtualserversvps.com\/blog\/ipset-large-blocklist-memory-footprint\/#primaryimage"},"image":{"@id":"https:\/\/virtualserversvps.com\/blog\/ipset-large-blocklist-memory-footprint\/#primaryimage"},"thumbnailUrl":"https:\/\/virtualserversvps.com\/blog\/wp-content\/uploads\/2026\/01\/669987-3.jpg","datePublished":"2026-01-31T05:25:23+00:00","dateModified":"2026-11-03T22:04:09+00:00","author":{"@id":"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/82a299a8284a66ff49f97c74684724a0"},"description":"When it comes to web hosting, choosing the right solution can make all the difference for your website\u2019s performance and reliability. One popular option that has gained traction in recent years is the Virtual Private Server (VPS). In this guide, we\u2019ll dive into what a VPS is, its benefits, and why it might be the perfect fit for your hosting needs. For more insights on VPS options, check out\u00a0Virtual Servers VPS.","breadcrumb":{"@id":"https:\/\/virtualserversvps.com\/blog\/ipset-large-blocklist-memory-footprint\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/virtualserversvps.com\/blog\/ipset-large-blocklist-memory-footprint\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/virtualserversvps.com\/blog\/ipset-large-blocklist-memory-footprint\/#primaryimage","url":"https:\/\/virtualserversvps.com\/blog\/wp-content\/uploads\/2026\/01\/669987-3.jpg","contentUrl":"https:\/\/virtualserversvps.com\/blog\/wp-content\/uploads\/2026\/01\/669987-3.jpg","width":640,"height":426},{"@type":"BreadcrumbList","@id":"https:\/\/virtualserversvps.com\/blog\/ipset-large-blocklist-memory-footprint\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/virtualserversvps.com\/blog\/"},{"@type":"ListItem","position":2,"name":"ipset Memory Footprint: Sizing Large Blocklists on a Small VPS"}]},{"@type":"WebSite","@id":"https:\/\/virtualserversvps.com\/blog\/#website","url":"https:\/\/virtualserversvps.com\/blog\/","name":"Virtual Servers VPS Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/virtualserversvps.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/82a299a8284a66ff49f97c74684724a0","name":"Virtual-Servers-Vps-Editor","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/d820b15f1cd028e97610d9adf536df7be5cb6423869967037d468d5355fa003f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d820b15f1cd028e97610d9adf536df7be5cb6423869967037d468d5355fa003f?s=96&d=mm&r=g","caption":"Virtual-Servers-Vps-Editor"},"sameAs":["https:\/\/virtualserversvps.com\/blog"],"url":"https:\/\/virtualserversvps.com\/blog\/author\/virtualserversvps\/"}]}},"_links":{"self":[{"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/posts\/356","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/comments?post=356"}],"version-history":[{"count":5,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/posts\/356\/revisions"}],"predecessor-version":[{"id":1596,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/posts\/356\/revisions\/1596"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/media\/357"}],"wp:attachment":[{"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/media?parent=356"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/categories?post=356"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/tags?post=356"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}