{"id":682,"date":"2026-04-15T00:16:16","date_gmt":"2026-04-15T00:16:16","guid":{"rendered":"https:\/\/www.devopsschool.com\/tutorials\/google-cloud-memorystore-for-redis-tutorial-architecture-pricing-use-cases-and-hands-on-guide-for-databases\/"},"modified":"2026-04-15T00:16:16","modified_gmt":"2026-04-15T00:16:16","slug":"google-cloud-memorystore-for-redis-tutorial-architecture-pricing-use-cases-and-hands-on-guide-for-databases","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/tutorials\/google-cloud-memorystore-for-redis-tutorial-architecture-pricing-use-cases-and-hands-on-guide-for-databases\/","title":{"rendered":"Google Cloud Memorystore for Redis Tutorial: Architecture, Pricing, Use Cases, and Hands-On Guide for Databases"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Category<\/h2>\n\n\n\n<p>Databases<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Introduction<\/h2>\n\n\n\n<p>Memorystore for Redis is Google Cloud\u2019s fully managed Redis service for building low-latency applications. It provides an in-memory data store that you can use as a cache, session store, real-time data store, or lightweight message\/queue component\u2014without operating your own Redis servers.<\/p>\n\n\n\n<p>In simple terms: you create a Redis instance in a Google Cloud region, connect to it over a private IP from your applications running in the same VPC, and use standard Redis commands to store and retrieve data quickly.<\/p>\n\n\n\n<p>Technically, Memorystore for Redis provisions and operates Redis nodes on Google-managed infrastructure, exposes a private endpoint to your VPC, and integrates with Google Cloud IAM for management-plane access (create\/resize\/delete, etc.) and with Cloud Monitoring for metrics. Depending on tier, it can provide replication and automatic failover to improve availability.<\/p>\n\n\n\n<p>The problem it solves is operational and performance-related: teams want Redis-grade latency and simplicity for caching and ephemeral data, but don\u2019t want to handle provisioning, patching, failover orchestration, monitoring setup, and capacity planning for self-managed Redis clusters.<\/p>\n\n\n\n<blockquote>\n<p>Service status \/ naming: <strong>\u201cMemorystore for Redis\u201d<\/strong> is the current, active service name in Google Cloud. Google Cloud also offers related products such as <strong>Memorystore for Memcached<\/strong> and (in many regions) <strong>Memorystore for Redis Cluster<\/strong>. This tutorial focuses on <strong>Memorystore for Redis<\/strong> (not Redis Cluster).<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">2. What is Memorystore for Redis?<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Official purpose<\/h3>\n\n\n\n<p>Memorystore for Redis is a managed Redis service on Google Cloud designed to provide low-latency access to an in-memory data store for caching and other Redis-backed patterns.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Core capabilities<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Provision managed Redis instances with selected capacity (memory size).<\/li>\n<li>Connect to Redis using standard clients and Redis protocol over a private IP.<\/li>\n<li>Integrate with Google Cloud networking (VPC) and observability (Cloud Monitoring).<\/li>\n<li>Support different availability tiers (for example, single-node vs. replicated with failover\u2014verify current tier names and behaviors in official docs).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Major components<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Redis instance<\/strong>: The managed Redis deployment you create (capacity, region, tier).<\/li>\n<li><strong>Endpoint (host\/port)<\/strong>: A private IP and port (typically 6379) reachable from your VPC.<\/li>\n<li><strong>VPC connectivity<\/strong>: Connectivity mechanism that attaches the managed service to your VPC (commonly via Private Service Access; also other connect modes may exist\u2014verify in official docs for your region and instance settings).<\/li>\n<li><strong>Operations plane<\/strong>: Google Cloud APIs, Console, and <code>gcloud<\/code> commands to create, resize, patch, and delete instances.<\/li>\n<li><strong>Monitoring<\/strong>: Metrics emitted to Cloud Monitoring, plus operational events surfaced in Google Cloud.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Service type<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Managed database service<\/strong> (in-memory key-value store) within the broader <strong>Databases<\/strong> category.<\/li>\n<li>You manage <strong>configuration choices<\/strong> (region, size, tier), while Google manages most infrastructure operations.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Scope (regional\/zonal\/project)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Instances are typically <strong>regional resources<\/strong>: you choose a <strong>region<\/strong>, and the service places the underlying node(s) in one or more zones in that region depending on tier.<\/li>\n<li>Instances are <strong>project-scoped<\/strong>: created inside a Google Cloud project and attached to a VPC network in that project (or potentially shared VPC setups\u2014verify your organization\u2019s architecture).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">How it fits into the Google Cloud ecosystem<\/h3>\n\n\n\n<p>Memorystore for Redis is commonly paired with:\n&#8211; <strong>Compute Engine<\/strong> (VM-based apps)\n&#8211; <strong>Google Kubernetes Engine (GKE)<\/strong> (microservices)\n&#8211; <strong>Cloud Run<\/strong> (serverless containers, usually via Serverless VPC Access)\n&#8211; <strong>App Engine<\/strong> (where networking allows)\n&#8211; <strong>Cloud SQL \/ AlloyDB \/ Spanner \/ Firestore<\/strong> (as the \u201csystem of record,\u201d with Redis as a cache or ephemeral store)\n&#8211; <strong>Cloud Monitoring and Cloud Logging<\/strong> (observability)\n&#8211; <strong>VPC, firewall rules, Private Service Access \/ VPC peering<\/strong> (networking)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3. Why use Memorystore for Redis?<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Business reasons<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Faster applications<\/strong>: reduce page\/API latency by caching expensive queries and computed results.<\/li>\n<li><strong>Higher throughput<\/strong>: offload frequent reads from primary databases.<\/li>\n<li><strong>Reduced engineering overhead<\/strong>: avoid staffing and toil for operating Redis (patching, node replacement, failure handling).<\/li>\n<li><strong>Predictable delivery<\/strong>: teams can standardize on a managed Redis baseline across environments.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Technical reasons<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Low latency<\/strong>: in-memory reads\/writes for hot data.<\/li>\n<li><strong>Rich data structures<\/strong>: strings, hashes, lists, sets, sorted sets, streams (depending on Redis version).<\/li>\n<li><strong>Simple integration<\/strong>: nearly every language has mature Redis clients.<\/li>\n<li><strong>Common patterns supported<\/strong>: caching, rate limiting, distributed locks, sessions, leaderboards.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Operational reasons<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Managed provisioning and maintenance<\/strong>: create instances quickly and let Google manage underlying infrastructure operations (details vary by tier).<\/li>\n<li><strong>Built-in metrics<\/strong>: integrate with Cloud Monitoring for memory usage, connections, commands, evictions, etc.<\/li>\n<li><strong>Resize workflow<\/strong>: scale memory up\/down via a managed operation (behavior\/downtime depends on tier\u2014verify).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Security \/ compliance reasons<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Private networking<\/strong>: typically no public IP exposure; access is from your VPC.<\/li>\n<li><strong>IAM for management<\/strong>: control who can create\/modify\/delete instances.<\/li>\n<li><strong>Auditability<\/strong>: administrative actions can be captured in Cloud Audit Logs (verify exact audit log types enabled in your org).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Scalability \/ performance reasons<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Vertical scaling<\/strong>: increase memory capacity to handle larger working sets.<\/li>\n<li><strong>High availability options<\/strong>: tiers with replication and automatic failover (recommended for production).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">When teams should choose it<\/h3>\n\n\n\n<p>Choose Memorystore for Redis when:\n&#8211; You need <strong>sub-millisecond to low-millisecond<\/strong> access for hot data.\n&#8211; Your primary database is too slow\/expensive for repeated reads.\n&#8211; You need a <strong>managed<\/strong> Redis that integrates cleanly with VPC and Google Cloud ops tooling.\n&#8211; Your workload fits a <strong>single Redis instance<\/strong> model (one primary endpoint), and scaling can be done vertically.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">When teams should not choose it<\/h3>\n\n\n\n<p>Avoid (or reconsider) Memorystore for Redis when:\n&#8211; You need <strong>massive horizontal scale with sharding\/cluster mode<\/strong> beyond what a single instance can handle (consider <strong>Memorystore for Redis Cluster<\/strong> or another approach).\n&#8211; You need <strong>multi-region active-active Redis<\/strong> built-in (Redis is usually regional; multi-region requires application-level patterns).\n&#8211; Your data must be <strong>durable as the system of record<\/strong>. Redis is typically for cache\/ephemeral\/stateful acceleration. Use a durable database as primary.\n&#8211; You require server-level control (custom Redis modules, OS access, custom config). Managed services restrict configuration and commands.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4. Where is Memorystore for Redis used?<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Industries<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>E-commerce and retail (catalog and pricing cache, session state)<\/li>\n<li>Gaming (leaderboards, matchmaking state, rate limiting)<\/li>\n<li>Media and streaming (content metadata cache)<\/li>\n<li>Fintech (rate limiting, fraud signals cache, ephemeral risk flags)<\/li>\n<li>SaaS (tenant config cache, feature flag cache, session\/token store)<\/li>\n<li>AdTech\/MarTech (real-time counters, frequency capping)<\/li>\n<li>Logistics (tracking state cache, routing computations)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Team types<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Platform engineering (shared caching layer)<\/li>\n<li>SRE\/operations (standardized managed service)<\/li>\n<li>Application development teams (API performance)<\/li>\n<li>Data engineering (fast lookup tables, deduplication caches)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Workloads<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Read-heavy APIs with repeated queries<\/li>\n<li>Burst traffic workloads (campaigns, sales events)<\/li>\n<li>Microservices architectures that need shared low-latency state<\/li>\n<li>Event-driven systems that need deduplication\/idempotency keys<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Architectures<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>3-tier web apps (LB \u2192 app \u2192 DB, with Redis as cache)<\/li>\n<li>Microservices on GKE\/Cloud Run with Redis for shared state<\/li>\n<li>Hybrid: on-prem apps connected via Cloud VPN\/Interconnect to a Google Cloud VPC (connectivity must be designed carefully\u2014verify constraints)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Real-world deployment contexts<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Production<\/strong>: typically uses a high-availability tier, same-region placement, strict IAM, and monitoring\/alerting.<\/li>\n<li><strong>Dev\/test<\/strong>: often uses smaller instances, single-node tiers, and relaxed availability requirements to save cost.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">5. Top Use Cases and Scenarios<\/h2>\n\n\n\n<p>Below are realistic patterns where Memorystore for Redis is commonly used.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1) Database query caching<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Problem<\/strong>: Repeated reads (product pages, user profiles) overload the primary database.<\/li>\n<li><strong>Why this fits<\/strong>: Redis is a fast key-value store with TTL support.<\/li>\n<li><strong>Example<\/strong>: Cache <code>user:{id}<\/code> JSON for 5 minutes; fall back to Cloud SQL on cache miss.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">2) HTTP\/API response caching<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Problem<\/strong>: Expensive API endpoints return the same response for many users.<\/li>\n<li><strong>Why this fits<\/strong>: Cache serialized responses keyed by request parameters.<\/li>\n<li><strong>Example<\/strong>: Cache \u201ctop sellers\u201d response for 60 seconds during peak.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">3) Session storage for stateless app servers<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Problem<\/strong>: Sticky sessions are undesirable; multiple app instances need shared session state.<\/li>\n<li><strong>Why this fits<\/strong>: Redis is commonly used as a session store.<\/li>\n<li><strong>Example<\/strong>: Store session tokens with TTL; scale Cloud Run instances without losing session affinity.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">4) Rate limiting and quota enforcement<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Problem<\/strong>: Need to throttle abusive clients or enforce per-user limits.<\/li>\n<li><strong>Why this fits<\/strong>: Redis supports atomic increments and expirations.<\/li>\n<li><strong>Example<\/strong>: <code>INCR<\/code> per IP per minute with expiration; block when count exceeds threshold.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">5) Distributed locks (with caution)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Problem<\/strong>: Multiple workers must avoid processing the same job concurrently.<\/li>\n<li><strong>Why this fits<\/strong>: Redis can implement simple locks (but correctness must be designed carefully).<\/li>\n<li><strong>Example<\/strong>: Acquire lock key <code>lock:invoice:123<\/code> with TTL before processing.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">6) Real-time leaderboards<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Problem<\/strong>: Need fast ranking updates and reads.<\/li>\n<li><strong>Why this fits<\/strong>: Sorted sets are efficient for scores\/ranks.<\/li>\n<li><strong>Example<\/strong>: Use <code>ZINCRBY leaderboard daily:{date}<\/code> and <code>ZREVRANGE<\/code> to show top players.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">7) Background job queues (lightweight)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Problem<\/strong>: Need a simple queue for background tasks.<\/li>\n<li><strong>Why this fits<\/strong>: Lists\/streams can represent queues; quick to prototype.<\/li>\n<li><strong>Example<\/strong>: Push job IDs into a list; workers <code>BRPOP<\/code> jobs. (For enterprise-grade queues, consider Pub\/Sub, Cloud Tasks\u2014Redis queues require careful reliability handling.)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">8) Feature flags and configuration caching<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Problem<\/strong>: Feature flag service\/database is too slow for per-request checks.<\/li>\n<li><strong>Why this fits<\/strong>: Cache flags per tenant\/environment.<\/li>\n<li><strong>Example<\/strong>: Cache <code>flags:{tenant}<\/code> for 30 seconds; refresh asynchronously.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">9) Idempotency keys and deduplication<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Problem<\/strong>: Retries create duplicate operations (payments, order creation).<\/li>\n<li><strong>Why this fits<\/strong>: Store idempotency keys with TTL.<\/li>\n<li><strong>Example<\/strong>: On request, <code>SET key value NX EX 3600<\/code> to guarantee single processing.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">10) Real-time counters and analytics (approximate)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Problem<\/strong>: Need fast counters for page views, likes, or events.<\/li>\n<li><strong>Why this fits<\/strong>: Atomic counters and hashes can aggregate quickly.<\/li>\n<li><strong>Example<\/strong>: Increment counters in Redis; periodically flush aggregates to BigQuery.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">11) Caching authentication\/authorization lookups<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Problem<\/strong>: Token introspection or policy checks are expensive.<\/li>\n<li><strong>Why this fits<\/strong>: Cache results for short TTLs.<\/li>\n<li><strong>Example<\/strong>: Cache <code>authz:{user}:{resource}<\/code> decisions for 10\u201360 seconds.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">12) Presence and ephemeral state<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Problem<\/strong>: Track \u201conline users\u201d in chat\/collaboration tools.<\/li>\n<li><strong>Why this fits<\/strong>: Sets with TTL-like patterns (heartbeats) can model presence.<\/li>\n<li><strong>Example<\/strong>: Add user to set <code>online:{room}<\/code> and update heartbeat timestamps.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">6. Core Features<\/h2>\n\n\n\n<blockquote>\n<p>Note: Feature availability can vary by <strong>region<\/strong>, <strong>tier<\/strong>, and <strong>Redis version<\/strong>. Always verify the latest capabilities in official docs: https:\/\/cloud.google.com\/memorystore\/docs\/redis<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">Managed Redis instances<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>What it does<\/strong>: Provisions Redis without you managing VMs, disks, or OS packages.<\/li>\n<li><strong>Why it matters<\/strong>: Eliminates operational tasks like patching the OS and replacing failed nodes.<\/li>\n<li><strong>Practical benefit<\/strong>: Faster time-to-value and fewer production runbooks.<\/li>\n<li><strong>Caveats<\/strong>: You typically cannot install custom modules or change many server-level settings.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Tiered availability options (single node vs. replication\/failover)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>What it does<\/strong>: Offers tiers designed for dev\/test (lower cost) and production (higher availability).<\/li>\n<li><strong>Why it matters<\/strong>: Production Redis often needs replication and automatic failover.<\/li>\n<li><strong>Practical benefit<\/strong>: Better uptime with minimal operator intervention.<\/li>\n<li><strong>Caveats<\/strong>: HA tiers cost more (often because they include multiple nodes). Exact behavior (zones used, failover mechanics) should be verified in official docs for your chosen tier.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Private networking (VPC access)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>What it does<\/strong>: Redis endpoints are reachable via private IP from your VPC.<\/li>\n<li><strong>Why it matters<\/strong>: Reduces exposure and avoids public internet paths.<\/li>\n<li><strong>Practical benefit<\/strong>: Works well for internal microservices and backends.<\/li>\n<li><strong>Caveats<\/strong>: Requires correct VPC setup (and sometimes Private Service Access configuration). Cross-project and serverless connectivity requires additional design.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Cloud Monitoring metrics<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>What it does<\/strong>: Exposes operational metrics (memory usage, connections, command rates, evictions, etc.).<\/li>\n<li><strong>Why it matters<\/strong>: Caches fail silently if not monitored (e.g., evictions causing DB overload).<\/li>\n<li><strong>Practical benefit<\/strong>: Alerting on memory pressure and connection saturation.<\/li>\n<li><strong>Caveats<\/strong>: Metrics are necessary but not sufficient\u2014applications should also implement cache-hit ratio tracking.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Scaling (resize instance)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>What it does<\/strong>: Lets you change instance capacity.<\/li>\n<li><strong>Why it matters<\/strong>: Memory needs grow with traffic and dataset size.<\/li>\n<li><strong>Practical benefit<\/strong>: Avoid re-architecting for modest growth.<\/li>\n<li><strong>Caveats<\/strong>: Resizing may take time and can cause client reconnects and\/or downtime depending on tier and method. Verify resize behavior in current docs.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Maintenance and patching (managed)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>What it does<\/strong>: Google manages underlying infrastructure maintenance and Redis patching workflows.<\/li>\n<li><strong>Why it matters<\/strong>: Security patches and stability updates are required for production.<\/li>\n<li><strong>Practical benefit<\/strong>: Reduced toil; consistent patching process.<\/li>\n<li><strong>Caveats<\/strong>: Maintenance can still cause brief disruptions; plan client retry logic and maintenance windows if supported.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Backup \/ import \/ export (RDB snapshots to Cloud Storage)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>What it does<\/strong>: Supports exporting Redis data to Cloud Storage and importing from Cloud Storage (commonly via RDB files).<\/li>\n<li><strong>Why it matters<\/strong>: Useful for migrations and disaster recovery workflows.<\/li>\n<li><strong>Practical benefit<\/strong>: Move datasets between instances\/environments.<\/li>\n<li><strong>Caveats<\/strong>: Export\/import time depends on dataset size; Cloud Storage costs apply; operational restrictions may apply. Verify supported Redis versions and tiers for export\/import.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Compatibility with Redis clients and commands (with managed restrictions)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>What it does<\/strong>: Supports standard Redis protocol and most commands.<\/li>\n<li><strong>Why it matters<\/strong>: Enables drop-in usage with popular Redis libraries.<\/li>\n<li><strong>Practical benefit<\/strong>: Faster development and portability.<\/li>\n<li><strong>Caveats<\/strong>: Some administrative\/dangerous commands are commonly disabled in managed Redis services (for example <code>CONFIG<\/code>, <code>SHUTDOWN<\/code>, low-level replication control). Verify the \u201cunsupported commands\u201d list in official docs.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Integration with Google Cloud IAM (management plane)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>What it does<\/strong>: Uses IAM roles to control who can administer instances.<\/li>\n<li><strong>Why it matters<\/strong>: Prevents unauthorized creation\/deletion or resizing.<\/li>\n<li><strong>Practical benefit<\/strong>: Least privilege and auditable access.<\/li>\n<li><strong>Caveats<\/strong>: IAM typically does not govern Redis data-plane commands (GET\/SET). Data-plane access is controlled mainly by network reachability and Redis auth\/encryption features (if enabled and supported).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Security features (auth\/encryption options may vary)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>What it does<\/strong>: Some configurations support Redis AUTH and\/or in-transit encryption.<\/li>\n<li><strong>Why it matters<\/strong>: Helps protect data if network boundaries are compromised.<\/li>\n<li><strong>Practical benefit<\/strong>: Defense-in-depth.<\/li>\n<li><strong>Caveats<\/strong>: Availability depends on tier, connectivity mode, and Redis version. <strong>Verify in official docs<\/strong> for your deployment.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">7. Architecture and How It Works<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">High-level service architecture<\/h3>\n\n\n\n<p>At a high level:\n1. You create a Redis instance in a Google Cloud <strong>region<\/strong>.\n2. Google provisions one or more Redis nodes (depending on tier) in that region.\n3. The instance is connected to your <strong>VPC<\/strong> so your workloads can reach the Redis endpoint on a private IP.\n4. Your applications connect using a Redis client over TCP, issue commands, and receive responses.\n5. Operational metrics are published to <strong>Cloud Monitoring<\/strong>; admin operations are controlled through <strong>IAM<\/strong> and logged via <strong>Cloud Audit Logs<\/strong> (where enabled).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Request \/ data \/ control flow<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Control plane<\/strong> (create\/resize\/delete):<\/li>\n<li>You (or automation) calls the Memorystore API via Console\/CLI\/Terraform.<\/li>\n<li>IAM permissions are evaluated.<\/li>\n<li>Google Cloud provisions\/updates the instance.<\/li>\n<li><strong>Data plane<\/strong> (Redis traffic):<\/li>\n<li>App connects to Redis endpoint (private IP) over VPC networking.<\/li>\n<li>Redis serves reads\/writes from memory; persistence behaviors depend on configuration\/tier.<\/li>\n<li>In HA tiers, writes go to the primary and replicate to secondary.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Integrations with related services<\/h3>\n\n\n\n<p>Common patterns in Google Cloud:\n&#8211; <strong>Cloud Run<\/strong> \u2192 Serverless VPC Access \u2192 VPC \u2192 Memorystore for Redis\n&#8211; <strong>GKE<\/strong> (VPC-native) \u2192 VPC \u2192 Memorystore for Redis\n&#8211; <strong>Compute Engine<\/strong> \u2192 VPC \u2192 Memorystore for Redis\n&#8211; <strong>Cloud SQL \/ AlloyDB<\/strong> used as the system of record; Redis used as cache in front\n&#8211; <strong>Cloud Monitoring<\/strong> for alerts (evictions, memory, connections)\n&#8211; <strong>Cloud Logging<\/strong> and <strong>Cloud Audit Logs<\/strong> for operational visibility<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Dependency services<\/h3>\n\n\n\n<p>Depending on connectivity mode, you may need:\n&#8211; <strong>Service Networking API<\/strong> and <strong>Private Service Access<\/strong> configuration (common for privately consumed managed services)\n&#8211; A <strong>VPC network<\/strong> and subnets\n&#8211; <strong>Firewall rules<\/strong> that allow your clients to reach the Redis endpoint (usually egress is allowed by default; organizations may restrict it)<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Security \/ authentication model<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Management plane<\/strong>: IAM roles (for example, Redis Admin) control instance lifecycle operations.<\/li>\n<li><strong>Data plane<\/strong>: Typically controlled by <strong>private networking<\/strong> (who can route to the private IP). Optional Redis AUTH\/TLS features may exist\u2014<strong>verify<\/strong> for your configuration.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Networking model (typical)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Instance is reachable <strong>only from VPCs that are connected\/authorized<\/strong>.<\/li>\n<li>Best practice is to keep clients in the <strong>same region<\/strong> and ideally the <strong>same zone<\/strong> (when possible) to reduce latency and avoid inter-zone egress charges.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Monitoring \/ logging \/ governance considerations<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Establish alerts for:<\/li>\n<li>Memory usage approaching capacity<\/li>\n<li>Evictions increasing<\/li>\n<li>Connection count approaching limits<\/li>\n<li>CPU spikes (if exposed)<\/li>\n<li>Track application-level cache metrics:<\/li>\n<li>Cache hit ratio<\/li>\n<li>Latency of Redis operations<\/li>\n<li>Error rate and reconnect count<\/li>\n<li>Governance:<\/li>\n<li>Standardize naming and labels<\/li>\n<li>Use least-privilege IAM<\/li>\n<li>Use separate instances\/projects for dev\/test\/prod<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Simple architecture diagram<\/h3>\n\n\n\n<pre><code class=\"language-mermaid\">flowchart LR\n  A[App on Compute Engine \/ GKE \/ Cloud Run] --&gt;|Redis protocol (TCP)| R[(Memorystore for Redis)]\n  A --&gt;|Reads on miss| D[(Primary Database)]\n  R --&gt;|Cache hits| A\n  R --&gt; M[Cloud Monitoring]\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Production-style architecture diagram<\/h3>\n\n\n\n<pre><code class=\"language-mermaid\">flowchart TB\n  U[Users] --&gt; LB[Cloud Load Balancing]\n  LB --&gt; APP[Services on GKE or Cloud Run]\n\n  subgraph VPC[Google Cloud VPC]\n    APP --&gt;|Private IP| REDIS[(Memorystore for Redis)]\n    APP --&gt; SQL[(Cloud SQL \/ AlloyDB)]\n    APP --&gt; PUB[Pub\/Sub]\n  end\n\n  REDIS --&gt; MON[Cloud Monitoring Alerts]\n  APP --&gt; LOG[Cloud Logging]\n  APP --&gt; SEC[Secret Manager]\n\n  MON --&gt; ONCALL[On-call \/ Incident Mgmt]\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">8. Prerequisites<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Account \/ project requirements<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A <strong>Google Cloud project<\/strong> with <strong>billing enabled<\/strong>.<\/li>\n<li>Ability to enable required APIs in that project.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Permissions \/ IAM roles<\/h3>\n\n\n\n<p>You need permissions for:\n&#8211; Creating and managing Redis instances:\n  &#8211; Common roles include <strong>Memorystore Redis Admin<\/strong> (<code>roles\/redis.admin<\/code>) or equivalent.\n&#8211; Configuring networking (if using Private Service Access):\n  &#8211; Compute Network Admin (<code>roles\/compute.networkAdmin<\/code>) and\/or Service Networking permissions.\n&#8211; Creating a test client VM (for the lab):\n  &#8211; Compute Admin (<code>roles\/compute.admin<\/code>) or more limited instance admin permissions.<\/p>\n\n\n\n<blockquote>\n<p>IAM roles vary by organization policy. If you are in a restricted enterprise environment, request the minimal roles required for this lab.<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">Billing requirements<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Billing must be enabled; Memorystore for Redis is not a free service.<\/li>\n<li>Cloud Storage may incur costs if you use export\/import.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">CLI \/ SDK \/ tools<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Cloud Shell<\/strong> (recommended) or local installation of:<\/li>\n<li><code>gcloud<\/code> CLI: https:\/\/cloud.google.com\/sdk\/docs\/install<\/li>\n<li>Optional: Redis client tools (we\u2019ll install <code>redis-cli<\/code> on a VM during the lab).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Region availability<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Memorystore for Redis is available in many Google Cloud regions, but not necessarily all.<\/li>\n<li>Choose a region close to your compute workloads.<\/li>\n<li><strong>Verify availability<\/strong> in the Console for your chosen region.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Quotas \/ limits<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Quotas can apply to:<\/li>\n<li>Number of instances per region\/project<\/li>\n<li>Total provisioned memory<\/li>\n<li>Networking resources (peering ranges, addresses)<\/li>\n<li>Check <strong>Quotas<\/strong> in Google Cloud Console:<\/li>\n<li>IAM &amp; Admin \u2192 Quotas<\/li>\n<li>Or the service\u2019s quota page for Memorystore<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Prerequisite services\/APIs<\/h3>\n\n\n\n<p>Enable these APIs in your project:\n&#8211; Memorystore for Redis API: <code>redis.googleapis.com<\/code>\n&#8211; Service Networking API (commonly required for private managed services): <code>servicenetworking.googleapis.com<\/code>\n&#8211; Compute Engine API (for the client VM): <code>compute.googleapis.com<\/code><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">9. Pricing \/ Cost<\/h2>\n\n\n\n<p>Memorystore for Redis pricing is <strong>usage-based<\/strong> and varies by <strong>region<\/strong>, <strong>tier<\/strong>, and <strong>provisioned capacity<\/strong>.<\/p>\n\n\n\n<p>Official pricing page:\n&#8211; https:\/\/cloud.google.com\/memorystore\/pricing<\/p>\n\n\n\n<p>Google Cloud Pricing Calculator:\n&#8211; https:\/\/cloud.google.com\/products\/calculator<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Pricing dimensions (how you\u2019re billed)<\/h3>\n\n\n\n<p>Common dimensions include:\n&#8211; <strong>Provisioned capacity (memory)<\/strong>: billed per GB (or GiB) of instance size per time unit.\n&#8211; <strong>Tier \/ availability configuration<\/strong>: HA tiers generally cost more because they run more than one node and\/or include failover capabilities.\n&#8211; <strong>Instance uptime<\/strong>: billed while the instance exists (even if idle), because capacity is reserved.\n&#8211; <strong>Network egress<\/strong>:\n  &#8211; Traffic within Google Cloud can still incur charges in some cases (for example, inter-zone egress).\n  &#8211; Cross-region traffic is typically more expensive and adds latency.\n&#8211; <strong>Backups\/export storage<\/strong>:\n  &#8211; If you export RDB snapshots to Cloud Storage, you pay <strong>Cloud Storage<\/strong> storage and operations costs.<\/p>\n\n\n\n<blockquote>\n<p>Do not assume \u201cinternal traffic is free.\u201d In Google Cloud, some intra-region network paths (especially between zones) can be billed. Validate with current VPC network pricing for your traffic pattern: https:\/\/cloud.google.com\/vpc\/network-pricing<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">Free tier<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Memorystore for Redis generally does <strong>not<\/strong> have a perpetual free tier like some serverless products.<\/li>\n<li>If any promotional credits or trial periods apply to your account, that\u2019s account-specific.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Main cost drivers<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Tier choice<\/strong> (dev\/test vs. HA production)<\/li>\n<li><strong>Memory size<\/strong> (GB)<\/li>\n<li><strong>Number of instances<\/strong> (per environment, per region)<\/li>\n<li><strong>Client placement<\/strong> (same zone vs. different zone\/region)<\/li>\n<li><strong>Cache efficiency<\/strong>: poor TTL strategy and low hit rates increase load on primary databases (indirect cost).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Hidden or indirect costs<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Database load on cache miss<\/strong>: a low hit rate can increase Cloud SQL\/AlloyDB\/Spanner costs significantly.<\/li>\n<li><strong>Overprovisioning<\/strong>: paying for memory you don\u2019t use because you didn\u2019t tune TTLs and keys.<\/li>\n<li><strong>Cross-zone traffic<\/strong>: clients in a different zone than Redis may incur additional network costs and latency.<\/li>\n<li><strong>Operational risk<\/strong>: using a non-HA tier in production can cause expensive incidents.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Cost optimization strategies<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Start with the smallest instance that meets your latency and working-set needs; scale based on metrics.<\/li>\n<li>Keep clients in the <strong>same region<\/strong>, ideally the <strong>same zone<\/strong> (when feasible).<\/li>\n<li>Use TTLs for cache data and avoid unbounded key growth.<\/li>\n<li>Monitor evictions; if evictions rise, either increase memory or reduce working set\/TTL.<\/li>\n<li>Separate dev\/test\/prod to avoid accidental load and to right-size non-prod.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Example low-cost starter estimate (conceptual)<\/h3>\n\n\n\n<p>A low-cost dev\/test setup is typically:\n&#8211; <strong>One small single-node instance<\/strong> in one region\n&#8211; <strong>One small VM<\/strong> for testing connectivity<\/p>\n\n\n\n<p>Your monthly cost is roughly:<\/p>\n\n\n\n<pre><code>Monthly Redis cost \u2248 (GB provisioned) \u00d7 (price per GB-hour in region\/tier) \u00d7 (hours in month)\n<\/code><\/pre>\n\n\n\n<p>Because prices vary by region and tier, use:\n&#8211; Memorystore pricing page: https:\/\/cloud.google.com\/memorystore\/pricing\n&#8211; Calculator: https:\/\/cloud.google.com\/products\/calculator<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Example production cost considerations<\/h3>\n\n\n\n<p>For production, you usually budget for:\n&#8211; <strong>HA tier<\/strong> (multi-node) in one region\n&#8211; Sufficient memory to avoid evictions at peak\n&#8211; Potentially <strong>multiple instances<\/strong> (per app domain, per environment)\n&#8211; Monitoring and alerting (Cloud Monitoring itself is typically low cost, but custom metrics\/log volume may add costs)\n&#8211; Cross-zone design decisions (cost vs. resilience)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">10. Step-by-Step Hands-On Tutorial<\/h2>\n\n\n\n<p>This lab creates a small Memorystore for Redis instance and connects to it from a Compute Engine VM using <code>redis-cli<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Objective<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Provision a <strong>Memorystore for Redis<\/strong> instance in Google Cloud.<\/li>\n<li>Connect to it privately from a VM in the same VPC.<\/li>\n<li>Run basic Redis commands to confirm read\/write.<\/li>\n<li>Clean up all resources to avoid ongoing charges.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Lab Overview<\/h3>\n\n\n\n<p>You will:\n1. Select a project and region.\n2. Enable APIs.\n3. Configure private connectivity (Private Service Access is a common requirement; your org may already have it).\n4. Create a Redis instance.\n5. Create a small client VM.\n6. Connect with <code>redis-cli<\/code>, set\/get keys, and validate.\n7. Troubleshoot common issues.\n8. Clean up.<\/p>\n\n\n\n<blockquote>\n<p>If your organization uses Shared VPC, restricted networking, or org policies, you may need a network administrator to perform Step 3.<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1: Set project, region, and enable required APIs<\/h3>\n\n\n\n<p>1) Open <strong>Cloud Shell<\/strong> in the Google Cloud Console.<\/p>\n\n\n\n<p>2) Set environment variables:<\/p>\n\n\n\n<pre><code class=\"language-bash\">export PROJECT_ID=\"YOUR_PROJECT_ID\"\nexport REGION=\"us-central1\"\nexport ZONE=\"us-central1-a\"\ngcloud config set project \"${PROJECT_ID}\"\n<\/code><\/pre>\n\n\n\n<p>3) Enable APIs:<\/p>\n\n\n\n<pre><code class=\"language-bash\">gcloud services enable \\\n  redis.googleapis.com \\\n  servicenetworking.googleapis.com \\\n  compute.googleapis.com\n<\/code><\/pre>\n\n\n\n<p><strong>Expected outcome<\/strong>\n&#8211; APIs are enabled without errors.<\/p>\n\n\n\n<p><strong>Verify<\/strong><\/p>\n\n\n\n<pre><code class=\"language-bash\">gcloud services list --enabled --filter=\"name:(redis.googleapis.com servicenetworking.googleapis.com compute.googleapis.com)\"\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2: Confirm or create a VPC network to use<\/h3>\n\n\n\n<p>This lab uses the <strong>default<\/strong> VPC network. Many organizations delete the default network; if yours is missing, create a dedicated network\/subnet.<\/p>\n\n\n\n<p>Check if the default network exists:<\/p>\n\n\n\n<pre><code class=\"language-bash\">gcloud compute networks describe default &gt;\/dev\/null 2&gt;&amp;1 &amp;&amp; echo \"default network exists\" || echo \"default network missing\"\n<\/code><\/pre>\n\n\n\n<p>If missing, create a simple custom VPC and subnet (example):<\/p>\n\n\n\n<pre><code class=\"language-bash\">gcloud compute networks create redis-lab-net --subnet-mode=custom\ngcloud compute networks subnets create redis-lab-subnet \\\n  --network=redis-lab-net \\\n  --region=\"${REGION}\" \\\n  --range=10.20.0.0\/24\n<\/code><\/pre>\n\n\n\n<p>For the rest of the lab:\n&#8211; If you have <code>default<\/code>, use <code>default<\/code>.\n&#8211; If you created a custom network, use <code>redis-lab-net<\/code>.<\/p>\n\n\n\n<p>Set a variable:<\/p>\n\n\n\n<pre><code class=\"language-bash\">export VPC_NETWORK=\"default\"\n# or:\n# export VPC_NETWORK=\"redis-lab-net\"\n<\/code><\/pre>\n\n\n\n<p><strong>Expected outcome<\/strong>\n&#8211; A VPC network exists and you know its name.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 3: Configure Private Service Access (if required)<\/h3>\n\n\n\n<p>Many Google Cloud managed services that attach privately to your VPC require <strong>Private Service Access<\/strong> via the Service Networking API.<\/p>\n\n\n\n<p>Official concept doc:\n&#8211; https:\/\/cloud.google.com\/vpc\/docs\/private-services-access<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">3A) Allocate an IP range for service networking peering<\/h4>\n\n\n\n<p>Create a global internal range reserved for VPC peering:<\/p>\n\n\n\n<pre><code class=\"language-bash\">gcloud compute addresses create redis-psa-range \\\n  --global \\\n  --purpose=VPC_PEERING \\\n  --addresses=10.10.0.0 \\\n  --prefix-length=16 \\\n  --network=\"${VPC_NETWORK}\"\n<\/code><\/pre>\n\n\n\n<blockquote>\n<p>If <code>10.10.0.0\/16<\/code> overlaps with your network ranges, choose a non-overlapping RFC1918 range.<\/p>\n<\/blockquote>\n\n\n\n<h4 class=\"wp-block-heading\">3B) Create the Private Service Access connection<\/h4>\n\n\n\n<pre><code class=\"language-bash\">gcloud services vpc-peerings connect \\\n  --service=servicenetworking.googleapis.com \\\n  --network=\"${VPC_NETWORK}\" \\\n  --ranges=redis-psa-range\n<\/code><\/pre>\n\n\n\n<p><strong>Expected outcome<\/strong>\n&#8211; A private services connection is established for the VPC.<\/p>\n\n\n\n<p><strong>Verify<\/strong><\/p>\n\n\n\n<pre><code class=\"language-bash\">gcloud services vpc-peerings list --network=\"${VPC_NETWORK}\"\n<\/code><\/pre>\n\n\n\n<blockquote>\n<p>If your project already has a service networking connection, you may not need to create another. In some orgs you must <strong>update<\/strong> an existing connection to add a new range instead of creating a new one. Verify in official docs and with your network admin.<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">Step 4: Create a Memorystore for Redis instance<\/h3>\n\n\n\n<p>Create a small instance for learning. Tiers and minimum sizes can vary by region\u2014use the smallest size available in the Console if needed.<\/p>\n\n\n\n<p>Create the instance:<\/p>\n\n\n\n<pre><code class=\"language-bash\">export REDIS_INSTANCE=\"redis-lab-1\"\n\ngcloud redis instances create \"${REDIS_INSTANCE}\" \\\n  --region=\"${REGION}\" \\\n  --tier=basic \\\n  --size=1 \\\n  --network=\"${VPC_NETWORK}\"\n<\/code><\/pre>\n\n\n\n<p>Notes:\n&#8211; <code>--tier=basic<\/code> is commonly used for low-cost dev\/test. For production, use the HA tier recommended by Google Cloud (<strong>verify current tier names and behavior<\/strong> in docs).\n&#8211; <code>--size=1<\/code> means 1 GB. Minimum\/allowed sizes may differ by region.<\/p>\n\n\n\n<p><strong>Expected outcome<\/strong>\n&#8211; The Redis instance is created and becomes <strong>READY<\/strong> after a few minutes.<\/p>\n\n\n\n<p><strong>Verify<\/strong><\/p>\n\n\n\n<pre><code class=\"language-bash\">gcloud redis instances describe \"${REDIS_INSTANCE}\" --region=\"${REGION}\"\n<\/code><\/pre>\n\n\n\n<p>Look for fields like:\n&#8211; <code>state: READY<\/code>\n&#8211; <code>host:<\/code> (private IP)\n&#8211; <code>port:<\/code> (typically 6379)<\/p>\n\n\n\n<p>Save the host and port:<\/p>\n\n\n\n<pre><code class=\"language-bash\">export REDIS_HOST=\"$(gcloud redis instances describe \"${REDIS_INSTANCE}\" --region=\"${REGION}\" --format='value(host)')\"\nexport REDIS_PORT=\"$(gcloud redis instances describe \"${REDIS_INSTANCE}\" --region=\"${REGION}\" --format='value(port)')\"\necho \"Redis endpoint: ${REDIS_HOST}:${REDIS_PORT}\"\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Step 5: Create a small Compute Engine VM as a Redis client<\/h3>\n\n\n\n<p>Create a small VM in the same region\/VPC:<\/p>\n\n\n\n<pre><code class=\"language-bash\">export CLIENT_VM=\"redis-client-vm\"\n\ngcloud compute instances create \"${CLIENT_VM}\" \\\n  --zone=\"${ZONE}\" \\\n  --machine-type=\"e2-micro\" \\\n  --network=\"${VPC_NETWORK}\"\n<\/code><\/pre>\n\n\n\n<p><strong>Expected outcome<\/strong>\n&#8211; VM is created and running.<\/p>\n\n\n\n<p><strong>Verify<\/strong><\/p>\n\n\n\n<pre><code class=\"language-bash\">gcloud compute instances describe \"${CLIENT_VM}\" --zone=\"${ZONE}\" --format=\"value(status,networkInterfaces[0].networkIP)\"\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Step 6: Install redis-cli and connect to Memorystore for Redis<\/h3>\n\n\n\n<p>SSH into the VM:<\/p>\n\n\n\n<pre><code class=\"language-bash\">gcloud compute ssh \"${CLIENT_VM}\" --zone=\"${ZONE}\"\n<\/code><\/pre>\n\n\n\n<p>Inside the VM, install Redis client tools.<\/p>\n\n\n\n<p>On Debian\/Ubuntu:<\/p>\n\n\n\n<pre><code class=\"language-bash\">sudo apt-get update\nsudo apt-get install -y redis-tools\nredis-cli --version\n<\/code><\/pre>\n\n\n\n<p>Now connect:<\/p>\n\n\n\n<pre><code class=\"language-bash\">redis-cli -h \"${REDIS_HOST}\" -p \"${REDIS_PORT}\" PING\n<\/code><\/pre>\n\n\n\n<p><strong>Expected outcome<\/strong>\n&#8211; You see: <code>PONG<\/code><\/p>\n\n\n\n<p>Run a small read\/write test:<\/p>\n\n\n\n<pre><code class=\"language-bash\">redis-cli -h \"${REDIS_HOST}\" -p \"${REDIS_PORT}\" SET tutorial:key \"hello-google-cloud\"\nredis-cli -h \"${REDIS_HOST}\" -p \"${REDIS_PORT}\" GET tutorial:key\nredis-cli -h \"${REDIS_HOST}\" -p \"${REDIS_PORT}\" EXPIRE tutorial:key 60\nredis-cli -h \"${REDIS_HOST}\" -p \"${REDIS_PORT}\" TTL tutorial:key\n<\/code><\/pre>\n\n\n\n<p><strong>Expected outcome<\/strong>\n&#8211; <code>SET<\/code> returns <code>OK<\/code>\n&#8211; <code>GET<\/code> returns <code>hello-google-cloud<\/code>\n&#8211; <code>TTL<\/code> returns a value near 60<\/p>\n\n\n\n<p>Exit SSH:<\/p>\n\n\n\n<pre><code class=\"language-bash\">exit\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Step 7: Observe basic metrics in Cloud Monitoring<\/h3>\n\n\n\n<p>In the Google Cloud Console:\n1. Go to <strong>Monitoring<\/strong> \u2192 <strong>Metrics Explorer<\/strong>\n2. Select resource type related to Redis (often \u201cRedis Instance\u201d).\n3. Explore metrics such as memory usage, connected clients, command rates, evictions.<\/p>\n\n\n\n<p><strong>Expected outcome<\/strong>\n&#8211; You can see time series metrics for your instance after a short delay.<\/p>\n\n\n\n<blockquote>\n<p>Metric names and groupings can evolve. Verify current metric names in official docs if needed.<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">Validation<\/h3>\n\n\n\n<p>Use this checklist:<\/p>\n\n\n\n<p>1) Instance is ready:<\/p>\n\n\n\n<pre><code class=\"language-bash\">gcloud redis instances describe \"${REDIS_INSTANCE}\" --region=\"${REGION}\" --format=\"value(state)\"\n<\/code><\/pre>\n\n\n\n<p>Expected: <code>READY<\/code><\/p>\n\n\n\n<p>2) Endpoint exists:<\/p>\n\n\n\n<pre><code class=\"language-bash\">echo \"${REDIS_HOST}:${REDIS_PORT}\"\n<\/code><\/pre>\n\n\n\n<p>Expected: private IP + port<\/p>\n\n\n\n<p>3) Client can connect and get PONG:<\/p>\n\n\n\n<pre><code class=\"language-bash\">gcloud compute ssh \"${CLIENT_VM}\" --zone=\"${ZONE}\" --command=\"redis-cli -h ${REDIS_HOST} -p ${REDIS_PORT} PING\"\n<\/code><\/pre>\n\n\n\n<p>Expected: <code>PONG<\/code><\/p>\n\n\n\n<p>4) Data read\/write works:<\/p>\n\n\n\n<pre><code class=\"language-bash\">gcloud compute ssh \"${CLIENT_VM}\" --zone=\"${ZONE}\" --command=\"redis-cli -h ${REDIS_HOST} -p ${REDIS_PORT} SET validation:key ok &amp;&amp; redis-cli -h ${REDIS_HOST} -p ${REDIS_PORT} GET validation:key\"\n<\/code><\/pre>\n\n\n\n<p>Expected: <code>OK<\/code> then <code>ok<\/code><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Troubleshooting<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Issue: <code>PERMISSION_DENIED<\/code> when creating instance or VPC peering<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Cause<\/strong>: Missing IAM roles for Redis admin or network admin tasks.<\/li>\n<li><strong>Fix<\/strong>: Request appropriate roles such as <code>roles\/redis.admin<\/code>, <code>roles\/compute.networkAdmin<\/code>, and permissions for Service Networking.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Issue: Redis instance creation fails due to networking \/ peering<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Cause<\/strong>: Private Service Access not configured, or IP range overlaps.<\/li>\n<li><strong>Fix<\/strong>:<\/li>\n<li>Ensure Service Networking connection exists:\n    <code>bash\n    gcloud services vpc-peerings list --network=\"${VPC_NETWORK}\"<\/code><\/li>\n<li>Ensure the reserved range does not overlap your subnets.<\/li>\n<li>In some environments, you must <strong>update<\/strong> an existing peering instead of creating another. Verify in official docs and with your network team.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Issue: <code>redis-cli<\/code> times out (<code>Connection timed out<\/code>)<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Common causes<\/strong>:<\/li>\n<li>VM is in a different VPC than the Redis instance<\/li>\n<li>Organization firewall policies restrict egress<\/li>\n<li>Peering not established correctly<\/li>\n<li><strong>Fix<\/strong>:<\/li>\n<li>Confirm VM network:\n    <code>bash\n    gcloud compute instances describe \"${CLIENT_VM}\" --zone=\"${ZONE}\" --format=\"value(networkInterfaces[0].network)\"<\/code><\/li>\n<li>Confirm instance network:\n    <code>bash\n    gcloud redis instances describe \"${REDIS_INSTANCE}\" --region=\"${REGION}\" --format=\"value(authorizedNetwork)\"<\/code><\/li>\n<li>Ensure the VPC peering exists and routes are present.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Issue: You enabled Redis AUTH\/TLS and cannot connect<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Cause<\/strong>: Client not configured for auth\/TLS.<\/li>\n<li><strong>Fix<\/strong>: Configure your Redis client accordingly. Feature availability varies\u2014<strong>verify in official docs<\/strong> for your instance configuration.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Cleanup<\/h3>\n\n\n\n<p>To avoid ongoing charges, delete everything created.<\/p>\n\n\n\n<p>Delete the Redis instance:<\/p>\n\n\n\n<pre><code class=\"language-bash\">gcloud redis instances delete \"${REDIS_INSTANCE}\" --region=\"${REGION}\" --quiet\n<\/code><\/pre>\n\n\n\n<p>Delete the client VM:<\/p>\n\n\n\n<pre><code class=\"language-bash\">gcloud compute instances delete \"${CLIENT_VM}\" --zone=\"${ZONE}\" --quiet\n<\/code><\/pre>\n\n\n\n<p>If you created Private Service Access range\/peering specifically for this lab and it is not used elsewhere, remove it carefully (only if safe in your environment):<\/p>\n\n\n\n<p>1) Disconnect peering:<\/p>\n\n\n\n<pre><code class=\"language-bash\">gcloud services vpc-peerings delete \\\n  --service=servicenetworking.googleapis.com \\\n  --network=\"${VPC_NETWORK}\" \\\n  --quiet\n<\/code><\/pre>\n\n\n\n<p>2) Delete the reserved range:<\/p>\n\n\n\n<pre><code class=\"language-bash\">gcloud compute addresses delete redis-psa-range --global --quiet\n<\/code><\/pre>\n\n\n\n<p>If you created a custom VPC for the lab, delete it:<\/p>\n\n\n\n<pre><code class=\"language-bash\">gcloud compute networks subnets delete redis-lab-subnet --region=\"${REGION}\" --quiet\ngcloud compute networks delete redis-lab-net --quiet\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">11. Best Practices<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Architecture best practices<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Use Redis for what it\u2019s good at<\/strong>: caching, ephemeral state, real-time counters\u2014not as the system of record.<\/li>\n<li><strong>Co-locate clients and Redis<\/strong>:<\/li>\n<li>Same <strong>region<\/strong> is usually mandatory for good latency.<\/li>\n<li>Prefer the same <strong>zone<\/strong> when feasible to reduce latency and potential inter-zone egress costs.<\/li>\n<li><strong>Design for cache misses<\/strong>:<\/li>\n<li>Ensure the backing database can survive a \u201ccold cache\u201d scenario.<\/li>\n<li>Implement request coalescing (avoid thundering herd) for hot keys.<\/li>\n<li><strong>Plan for HA appropriately<\/strong>:<\/li>\n<li>Use the production\/HA tier for production services.<\/li>\n<li>Test failover behavior in staging.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">IAM \/ security best practices<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Apply least privilege:<\/li>\n<li>Separate roles for admins vs. viewers.<\/li>\n<li>Prefer automation accounts with limited scope (CI\/CD service accounts).<\/li>\n<li>Use separate projects\/environments for dev\/test\/prod to reduce blast radius.<\/li>\n<li>Control network reachability:<\/li>\n<li>Only allow workloads in required subnets\/VPCs to connect.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Cost best practices<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Right-size memory:<\/li>\n<li>Avoid paying for unused RAM.<\/li>\n<li>Monitor memory usage and eviction rate to guide sizing.<\/li>\n<li>Tune TTLs:<\/li>\n<li>Short TTLs can increase DB load; long TTLs can increase memory usage and staleness.<\/li>\n<li>Avoid cross-zone\/cross-region access where possible.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Performance best practices<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use efficient key\/value patterns:<\/li>\n<li>Small values are faster; avoid very large payloads.<\/li>\n<li>Use hashes for structured data instead of many separate keys (depending on your access pattern).<\/li>\n<li>Use pipelining\/batching in clients to reduce round trips.<\/li>\n<li>Keep connection counts under control (connection pooling).<\/li>\n<li>Track and optimize cache hit ratio.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Reliability best practices<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ensure clients implement:<\/li>\n<li>Connection retry with exponential backoff<\/li>\n<li>Circuit breakers (fail open or fail closed depending on your service)<\/li>\n<li>Timeouts on Redis calls<\/li>\n<li>Avoid single points of failure:<\/li>\n<li>Use HA tier in production.<\/li>\n<li>Consider multi-region strategy at the application layer if required (separate instances per region).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Operations best practices<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Monitoring and alerting:<\/li>\n<li>Memory usage thresholds (e.g., warn at 70\u201380%, critical near 90%\u2014choose based on your patterns)<\/li>\n<li>Evictions &gt; 0 sustained<\/li>\n<li>Connection saturation<\/li>\n<li>Error rates \/ timeouts from client-side metrics<\/li>\n<li>Change management:<\/li>\n<li>Plan resizing and maintenance windows<\/li>\n<li>Load test before major changes<\/li>\n<li>Backups\/migrations:<\/li>\n<li>Use export\/import if supported for your tier\/version; store snapshots in controlled Cloud Storage buckets.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Governance \/ tagging \/ naming best practices<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use consistent naming: <code>redis-{app}-{env}-{region}<\/code>.<\/li>\n<li>Apply labels for:<\/li>\n<li><code>env=prod|staging|dev<\/code><\/li>\n<li><code>app=...<\/code><\/li>\n<li><code>owner=team<\/code><\/li>\n<li><code>cost-center=...<\/code><\/li>\n<li>Document SLOs, expected usage, and caching strategy per instance.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">12. Security Considerations<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Identity and access model<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>IAM controls administrative actions<\/strong>:<\/li>\n<li>Who can create\/modify\/delete\/describe instances.<\/li>\n<li><strong>Data-plane access is primarily network-based<\/strong>:<\/li>\n<li>Anyone who can route to the Redis private IP may be able to issue Redis commands unless additional auth is enabled.<\/li>\n<li>Recommended: restrict who can reach the endpoint at the network level, and enable Redis auth\/encryption where supported and appropriate.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Encryption<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>At rest<\/strong>: Managed services typically encrypt underlying storage\/media. Verify current guarantees in official docs for Memorystore for Redis.<\/li>\n<li><strong>In transit<\/strong>: Some configurations may support TLS\/in-transit encryption; availability depends on tier\/version\/connectivity. <strong>Verify in official docs<\/strong>.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Network exposure<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Memorystore for Redis is typically private and not exposed to the public internet.<\/li>\n<li>Risks still exist:<\/li>\n<li>Overly broad VPC access<\/li>\n<li>Hybrid connectivity that expands the trust boundary (VPN\/Interconnect)<\/li>\n<li>Recommended controls:<\/li>\n<li>Use dedicated subnets for app tiers<\/li>\n<li>Apply organization firewall policies to limit lateral movement<\/li>\n<li>Avoid sharing the Redis-connected VPC with untrusted workloads<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Secrets handling<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If using Redis AUTH (password), store credentials in <strong>Secret Manager<\/strong> and inject them at runtime.<\/li>\n<li>Avoid embedding passwords in images, code, or Terraform state.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Audit \/ logging<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use <strong>Cloud Audit Logs<\/strong> to track administrative operations (create\/delete\/resize).<\/li>\n<li>Redis command-level auditing is not typically provided by managed Redis services; assume limited data-plane visibility unless explicitly documented.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Compliance considerations<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>For regulated workloads:<\/li>\n<li>Confirm region residency requirements<\/li>\n<li>Review encryption and access controls<\/li>\n<li>Validate audit log retention and access<\/li>\n<li>Use organization policies and VPC Service Controls where applicable (VPC-SC applicability should be verified for Memorystore for Redis)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Common security mistakes<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Using a dev\/test single-node tier in production.<\/li>\n<li>Allowing broad network access to Redis from many subnets\/projects.<\/li>\n<li>Treating Redis like a durable database and storing sensitive data without proper controls.<\/li>\n<li>Not rotating secrets (if auth is used).<\/li>\n<li>No alerting on unusual connection spikes (could indicate scanning or misuse).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Secure deployment recommendations<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Production: HA tier + least privilege IAM + restricted VPC reachability + monitoring\/alerting.<\/li>\n<li>Use separate instances per environment and per major application boundary.<\/li>\n<li>Document your caching strategy and data classification (what can and cannot be stored in Redis).<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">13. Limitations and Gotchas<\/h2>\n\n\n\n<blockquote>\n<p>Always check the official \u201cQuotas\u201d and \u201cKnown limitations\u201d pages for Memorystore for Redis, as these can change.<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">Common limitations<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Regional service<\/strong>: Typically not a global multi-region cache with automatic replication across regions.<\/li>\n<li><strong>Vertical scaling model<\/strong>: Memorystore for Redis is commonly a single-instance model; if you need sharding\/cluster mode, consider <strong>Memorystore for Redis Cluster<\/strong>.<\/li>\n<li><strong>Managed restrictions<\/strong>:<\/li>\n<li>Some Redis commands are disabled (often administrative\/dangerous commands).<\/li>\n<li>Limited ability to tune low-level Redis configuration.<\/li>\n<li><strong>No public endpoint<\/strong>: You must design VPC connectivity for all clients.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Quotas and limits<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Maximum instance size, number of instances, and connection limits vary by region\/tier.<\/li>\n<li>Organizations may impose additional policies that limit networking or service usage.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Regional constraints<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Not all regions support the same features\/tiers\/versions.<\/li>\n<li>Multi-zone HA depends on zonal availability within a region.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Pricing surprises<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>HA tiers can effectively multiply cost because more than one node may be provisioned.<\/li>\n<li>Inter-zone or cross-region traffic can add costs.<\/li>\n<li>Cloud Storage charges apply for exports\/backups.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Compatibility issues<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Redis version support changes over time. Verify supported versions and client compatibility.<\/li>\n<li>Some client libraries rely on commands that may be disabled in managed environments.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Operational gotchas<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Resizing can cause disruption or performance impact; test in staging.<\/li>\n<li>Failover events can change the primary; clients must reconnect and handle transient errors.<\/li>\n<li>If you let keys grow without TTL, memory pressure can cause evictions and cascade failures on your primary database.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Migration challenges<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Moving from self-managed Redis to Memorystore can require:<\/li>\n<li>Export\/import planning<\/li>\n<li>Network redesign (private connectivity)<\/li>\n<li>Command compatibility review<\/li>\n<li>Cutover strategy (dual writes, cache warming)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Vendor-specific nuances<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Connectivity mode (Private Service Access vs other modes) affects how you connect from serverless and from other networks. Verify the recommended mode for your architecture in current Google Cloud docs.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">14. Comparison with Alternatives<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Alternatives in Google Cloud<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Memorystore for Memcached<\/strong>: simpler cache, no persistence, different scaling model.<\/li>\n<li><strong>Memorystore for Redis Cluster<\/strong>: for larger scale with Redis cluster\/sharding behavior (separate product).<\/li>\n<li><strong>Cloud SQL \/ Firestore \/ Spanner<\/strong>: durable databases; Redis is usually complementary (cache) rather than a replacement.<\/li>\n<li><strong>Self-managed Redis on Compute Engine\/GKE<\/strong>: maximum control, maximum ops burden.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Alternatives in other clouds<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>AWS ElastiCache for Redis<\/strong><\/li>\n<li><strong>Azure Cache for Redis<\/strong><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Open-source\/self-managed alternatives<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Redis on VMs, Redis on Kubernetes, Redis Enterprise (commercial), KeyDB (Redis-compatible fork in some setups).<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Comparison table<\/h4>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Option<\/th>\n<th>Best For<\/th>\n<th>Strengths<\/th>\n<th>Weaknesses<\/th>\n<th>When to Choose<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Memorystore for Redis (Google Cloud)<\/td>\n<td>Managed Redis caching and ephemeral state<\/td>\n<td>Managed ops, private VPC integration, monitoring<\/td>\n<td>Limited server control; typically regional and single-instance model<\/td>\n<td>When you want Redis with low ops overhead on Google Cloud<\/td>\n<\/tr>\n<tr>\n<td>Memorystore for Redis Cluster (Google Cloud)<\/td>\n<td>Larger datasets and higher throughput with sharding<\/td>\n<td>Horizontal scaling, Redis cluster behavior<\/td>\n<td>Different operational model; may have different constraints\/pricing<\/td>\n<td>When a single Redis instance can\u2019t meet scale requirements<\/td>\n<\/tr>\n<tr>\n<td>Memorystore for Memcached (Google Cloud)<\/td>\n<td>Pure caching where persistence isn\u2019t needed<\/td>\n<td>Simple, often cost-effective<\/td>\n<td>Fewer data structures\/features than Redis<\/td>\n<td>When you only need a straightforward cache<\/td>\n<\/tr>\n<tr>\n<td>Self-managed Redis on GCE\/GKE<\/td>\n<td>Maximum customization<\/td>\n<td>Full control, custom modules\/config<\/td>\n<td>You own patching, HA, backups, monitoring<\/td>\n<td>When you need features not supported in managed service or strict control<\/td>\n<\/tr>\n<tr>\n<td>AWS ElastiCache for Redis<\/td>\n<td>Redis on AWS<\/td>\n<td>Mature managed Redis ecosystem<\/td>\n<td>Cross-cloud complexity<\/td>\n<td>When your workloads are on AWS<\/td>\n<\/tr>\n<tr>\n<td>Azure Cache for Redis<\/td>\n<td>Redis on Azure<\/td>\n<td>Tight Azure integration<\/td>\n<td>Cross-cloud complexity<\/td>\n<td>When your workloads are on Azure<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">15. Real-World Example<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Enterprise example: e-commerce platform accelerating Cloud SQL<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Problem<\/strong><\/li>\n<li>Product pages and inventory checks cause heavy read load on Cloud SQL during peak traffic.<\/li>\n<li>Latency spikes lead to cart abandonment.<\/li>\n<li><strong>Proposed architecture<\/strong><\/li>\n<li>GKE services serve APIs.<\/li>\n<li>Cloud SQL stores transactional data.<\/li>\n<li>Memorystore for Redis caches:<ul>\n<li>Product details (<code>product:{id}<\/code> TTL 5\u201315 min)<\/li>\n<li>Inventory snapshot (<code>inventory:{sku}<\/code> TTL 10\u201330 sec)<\/li>\n<li>User session (<code>session:{token}<\/code> TTL 30 min)<\/li>\n<\/ul>\n<\/li>\n<li>Cloud Monitoring alerts on evictions and memory usage.<\/li>\n<li><strong>Why Memorystore for Redis was chosen<\/strong><\/li>\n<li>Managed operations reduce toil for the platform team.<\/li>\n<li>HA tier improves resilience.<\/li>\n<li>Private VPC connectivity matches enterprise security posture.<\/li>\n<li><strong>Expected outcomes<\/strong><\/li>\n<li>Lower Cloud SQL CPU and read IOPS during peak.<\/li>\n<li>Improved P95\/P99 API latency.<\/li>\n<li>More predictable scaling behavior during sales events.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Startup\/small-team example: SaaS API with Cloud Run<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Problem<\/strong><\/li>\n<li>A small Cloud Run API repeatedly computes expensive results (aggregation over recent events).<\/li>\n<li>Need quick performance gains without a dedicated ops team.<\/li>\n<li><strong>Proposed architecture<\/strong><\/li>\n<li>Cloud Run service connects to Memorystore for Redis via Serverless VPC Access.<\/li>\n<li>Cache expensive responses per tenant for 30\u2013120 seconds.<\/li>\n<li>Keep a single small instance for dev and a separate HA instance for production.<\/li>\n<li><strong>Why Memorystore for Redis was chosen<\/strong><\/li>\n<li>Familiar Redis developer experience.<\/li>\n<li>Fast to deploy; minimal infra maintenance.<\/li>\n<li><strong>Expected outcomes<\/strong><\/li>\n<li>Better responsiveness under burst traffic.<\/li>\n<li>Reduced backend cost by offloading repeated computations.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">16. FAQ<\/h2>\n\n\n\n<p>1) <strong>Is Memorystore for Redis a database?<\/strong><br\/>\nIt\u2019s an in-memory data store service in the <strong>Databases<\/strong> category, but it\u2019s most commonly used as a <strong>cache<\/strong> or <strong>ephemeral state store<\/strong> rather than a durable system of record.<\/p>\n\n\n\n<p>2) <strong>Is Memorystore for Redis serverless?<\/strong><br\/>\nNo. You provision an instance size (capacity) and pay while it runs. It behaves like managed infrastructure rather than fully serverless scaling.<\/p>\n\n\n\n<p>3) <strong>Does Memorystore for Redis have a public IP?<\/strong><br\/>\nTypically no. It is accessed privately from a VPC network.<\/p>\n\n\n\n<p>4) <strong>How do I connect from Cloud Run?<\/strong><br\/>\nCommonly via <strong>Serverless VPC Access<\/strong> into a VPC that can reach the Redis instance. Connectivity mode and setup details must match your Memorystore configuration\u2014verify in official docs.<\/p>\n\n\n\n<p>5) <strong>What tier should I use for production?<\/strong><br\/>\nUse the high-availability tier recommended by Google Cloud (often the replicated\/failover tier). Single-node tiers are generally better for dev\/test.<\/p>\n\n\n\n<p>6) <strong>Can I use Redis as my primary database?<\/strong><br\/>\nUsually not recommended. Redis is often used as a cache or ephemeral store. Use Cloud SQL\/AlloyDB\/Spanner\/Firestore as the primary durable database and Redis to accelerate reads.<\/p>\n\n\n\n<p>7) <strong>How do I back up Memorystore for Redis?<\/strong><br\/>\nMemorystore commonly supports export\/import using Redis snapshot files stored in Cloud Storage. Verify current support for your Redis version and tier.<\/p>\n\n\n\n<p>8) <strong>Does it support Redis Cluster mode?<\/strong><br\/>\nMemorystore for Redis is typically a single-instance model. For cluster\/sharding, Google Cloud offers <strong>Memorystore for Redis Cluster<\/strong> (separate product). Confirm current offerings in your region.<\/p>\n\n\n\n<p>9) <strong>Can I change Redis configuration parameters?<\/strong><br\/>\nManaged services usually restrict many config changes for safety and stability. Verify which parameters and commands are supported.<\/p>\n\n\n\n<p>10) <strong>What happens during failover in an HA tier?<\/strong><br\/>\nThe service promotes a replica to primary. Clients must handle reconnects and transient errors. Test your client library behavior.<\/p>\n\n\n\n<p>11) <strong>How do I monitor cache health?<\/strong><br\/>\nUse Cloud Monitoring metrics (memory, evictions, connections) and also application-level metrics (hit ratio, latency, error rates).<\/p>\n\n\n\n<p>12) <strong>How do I reduce eviction events?<\/strong><br\/>\nIncrease memory, reduce key cardinality, tune TTLs, and ensure you aren\u2019t storing large values unnecessarily.<\/p>\n\n\n\n<p>13) <strong>Can multiple projects share one Redis instance?<\/strong><br\/>\nTypically access is tied to VPC connectivity. Cross-project access can be possible with Shared VPC or carefully designed networking, but must be validated for your environment.<\/p>\n\n\n\n<p>14) <strong>Is traffic between my app and Redis encrypted?<\/strong><br\/>\nIt depends on configuration and feature availability (TLS support). Verify in official docs for your instance settings.<\/p>\n\n\n\n<p>15) <strong>How do I estimate cost accurately?<\/strong><br\/>\nUse the official pricing page and the Google Cloud Pricing Calculator. Include node capacity, tier, expected uptime, and any network egress.<\/p>\n\n\n\n<p>16) <strong>What\u2019s the biggest operational risk with Redis caches?<\/strong><br\/>\nA \u201ccache-as-a-dependency\u201d outage causing database overload. Design graceful degradation and ensure the DB can handle cold-cache scenarios.<\/p>\n\n\n\n<p>17) <strong>Do I need firewall rules to connect from a VM?<\/strong><br\/>\nOften egress from a VM is allowed by default, but org policies may restrict it. Ensure your VPC and firewall policies allow connections to the Redis private IP and port.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">17. Top Online Resources to Learn Memorystore for Redis<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Resource Type<\/th>\n<th>Name<\/th>\n<th>Why It Is Useful<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Official documentation<\/td>\n<td>Memorystore for Redis Docs \u2014 https:\/\/cloud.google.com\/memorystore\/docs\/redis<\/td>\n<td>Authoritative feature set, concepts, and procedures<\/td>\n<\/tr>\n<tr>\n<td>Official pricing<\/td>\n<td>Memorystore pricing \u2014 https:\/\/cloud.google.com\/memorystore\/pricing<\/td>\n<td>Current pricing model and SKU details<\/td>\n<\/tr>\n<tr>\n<td>Pricing tool<\/td>\n<td>Google Cloud Pricing Calculator \u2014 https:\/\/cloud.google.com\/products\/calculator<\/td>\n<td>Build region\/tier-specific estimates<\/td>\n<\/tr>\n<tr>\n<td>Getting started<\/td>\n<td>Memorystore for Redis quickstarts (Console\/CLI) \u2014 https:\/\/cloud.google.com\/memorystore\/docs\/redis<\/td>\n<td>Step-by-step creation and connectivity guides<\/td>\n<\/tr>\n<tr>\n<td>Networking concept<\/td>\n<td>Private Service Access \u2014 https:\/\/cloud.google.com\/vpc\/docs\/private-services-access<\/td>\n<td>Core to private connectivity for managed services<\/td>\n<\/tr>\n<tr>\n<td>Release notes<\/td>\n<td>Memorystore for Redis release notes \u2014 https:\/\/cloud.google.com\/memorystore\/docs\/redis\/release-notes<\/td>\n<td>Track version support and feature changes<\/td>\n<\/tr>\n<tr>\n<td>Architecture guidance<\/td>\n<td>Google Cloud Architecture Center \u2014 https:\/\/cloud.google.com\/architecture<\/td>\n<td>Reference architectures where Redis caching fits<\/td>\n<\/tr>\n<tr>\n<td>Observability<\/td>\n<td>Cloud Monitoring \u2014 https:\/\/cloud.google.com\/monitoring\/docs<\/td>\n<td>How to build dashboards and alerts<\/td>\n<\/tr>\n<tr>\n<td>Redis fundamentals<\/td>\n<td>Redis documentation \u2014 https:\/\/redis.io\/docs<\/td>\n<td>Learn Redis commands, data structures, and patterns<\/td>\n<\/tr>\n<tr>\n<td>Samples (trusted)<\/td>\n<td>GoogleCloudPlatform GitHub \u2014 https:\/\/github.com\/GoogleCloudPlatform<\/td>\n<td>Look for official samples integrating Redis (verify repository relevance)<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">18. Training and Certification Providers<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Institute<\/th>\n<th>Suitable Audience<\/th>\n<th>Likely Learning Focus<\/th>\n<th>Mode<\/th>\n<th>Website URL<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>DevOpsSchool.com<\/td>\n<td>DevOps engineers, SREs, cloud engineers<\/td>\n<td>Google Cloud ops, DevOps practices, hands-on labs<\/td>\n<td>Check website<\/td>\n<td>https:\/\/www.devopsschool.com<\/td>\n<\/tr>\n<tr>\n<td>ScmGalaxy.com<\/td>\n<td>Beginners to intermediate engineers<\/td>\n<td>DevOps\/cloud fundamentals, tooling<\/td>\n<td>Check website<\/td>\n<td>https:\/\/www.scmgalaxy.com<\/td>\n<\/tr>\n<tr>\n<td>CLoudOpsNow.in<\/td>\n<td>Cloud operations teams<\/td>\n<td>Cloud operations, SRE practices<\/td>\n<td>Check website<\/td>\n<td>https:\/\/www.cloudopsnow.in<\/td>\n<\/tr>\n<tr>\n<td>SreSchool.com<\/td>\n<td>SREs, reliability engineers<\/td>\n<td>Reliability engineering, monitoring, incident response<\/td>\n<td>Check website<\/td>\n<td>https:\/\/www.sreschool.com<\/td>\n<\/tr>\n<tr>\n<td>AiOpsSchool.com<\/td>\n<td>Ops teams exploring AIOps<\/td>\n<td>Observability, automation, AIOps concepts<\/td>\n<td>Check website<\/td>\n<td>https:\/\/www.aiopsschool.com<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">19. Top Trainers<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Platform\/Site<\/th>\n<th>Likely Specialization<\/th>\n<th>Suitable Audience<\/th>\n<th>Website URL<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>RajeshKumar.xyz<\/td>\n<td>DevOps\/cloud training content<\/td>\n<td>Beginners to advanced practitioners<\/td>\n<td>https:\/\/www.rajeshkumar.xyz<\/td>\n<\/tr>\n<tr>\n<td>devopstrainer.in<\/td>\n<td>DevOps tools and cloud workshops<\/td>\n<td>DevOps engineers, SREs<\/td>\n<td>https:\/\/www.devopstrainer.in<\/td>\n<\/tr>\n<tr>\n<td>devopsfreelancer.com<\/td>\n<td>Freelance DevOps guidance\/training<\/td>\n<td>Teams needing targeted help<\/td>\n<td>https:\/\/www.devopsfreelancer.com<\/td>\n<\/tr>\n<tr>\n<td>devopssupport.in<\/td>\n<td>DevOps support and learning resources<\/td>\n<td>Ops teams and engineers<\/td>\n<td>https:\/\/www.devopssupport.in<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">20. Top Consulting Companies<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Company<\/th>\n<th>Likely Service Area<\/th>\n<th>Where They May Help<\/th>\n<th>Consulting Use Case Examples<\/th>\n<th>Website URL<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>cotocus.com<\/td>\n<td>Cloud\/DevOps consulting<\/td>\n<td>Architecture, deployments, operationalization<\/td>\n<td>Designing caching strategy; setting up monitoring\/alerts; migration planning<\/td>\n<td>https:\/\/cotocus.com<\/td>\n<\/tr>\n<tr>\n<td>DevOpsSchool.com<\/td>\n<td>DevOps\/cloud consulting &amp; training<\/td>\n<td>Platform engineering, DevOps transformation<\/td>\n<td>Standardizing Google Cloud deployments; CI\/CD enablement; SRE practices<\/td>\n<td>https:\/\/www.devopsschool.com<\/td>\n<\/tr>\n<tr>\n<td>DEVOPSCONSULTING.IN<\/td>\n<td>DevOps consulting<\/td>\n<td>Automation, reliability, operations<\/td>\n<td>Production readiness reviews; incident reduction; cloud cost optimization<\/td>\n<td>https:\/\/www.devopsconsulting.in<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">21. Career and Learning Roadmap<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">What to learn before Memorystore for Redis<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Google Cloud fundamentals:<\/li>\n<li>Projects, IAM, VPC networks, regions\/zones<\/li>\n<li>Basic networking:<\/li>\n<li>CIDR ranges, firewall rules, private connectivity<\/li>\n<li>Application basics:<\/li>\n<li>Latency, throughput, connection pooling<\/li>\n<li>Database basics:<\/li>\n<li>Cache-aside pattern, TTL, consistency tradeoffs<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">What to learn after Memorystore for Redis<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Advanced caching strategies:<\/li>\n<li>Write-through\/write-behind, cache invalidation patterns<\/li>\n<li>Hot key mitigation and thundering herd prevention<\/li>\n<li>Reliability engineering:<\/li>\n<li>SLOs\/SLIs for caches<\/li>\n<li>Load testing and failure testing<\/li>\n<li>Scaling patterns:<\/li>\n<li>When to move from single instance to Redis Cluster products<\/li>\n<li>Security hardening:<\/li>\n<li>Secret management, private connectivity for serverless, org policies<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Job roles that use it<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Cloud engineer \/ platform engineer<\/li>\n<li>SRE \/ reliability engineer<\/li>\n<li>DevOps engineer<\/li>\n<li>Backend engineer<\/li>\n<li>Solutions architect<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Certification path (Google Cloud)<\/h3>\n\n\n\n<p>Google Cloud certifications change over time. Commonly relevant tracks:\n&#8211; Associate Cloud Engineer\n&#8211; Professional Cloud Architect\n&#8211; Professional DevOps Engineer<\/p>\n\n\n\n<p>Verify the current certification catalog:\n&#8211; https:\/\/cloud.google.com\/learn\/certification<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Project ideas for practice<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Build a Cloud Run API with cache-aside Redis for a slow endpoint.<\/li>\n<li>Implement rate limiting using Redis counters with TTL.<\/li>\n<li>Create a leaderboard service using sorted sets.<\/li>\n<li>Add monitoring dashboards and alerts (memory, evictions, connections).<\/li>\n<li>Simulate cache failure and validate graceful degradation in your app.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">22. Glossary<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Redis<\/strong>: An in-memory data structure store used as a database, cache, and message broker.<\/li>\n<li><strong>Memorystore for Redis<\/strong>: Google Cloud managed Redis service.<\/li>\n<li><strong>Cache-aside<\/strong>: App checks cache first; on miss, reads from DB and populates cache.<\/li>\n<li><strong>TTL (Time to Live)<\/strong>: Expiration time after which a key is deleted.<\/li>\n<li><strong>Eviction<\/strong>: Redis removing keys when memory is full, based on policy.<\/li>\n<li><strong>VPC (Virtual Private Cloud)<\/strong>: Google Cloud networking construct for private IP space and routing.<\/li>\n<li><strong>Private Service Access (PSA)<\/strong>: A way to connect privately to Google-managed services using VPC peering and reserved IP ranges.<\/li>\n<li><strong>HA (High Availability)<\/strong>: Reducing downtime risk via redundancy and failover.<\/li>\n<li><strong>Failover<\/strong>: Automatic promotion of a replica to primary when the primary becomes unavailable.<\/li>\n<li><strong>Cold cache<\/strong>: Cache has little\/no data (after restart\/flush\/new deployment), causing many cache misses.<\/li>\n<li><strong>Thundering herd<\/strong>: Many clients recompute\/fetch the same missing key simultaneously, overloading the backend.<\/li>\n<li><strong>Working set<\/strong>: The portion of data that is frequently accessed and should fit in memory.<\/li>\n<li><strong>Inter-zone egress<\/strong>: Network traffic charges between zones within a region (pricing depends on path and product).<\/li>\n<li><strong>Management plane<\/strong>: Administrative control APIs (create\/resize\/delete).<\/li>\n<li><strong>Data plane<\/strong>: Runtime traffic (Redis commands: GET\/SET\/etc.).<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">23. Summary<\/h2>\n\n\n\n<p>Memorystore for Redis is Google Cloud\u2019s managed Redis offering in the <strong>Databases<\/strong> category, designed for low-latency caching and ephemeral data patterns. It fits best as an acceleration layer in front of durable systems like Cloud SQL, AlloyDB, Spanner, or Firestore, and it integrates cleanly with Google Cloud networking and monitoring.<\/p>\n\n\n\n<p>Key takeaways:\n&#8211; Choose the right <strong>tier<\/strong>: single-node for dev\/test, HA tier for production.\n&#8211; Cost is driven mainly by <strong>provisioned memory<\/strong>, <strong>tier<\/strong>, and <strong>network placement<\/strong> (same zone\/region matters).\n&#8211; Security is largely about <strong>private connectivity<\/strong>, <strong>least-privilege IAM<\/strong> for admin actions, and (where supported) enabling Redis auth\/encryption and handling secrets properly.\n&#8211; Operational success depends on monitoring <strong>memory, evictions, and connections<\/strong>, plus application-level hit ratio and fallback behavior.<\/p>\n\n\n\n<p>Next step: read the official docs and build a small cache-aside prototype with your real application workload and metrics-driven sizing:\n&#8211; https:\/\/cloud.google.com\/memorystore\/docs\/redis<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Databases<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12,51],"tags":[],"class_list":["post-682","post","type-post","status-publish","format-standard","hentry","category-databases","category-google-cloud"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts\/682","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/comments?post=682"}],"version-history":[{"count":0,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts\/682\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/media?parent=682"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/categories?post=682"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/tags?post=682"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}