{"id":117,"date":"2026-07-18T00:00:00","date_gmt":"2026-07-18T00:00:00","guid":{"rendered":"http:\/\/\/var\/www\/html\/?p=117"},"modified":"2026-07-19T16:42:03","modified_gmt":"2026-07-19T16:42:03","slug":"redis-oom-command-not-allowed-when-used-memory-limit-reached-on-alpine-linux","status":"publish","type":"post","link":"https:\/\/staging.butitworkedlocal.com\/?p=117","title":{"rendered":"Redis OOM Error: &#8216;command not allowed when used memory limit reached&#8217; on Alpine Linux"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>Troubleshoot Redis OOM errors on Alpine Linux, common in containerized environments. Learn to analyze memory, adjust limits, and optimize Redis for production stability.<\/strong><\/p>\n\n\n<h2>Introduction<\/h2>\n\n<p>As an experienced Systems Administrator, encountering Redis Out-Of-Memory (OOM) errors is a critical incident that can bring applications to a halt. The specific error message &quot;OOM command not allowed when used memory limit reached&quot; indicates that your Redis instance has hit its configured <code>maxmemory<\/code> threshold and, crucially, is configured with a <code>noeviction<\/code> policy, preventing it from automatically removing keys to free up space. This is particularly common in resource-constrained environments like Docker containers running Alpine Linux, where memory limits are often tightly controlled. When this occurs, your application will experience command failures, timeouts, and data unavailability, leading to a degraded user experience or complete service outage.<\/p>\n\n<p>This guide will provide a highly technical, accurate, and step-by-step approach to diagnose, understand, and resolve this critical Redis OOM issue on Alpine Linux environments.<\/p>\n\n<h3>Symptom &amp; Error Signature<\/h3>\n\n<p>When Redis reaches its <code>maxmemory<\/code> limit with a <code>noeviction<\/code> policy, all write commands (and some read commands depending on specific configuration) will be blocked. You will typically observe the following:<\/p>\n\n<p><strong>1. Application Logs:<\/strong>\nYour application (e.g., PHP, Python, Node.js) will receive errors from its Redis client library:<\/p>\n\n<pre><code class=\"language-\"># Example PHP client error\n[2026-07-18 10:30:05] app.ERROR: RedisException: OOM command not allowed when used memory &gt; &#039;maxmemory&#039; in \/app\/vendor\/phpredis\/phpredis\/src\/Redis.php:123\nStack trace:\n#0 \/app\/src\/Service\/CacheService.php(45): Redis-&gt;setEx()<\/code><\/pre>\n\n<h1>Example Python client error\nTraceback (most recent call last):\n  File &quot;myapp.py&quot;, line 25, in &lt;module&gt;\n    r.set(&quot;user:123&quot;, &quot;data&quot;)\n  File &quot;\/usr\/local\/lib\/python3.9\/site-packages\/redis\/client.py&quot;, line 1914, in set\n    return self.execute_command(&#039;SET&#039;, <em>args, <\/em>*kwargs)\n  File &quot;\/usr\/local\/lib\/python3.9\/site-packages\/redis\/client.py&quot;, line 1021, in execute_command\n    return self.<em>execute<\/em>command(conn, command_name, <em>args, <\/em>*kwargs)\n  File &quot;\/usr\/local\/lib\/python3.9\/site-packages\/redis\/client.py&quot;, line 1047, in <em>execute<\/em>command\n    response = conn.read_response()\n  File &quot;\/usr\/local\/lib\/python3.9\/site-packages\/redis\/connection.py&quot;, line 828, in read_response\n    raise self.read_error()\nredis.exceptions.ResponseError: OOM command not allowed when used memory &gt; &#039;maxmemory&#039; (bytes)\n<code><\/code>`<\/h1>\n\n<p><strong>2. Redis Server Logs:<\/strong>\nThe Redis server itself will log warnings indicating the OOM condition:<\/p>\n\n<pre><code class=\"language-\">1:M 18 Jul 2026 10:30:00.123 # WARNING: OOM command not allowed when used memory &gt; &#039;maxmemory&#039; (1073741824 bytes)<\/code><\/pre>\n\n<p><strong>3. <code>redis-cli<\/code> Output:<\/strong>\nDirect attempts to write data via <code>redis-cli<\/code> will also fail:<\/p>\n\n<pre><code class=\"language-bash\">redis-cli SET mykey myvalue\n(error) OOM command not allowed when used memory &gt; &#039;maxmemory&#039; (1073741824 bytes)<\/code><\/pre>\n\n<h3>Root Cause Analysis<\/h3>\n\n<p>The &quot;OOM command not allowed&quot; error on Alpine Linux, or any other OS, points to a fundamental conflict between available memory, configured limits, and the Redis eviction policy.<\/p>\n\n<ol><li> <strong><code>maxmemory<\/code> Limit Reached<\/strong>: This is the primary trigger. Redis is configured with a <code>maxmemory<\/code> directive in its <code>redis.conf<\/code> (or via <code>CONFIG SET<\/code>) which sets an explicit upper bound on the amount of memory it will use for data. When the <code>used_memory<\/code> metric (reported by <code>INFO memory<\/code>) exceeds this threshold, Redis enters an OOM state.<\/li><\/ol>\n\n<ol><li> <strong><code>noeviction<\/code> Policy<\/strong>: The choice of <code>maxmemory-policy<\/code> dictates Redis&#039;s behavior when <code>maxmemory<\/code> is reached.<\/li><li>    *   If <code>maxmemory-policy<\/code> is set to <code>noeviction<\/code> (which is often the default or chosen for critical data stores), Redis will return OOM errors for all write commands (e.g., <code>SET<\/code>, <code>LPUSH<\/code>, <code>HSET<\/code>) and some read commands that might potentially create new keys or increase memory usage (e.g., <code>GETSET<\/code>, <code>SADD<\/code> if a set key doesn&#039;t exist).<\/li><li>    *   Other policies (e.g., <code>allkeys-lru<\/code>, <code>volatile-ttl<\/code>) would attempt to evict keys to free up space, preventing the OOM error but potentially losing data.<\/li><\/ol>\n\n<ol><li> <strong>Actual Memory Consumption<\/strong>: The memory usage within Redis can grow due to several factors:<\/li><li>    *   <strong>Data Growth<\/strong>: Natural increase in the number of keys or the size of values stored.<\/li><li>    *   <strong>Temporary Keys<\/strong>: Keys without TTLs that accumulate over time.<\/li><li>    *   <strong>Memory Fragmentation<\/strong>: The <code>mem<em>fragmentation<\/em>ratio<\/code> (from <code>INFO memory<\/code>) indicates how efficiently Redis is using physical memory. A high ratio (e.g., &gt; 1.5) means Redis is consuming significantly more physical RAM than its reported <code>used_memory<\/code> due to the underlying memory allocator.<\/li><li>    *   <strong>Client Output Buffers<\/strong>: Large or numerous client connections can consume significant memory for output buffers.<\/li><li>    *   <strong>Replication Buffers<\/strong>: Master-replica replication links maintain buffers for changes, which can grow large, especially if replicas fall behind.<\/li><li>    *   <strong>RDB\/AOF Background Saves<\/strong>: During a background save operation (BGSAVE or BGREWRITEAOF), Redis uses a copy-on-write mechanism. If data changes significantly during a save, the memory footprint can temporarily double.<\/li><li>    *   <strong>Lua Scripting<\/strong>: Complex or long-running Lua scripts can hold onto memory.<\/li><\/ol>\n\n<ol><li> <strong>Alpine Linux &amp; Docker Specifics<\/strong>:<\/li><li>    <em>   <strong>Container Resource Limits<\/strong>: In Docker or Kubernetes, the container itself has memory limits (e.g., <code>--memory<\/code> flag for <code>docker run<\/code>, <code>resources.limits.memory<\/code> in Kubernetes). It&#039;s crucial that the Redis <code>maxmemory<\/code> setting is <\/em>less than<em> the container&#039;s memory limit. If Redis&#039;s <code>used<em>memory<\/em>rss<\/code> (Resident Set Size) approaches or exceeds the container&#039;s limit, the OS&#039;s OOM killer will terminate the <\/em>entire container*, which is much more disruptive than Redis simply refusing commands.<\/li><li>    *   <strong>Memory Allocator<\/strong>: Alpine Linux by default uses <code>musl libc<\/code> for its C standard library, which includes a simple <code>malloc<\/code> implementation. Official Redis builds typically link against <code>jemalloc<\/code> on Linux, which is highly optimized for Redis&#039;s allocation patterns and generally results in lower fragmentation. If your Redis build on Alpine is using <code>musl<\/code>&#039;s <code>malloc<\/code>, you might experience higher memory fragmentation and less efficient memory utilization compared to a <code>jemalloc<\/code> build. You can check <code>mem_allocator<\/code> in <code>INFO memory<\/code>.<\/li><\/ol>\n\n<h3>Step-by-Step Resolution<\/h3>\n\n<p>Resolving this OOM issue requires a systematic approach, combining immediate mitigation with long-term optimization and scaling strategies.<\/p>\n\n<h4>1. Analyze Current Redis Configuration and Memory Usage<\/h4>\n\n<p>First, gather critical information about your Redis instance. If running in Docker, you&#039;ll need to execute commands inside the container.<\/p>\n\n<pre><code class=\"language-bash\"># Example: Accessing a Dockerized Redis instance<\/code><\/pre>\n\n<h1>&#8212; OR &#8212;<\/h1>\n\n<h1>Example: Accessing a directly installed Redis instance\nredis-cli\n<code><\/code>`<\/h1>\n\n<p>Once connected to <code>redis-cli<\/code>:<\/p>\n\n<pre><code class=\"language-bash\"># Check current maxmemory limit and eviction policy\nCONFIG GET maxmemory<\/code><\/pre>\n\n<h1>Get detailed memory statistics\nINFO memory<\/h1>\n\n<h1>Expected important output from INFO memory:\n# used_memory: The total number of bytes allocated by Redis using its allocator (usually jemalloc)\n# used<em>memory<\/em>rss: The number of bytes that Redis allocated as reported by the operating system.\n# used<em>memory<\/em>peak: The maximum memory consumed by Redis (in bytes) since server startup.\n# mem<em>fragmentation<\/em>ratio: used<em>memory<\/em>rss \/ used_memory. A ratio &gt; 1 means fragmentation.\n# maxmemory_human: The configured maxmemory limit in human-readable format.\n# maxmemory_policy: The configured eviction policy.\n# mem_allocator: The memory allocator used (e.g., &quot;jemalloc-5.1.0&quot;, &quot;libc&quot;)<\/h1>\n\n<h1>Check connected clients (can consume memory for output buffers)\nINFO clients<\/h1>\n\n<h1>Check persistence information (RDB\/AOF background saves consume temporary memory)\nINFO persistence\n<code><\/code>`<\/h1>\n\n<blockquote><p>[!IMPORTANT]\nA <code>mem<em>fragmentation<\/em>ratio<\/code> significantly above 1.0 (e.g., 1.5+) indicates memory fragmentation. If <code>mem<em>allocator<\/code> is <code>libc<\/code>, especially on Alpine, this could be a contributing factor. If <code>used<\/em>memory_rss<\/code> is close to your Docker container&#039;s memory limit, you risk container OOM kills.<\/p><\/blockquote>\n\n<h4>2. Identify Memory Consumers<\/h4>\n\n<p>Pinpoint which keys or operations are consuming the most memory.<\/p>\n\n<pre><code class=\"language-bash\"># Identify large keys (requires Redis 4.0+)\n# This is a good starting point, but can be slow on very large databases\n# Replace &lt;prefix&gt;* with actual key patterns if known<\/code><\/pre>\n\n<h1>For more detailed memory breakdown (Redis 4.0+)\nredis-cli MEMORY STATS<\/h1>\n\n<h1>Monitor commands in real-time (use cautiously in production due to overhead)\n# This can help identify commands that might be creating large objects or many keys rapidly.\nredis-cli MONITOR\n<code><\/code>`<\/h1>\n\n<p>If running in Docker, monitor the container&#039;s resource usage:<\/p>\n\n<pre><code class=\"language-bash\">docker stats &lt;redis-container-id-or-name&gt;<\/code><\/pre>\n\n<p>Look for trends in <code>MEM USAGE \/ LIMIT<\/code>.<\/p>\n\n<h4>3. Adjust Redis <code>maxmemory<\/code> and <code>maxmemory-policy<\/code> (Short-term \/ Mitigation)<\/h4>\n\n<p>This step provides immediate relief but might not be a long-term solution without further optimization.<\/p>\n\n<p><strong>A. Increase <code>maxmemory<\/code> (Temporary Relief or Resource Upgrade)<\/strong><\/p>\n\n<p>If you have available RAM on your host or can increase your container&#039;s memory limit, raising <code>maxmemory<\/code> can alleviate the immediate pressure.<\/p>\n\n<blockquote><p>[!WARNING]\nIncreasing <code>maxmemory<\/code> without addressing underlying data growth is merely a band-aid. Also, ensure your new <code>maxmemory<\/code> value is comfortably <em>below<\/em> your Docker container&#039;s memory limit to prevent container OOM kills. A good rule of thumb is <code>maxmemory<\/code> &lt; <code>container<em>memory<\/em>limit<\/code> * 0.8 to account for overhead.<\/p><\/blockquote>\n\n<p><strong>Method 1: Via <code>redis-cli<\/code> (Runtime &#8211; temporary until restart)<\/strong><\/p>\n\n<pre><code class=\"language-bash\"># Example: Set maxmemory to 2GB (2147483648 bytes)\nCONFIG SET maxmemory 2gb<\/code><\/pre>\n\n<p><strong>Method 2: Via <code>redis.conf<\/code> (Persistent)<\/strong><\/p>\n\n<p>Edit your <code>redis.conf<\/code> file (typically located at <code>\/etc\/redis\/redis.conf<\/code> or in your Docker volume mount) and modify the <code>maxmemory<\/code> directive.<\/p>\n\n<pre><code class=\"language-ini\"># \/etc\/redis\/redis.conf or mounted config file\nmaxmemory 2gb<\/code><\/pre>\n\n<p>After modifying <code>redis.conf<\/code>, you <strong>must<\/strong> restart the Redis service or container:<\/p>\n\n<pre><code class=\"language-bash\"># For a non-containerized Redis instance (e.g., Systemd on Ubuntu)<\/code><\/pre>\n\n<h1>For a Docker container\ndocker restart &lt;redis-container-id-or-name&gt;\n<code><\/code>`<\/h1>\n\n<p><strong>B. Adjust <code>maxmemory-policy<\/code> (Data Loss Risk vs. Availability)<\/strong><\/p>\n\n<p>Changing the eviction policy can prevent the OOM error by allowing Redis to automatically delete keys. This is suitable for Redis instances primarily used as a cache.<\/p>\n\n<blockquote><p>[!IMPORTANT]\nCarefully consider the implications of changing <code>maxmemory-policy<\/code>. Policies other than <code>noeviction<\/code> will result in <strong>data loss<\/strong> when the <code>maxmemory<\/code> limit is hit. Choose a policy that aligns with your application&#039;s data criticality.<\/p><\/blockquote>\n\n<p>Common eviction policies:\n*   <code>noeviction<\/code>: (Current problematic state) Returns errors on write operations when maxmemory is reached. Use for critical data.\n<em>   <code>allkeys-lru<\/code>: Evicts keys least recently used (LRU) from <\/em>all* keys until <code>maxmemory<\/code> is respected. Ideal for general-purpose caching.\n<em>   <code>volatile-lru<\/code>: Evicts LRU keys <\/em>only among those with an expire set*. Useful if you mix persistent and cache data.\n<em>   <code>allkeys-random<\/code>: Evicts random keys from <\/em>all* keys.\n<em>   <code>volatile-random<\/code>: Evicts random keys <\/em>only among those with an expire set*.\n<em>   <code>allkeys-ttl<\/code>: Evicts keys with the shortest time to live (TTL) from <\/em>all* keys.\n<em>   <code>volatile-ttl<\/code>: Evicts keys with the shortest time to live (TTL) <\/em>only among those with an expire set*.<\/p>\n\n<p>To change the policy:<\/p>\n\n<p><strong>Method 1: Via <code>redis-cli<\/code> (Runtime &#8211; temporary until restart)<\/strong><\/p>\n\n<pre><code class=\"language-bash\"># Example: Set policy to allkeys-lru for a cache\nCONFIG SET maxmemory-policy allkeys-lru<\/code><\/pre>\n\n<p><strong>Method 2: Via <code>redis.conf<\/code> (Persistent)<\/strong><\/p>\n\n<p>Edit your <code>redis.conf<\/code> file:<\/p>\n\n<pre><code class=\"language-ini\"># \/etc\/redis\/redis.conf or mounted config file\nmaxmemory-policy allkeys-lru<\/code><\/pre>\n\n<p>Then restart Redis as described above.<\/p>\n\n<h4>4. Optimize Data Structures and Application Usage<\/h4>\n\n<p>This is a crucial long-term strategy to reduce Redis&#039;s memory footprint.<\/p>\n\n<ul><li>  <strong>Set TTLs for Transient Data<\/strong>: Ensure that session data, temporary caches, and other non-persistent data automatically expire.<\/li><li>  <code><\/code>`bash<\/li><li>  SET my<em>temp<\/em>key &quot;some data&quot; EX 3600 # Expires in 1 hour<\/li><li>  <code><\/code>`<\/li><li>  <strong>Use Efficient Data Structures<\/strong>:<\/li><li>  *   <strong>Hashes for Related Fields<\/strong>: Instead of <code>SET user:1:name &quot;Alice&quot;<\/code>, <code>SET user:1:email &quot;alice@example.com&quot;<\/code>, use a single hash: <code>HSET user:1 name &quot;Alice&quot; email &quot;alice@example.com&quot;<\/code>. Hashes (especially &quot;ziplist&quot; encoded ones for small numbers of fields\/values) are more memory-efficient than many individual string keys.<\/li><li>  *   <strong>Bitmaps for Booleans\/Flags<\/strong>: For many on\/off flags, bitmaps are extremely memory-efficient.<\/li><li>  *   <strong>HyperLogLogs for Unique Counts<\/strong>: For approximate unique counts (e.g., unique visitors), HyperLogLogs (<code>PFADD<\/code>, <code>PFCOUNT<\/code>) use fixed, small amounts of memory regardless of the number of unique items.<\/li><li>  <strong>Avoid Large Keys\/Values<\/strong>: Very large lists, sets, hashes, or string values consume significant memory. Consider breaking them down or offloading large binary data to object storage.<\/li><li>  <strong>Connection Pooling<\/strong>: Ensure your application uses connection pooling to manage client connections efficiently, reducing the number of active clients and their associated output buffers.<\/li><\/ul>\n\n<h4>5. Scale Redis Resources (Long-term \/ Scaling)<\/h4>\n\n<p>When optimization isn&#039;t enough, scaling is necessary.<\/p>\n\n<ul><li>  <strong>Vertical Scaling<\/strong>: Increase the RAM allocated to the VM or Docker container running Redis. This is often the simplest first step if you have available host resources.<\/li><li>  <code><\/code>`bash<\/li><li>  # Example for Docker compose<\/li><li>  services:<\/li><li>    redis:<\/li><li>      image: redis:7-alpine<\/li><li>      deploy:<\/li><li>        resources:<\/li><li>          limits:<\/li><li>            memory: 2G # Increase to 2GB<\/li><li>  <code><\/code>`<\/li><li>  Remember to also adjust Redis&#039;s <code>maxmemory<\/code> accordingly to utilize the new resources.<\/li><li>  <strong>Horizontal Scaling (Redis Cluster)<\/strong>: For very large datasets or high throughput, consider a Redis Cluster. This shards your data across multiple Redis nodes, distributing memory and CPU load. This requires significant application-level changes and operational complexity.<\/li><li>  <strong>Read Replicas<\/strong>: If your workload is read-heavy, offload read queries to Redis replicas, reducing the load (and potentially memory usage if client buffers are an issue) on the primary instance.<\/li><\/ul>\n\n<h4>6. Tune Alpine\/Docker Memory Allocator (Advanced)<\/h4>\n\n<p>If you suspect memory fragmentation is a major issue (high <code>mem<em>fragmentation<\/em>ratio<\/code>) and your <code>INFO memory<\/code> shows <code>mem_allocator: libc<\/code> on Alpine, you might benefit from using <code>jemalloc<\/code>.<\/p>\n\n<pre><code class=\"language-bash\"># Check current allocator\nredis-cli INFO memory | grep mem_allocator<\/code><\/pre>\n\n<ul><li>  <strong>Official Redis Docker Images<\/strong>: The official <code>redis:&lt;version&gt;-alpine<\/code> Docker images typically ship with Redis compiled to use <code>jemalloc<\/code>. If you&#039;re using a custom Dockerfile or a non-official image, you might not have <code>jemalloc<\/code>.<\/li><li>  <strong>Building with <code>jemalloc<\/code><\/strong>: If you&#039;re building Redis from source on Alpine, ensure <code>jemalloc<\/code> is included. This usually involves installing <code>jemalloc-dev<\/code> and configuring Redis with <code>MALLOC=jemalloc<\/code>.<\/li><li>  <code><\/code>`dockerfile<\/li><li>  # Example Dockerfile snippet for building Redis with jemalloc on Alpine<\/li><li>  FROM alpine:3.18<\/li><li>  RUN apk add &#8211;no-cache gcc make musl-dev jemalloc-dev tcl<\/li><li>  WORKDIR \/tmp\/redis<\/li><li>  RUN wget http:\/\/download.redis.io\/releases\/redis-7.0.11.tar.gz &amp;&amp; <\/li><li>      tar xvzf redis-7.0.11.tar.gz &amp;&amp; <\/li><li>      cd redis-7.0.11 &amp;&amp; <\/li><li>      make MALLOC=jemalloc &amp;&amp; <\/li><li>      make install<\/li><\/ul>\n\n<h1>&#8230; rest of your Redis setup &#8230;\n    <code><\/code>`\n    &gt; [!IMPORTANT]\n    &gt; Switching memory allocators requires rebuilding Redis and is a non-trivial change. It should be thoroughly tested. For most users, simply using the official <code>redis:alpine<\/code> Docker images is sufficient as they are pre-optimized.<\/h1>\n\n<h4>7. Implement Robust Monitoring and Alerting<\/h4>\n\n<p>Proactive monitoring is key to preventing future OOM issues.<\/p>\n\n<ul><li>  <strong>Key Metrics to Monitor<\/strong>:<\/li><li>  *   <code>used_memory<\/code>: Absolute memory usage.<\/li><li>  *   <code>used<em>memory<\/em>rss<\/code>: Physical memory consumed.<\/li><li>  *   <code>mem<em>fragmentation<\/em>ratio<\/code>: Detects memory fragmentation.<\/li><li>  *   <code>keys<\/code>: Number of keys.<\/li><li>  *   <code>expires<\/code>: Number of keys with TTLs.<\/li><li>  *   <code>evicted_keys<\/code>: (If using an eviction policy) indicates when Redis is actively deleting keys.<\/li><li>  *   <code>blocked_clients<\/code>: Number of clients blocked by commands (can indicate issues).<\/li><li>  <strong>Alerting<\/strong>: Set up alerts for when <code>used<em>memory<\/code> (or <code>used<\/em>memory_rss<\/code>) exceeds a predefined threshold (e.g., 70-80% of <code>maxmemory<\/code> or container limit) to provide early warning. Also, alert on <code>OOM command not allowed<\/code> errors in logs.<\/li><li>  <strong>Tools<\/strong>: Utilize monitoring solutions like Prometheus + Grafana, Datadog, New Relic, or custom scripts to collect and visualize Redis metrics.<\/li><\/ul>\n\n<p>By systematically applying these steps, you can effectively troubleshoot and resolve the &quot;Redis OOM command not allowed when used memory limit reached&quot; error, ensuring the stability and performance of your applications.<\/p>","protected":false},"excerpt":{"rendered":"<p>Troubleshoot Redis OOM errors on Alpine Linux, common in containerized environments. Learn to analyze memory, adjust limits, and optimize Redis for production stability.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[187],"tags":[10,40,69,299,83,295,7],"class_list":["post-117","post","type-post","status-publish","format-standard","hentry","category-database","tag-alpine-linux","tag-devops","tag-docker","tag-memory-management","tag-oom","tag-redis","tag-web-hosting"],"_links":{"self":[{"href":"https:\/\/staging.butitworkedlocal.com\/index.php?rest_route=\/wp\/v2\/posts\/117","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/staging.butitworkedlocal.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/staging.butitworkedlocal.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/staging.butitworkedlocal.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/staging.butitworkedlocal.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=117"}],"version-history":[{"count":1,"href":"https:\/\/staging.butitworkedlocal.com\/index.php?rest_route=\/wp\/v2\/posts\/117\/revisions"}],"predecessor-version":[{"id":236,"href":"https:\/\/staging.butitworkedlocal.com\/index.php?rest_route=\/wp\/v2\/posts\/117\/revisions\/236"}],"wp:attachment":[{"href":"https:\/\/staging.butitworkedlocal.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=117"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/staging.butitworkedlocal.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=117"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/staging.butitworkedlocal.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=117"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}