{"id":684,"date":"2026-04-15T00:25:15","date_gmt":"2026-04-15T00:25:15","guid":{"rendered":"https:\/\/www.devopsschool.com\/tutorials\/google-cloud-memorystore-for-valkey-tutorial-architecture-pricing-use-cases-and-hands-on-guide-for-databases\/"},"modified":"2026-04-15T00:25:15","modified_gmt":"2026-04-15T00:25:15","slug":"google-cloud-memorystore-for-valkey-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-valkey-tutorial-architecture-pricing-use-cases-and-hands-on-guide-for-databases\/","title":{"rendered":"Google Cloud Memorystore for Valkey 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 Valkey is a managed, in-memory key-value datastore service on <strong>Google Cloud<\/strong> designed for <strong>low-latency<\/strong> access patterns such as caching, session storage, counters, rate limiting, and pub\/sub messaging\u2014using the <strong>Valkey<\/strong> open-source engine (a community-driven fork that is protocol-compatible with Redis for many clients and commands).<\/p>\n\n\n\n<p>In simple terms: you create a Memorystore for Valkey instance, Google Cloud runs and maintains the Valkey servers for you, and your applications connect to it over a private IP address in your VPC to read\/write keys in milliseconds (often sub-millisecond) without managing VMs, patching, or failover scripts.<\/p>\n\n\n\n<p>Technically, Memorystore for Valkey is part of Google Cloud\u2019s managed \u201cMemorystore\u201d family in the <strong>Databases<\/strong> category. It provisions Valkey capacity inside a Google-managed service perimeter and attaches it to your VPC networking (typically via private connectivity). You get operational features like automated maintenance, monitoring integration, and (depending on the service tier\/edition) high availability options.<\/p>\n\n\n\n<p><strong>What problem it solves:<\/strong> teams frequently need an extremely fast data layer for ephemeral or semi-ephemeral data (cache entries, tokens, sessions, deduplication keys, leaderboard counters). Running Valkey yourself can be operationally heavy\u2014especially around patching, availability, backups\/persistence, and monitoring. Memorystore for Valkey offloads much of that undifferentiated work while keeping the familiar Valkey\/Redis-compatible data model and client libraries.<\/p>\n\n\n\n<blockquote>\n<p>Naming and lifecycle note: \u201cMemorystore for Valkey\u201d is a distinct Google Cloud service name. Google Cloud also offers other Memorystore options (for example, Memorystore for Redis and Memorystore for Memcached). Always verify the latest product positioning and feature set in the official docs because managed cache products evolve quickly.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">2. What is Memorystore for Valkey?<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Official purpose<\/h3>\n\n\n\n<p>Memorystore for Valkey provides a <strong>fully managed Valkey datastore<\/strong> on Google Cloud, intended primarily for <strong>in-memory workloads<\/strong> requiring very low latency and high throughput.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Core capabilities (high level)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Managed provisioning of Valkey capacity (instance creation, sizing).<\/li>\n<li>Network-accessible endpoint (typically <strong>private IP<\/strong>) for applications in your VPC.<\/li>\n<li>Operational integration with Google Cloud tooling (Monitoring, Logging where applicable).<\/li>\n<li>Service-managed maintenance and upgrades (service-defined windows\/behavior vary\u2014verify 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>Valkey instance<\/strong>: the managed datastore you create (capacity, region, networking).<\/li>\n<li><strong>Networking attachment<\/strong>: connectivity to a VPC network\/subnet (private access model).<\/li>\n<li><strong>Control plane<\/strong>: Google-managed APIs and console workflows for lifecycle operations (create\/resize\/delete, maintenance events).<\/li>\n<li><strong>Observability hooks<\/strong>: metrics and events surfaced through Google Cloud Monitoring and related consoles (exact metrics vary\u2014verify in official docs).<\/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 in-memory datastore<\/strong> (cache \/ ephemeral data platform) in the <strong>Databases<\/strong> category.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Scope and locality (how \u201cbig\u201d the service is)<\/h3>\n\n\n\n<p>This typically depends on how Google Cloud offers the service in your region:\n&#8211; <strong>Project-scoped<\/strong>: created inside a Google Cloud project.\n&#8211; <strong>Region and\/or zone scoped<\/strong>: you choose a location when provisioning (commonly regional for managed database services, but verify the exact location model for Memorystore for Valkey in your region).\n&#8211; <strong>VPC-connected<\/strong>: intended to be accessed from workloads inside your VPC network (Compute Engine, GKE, Cloud Run via VPC connector, etc.).<\/p>\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 Valkey is commonly used alongside:\n&#8211; <strong>Compute Engine<\/strong> and <strong>Google Kubernetes Engine (GKE)<\/strong> for application hosting.\n&#8211; <strong>Cloud Run<\/strong> (via Serverless VPC Access) for private access to the instance.\n&#8211; <strong>Cloud Monitoring<\/strong> for latency\/CPU\/memory and connection metrics.\n&#8211; <strong>Secret Manager<\/strong> (when using AUTH credentials or app config values\u2014verify auth model).\n&#8211; <strong>VPC<\/strong>, <strong>Firewall rules<\/strong>, and (often) private service networking for private connectivity.<\/p>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">3. Why use Memorystore for Valkey?<\/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 time-to-market:<\/strong> avoid building and maintaining your own Valkey cluster on VMs.<\/li>\n<li><strong>Reduced operational burden:<\/strong> patching, maintenance orchestration, and basic reliability controls move to the managed service.<\/li>\n<li><strong>Predictable performance for common cache patterns:<\/strong> designed for high-throughput reads\/writes.<\/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>Microsecond-to-millisecond access<\/strong> patterns suitable for caching and hot data.<\/li>\n<li><strong>Common Valkey\/Redis-compatible clients<\/strong>: your apps can often reuse existing Redis client libraries (validate command compatibility for your app).<\/li>\n<li><strong>Simple data structures<\/strong>: strings, hashes, lists, sets, sorted sets, and related primitives (exact supported commands depend on service configuration\u2014verify in official docs).<\/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 upgrades\/maintenance<\/strong> with service controls (timing and impact vary\u2014verify).<\/li>\n<li><strong>Integrated monitoring<\/strong> for capacity, connections, and performance signals.<\/li>\n<li><strong>Simplified scaling workflow<\/strong> (vertical scaling is commonly supported; horizontal\/sharded scaling depends on product variant\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> patterns: keep datastore traffic on internal IP space rather than the public internet.<\/li>\n<li><strong>IAM-controlled administration:<\/strong> control who can create\/modify instances via Google Cloud IAM.<\/li>\n<li><strong>Auditability:<\/strong> administrative actions can be tracked via Cloud Audit Logs.<\/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>Good fit when you need:<\/li>\n<li>High QPS (queries per second) for reads\/writes.<\/li>\n<li>Consistently low p99 latency for hot keys.<\/li>\n<li>Fast atomic operations (INCR, SETNX, etc.) for counters and rate limiting.<\/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 Valkey when:\n&#8211; Your dataset is <strong>cache-like<\/strong> (recomputable, TTL-based, derived from a system of record).\n&#8211; You need <strong>fast session\/token storage<\/strong>.\n&#8211; You need <strong>atomic counters\/locks<\/strong> (with careful design).\n&#8211; You want managed operations and private connectivity in Google Cloud.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">When teams should not choose it<\/h3>\n\n\n\n<p>Avoid (or be cautious) if:\n&#8211; You need a <strong>system of record<\/strong> with strong durability guarantees (use Cloud SQL, Spanner, Firestore, etc.).\n&#8211; Your workload requires <strong>multi-region active-active<\/strong> data consistency (typical cache semantics do not provide this).\n&#8211; You require <strong>large datasets<\/strong> that exceed practical in-memory economics.\n&#8211; You need <strong>complex querying<\/strong> (Valkey is key-based, not a query engine).\n&#8211; You need <strong>strict durability<\/strong> and <strong>auditable history<\/strong> for compliance (caches are usually not the right primary store).<\/p>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">4. Where is Memorystore for Valkey 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 (carts, catalog caches, flash sale throttling)<\/li>\n<li>Media\/streaming (content metadata caching)<\/li>\n<li>FinTech (rate limiting, anti-fraud signals caching)<\/li>\n<li>SaaS (session management, tenant config caches)<\/li>\n<li>Gaming (leaderboards, matchmaking state)<\/li>\n<li>AdTech\/MarTech (real-time counters, dedup keys)<\/li>\n<li>Logistics (tracking and status caching)<\/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 teams standardizing shared caching<\/li>\n<li>SRE teams improving latency and reducing database load<\/li>\n<li>Backend and API teams building read-heavy services<\/li>\n<li>Data engineering teams caching expensive computations (carefully)<\/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>API response caching<\/li>\n<li>Session\/token storage<\/li>\n<li>Leaderboards and counters<\/li>\n<li>Rate limiting and quotas<\/li>\n<li>Pub\/Sub-style ephemeral signaling (where appropriate)<\/li>\n<li>Feature flag and configuration caching (not as system of record)<\/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>Microservices needing a shared low-latency cache<\/li>\n<li>Event-driven architectures that require deduplication keys<\/li>\n<li>Hybrid architectures where system of record is Cloud SQL\/Spanner\/BigQuery and cache is Valkey<\/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>Production: sized for traffic, monitored, usually configured for higher availability (tier-dependent).<\/li>\n<li>Dev\/test: smaller instances to validate cache integration and behavior under TTL\/eviction.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">5. Top Use Cases and Scenarios<\/h2>\n\n\n\n<p>Below are realistic scenarios where <strong>Memorystore for Valkey<\/strong> fits well.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1) API response cache<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Problem:<\/strong> repeated requests cause high load on backend databases.<\/li>\n<li><strong>Why it fits:<\/strong> Valkey can store serialized responses keyed by request parameters with TTL.<\/li>\n<li><strong>Example:<\/strong> <code>\/products?category=shoes&amp;page=1<\/code> cached for 30 seconds during peak traffic.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">2) Session store for web apps<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Problem:<\/strong> stateless services still need fast session validation and lookup.<\/li>\n<li><strong>Why it fits:<\/strong> quick get\/set for session tokens, with TTL and automatic expiration.<\/li>\n<li><strong>Example:<\/strong> store session <code>{user_id, scopes, last_seen}<\/code> keyed by <code>sess:&lt;token&gt;<\/code>.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">3) Rate limiting \/ throttling<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Problem:<\/strong> prevent abuse and protect downstream systems.<\/li>\n<li><strong>Why it fits:<\/strong> atomic increments and expirations enable token-bucket or fixed-window counters.<\/li>\n<li><strong>Example:<\/strong> <code>INCR rate:&lt;ip&gt;:&lt;minute&gt;<\/code> with <code>EXPIRE 60<\/code>.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">4) Distributed locking (with caution)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Problem:<\/strong> coordinate work across multiple workers.<\/li>\n<li><strong>Why it fits:<\/strong> primitives like <code>SET key value NX PX &lt;ms&gt;<\/code> can implement locks.<\/li>\n<li><strong>Example:<\/strong> worker acquires lock <code>lock:invoice:123<\/code> for 10 seconds before processing.<\/li>\n<li><strong>Caveat:<\/strong> distributed locking is tricky; verify correctness and consider specialized patterns.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">5) Leaderboards<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Problem:<\/strong> maintain ranked lists updated frequently.<\/li>\n<li><strong>Why it fits:<\/strong> sorted sets support score updates and rank queries.<\/li>\n<li><strong>Example:<\/strong> <code>ZINCRBY leaderboard:weekly 10 user:42<\/code> and <code>ZREVRANGE<\/code> for top N.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">6) Shopping cart cache<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Problem:<\/strong> cart reads\/writes must be quick; DB writes can be asynchronous.<\/li>\n<li><strong>Why it fits:<\/strong> store cart state with TTL and periodic persistence to a system of record.<\/li>\n<li><strong>Example:<\/strong> <code>HSET cart:&lt;user&gt; sku123 2<\/code>.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">7) Feature flag and config caching<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Problem:<\/strong> config retrieval from database adds latency.<\/li>\n<li><strong>Why it fits:<\/strong> cache config per tenant with versioning; refresh on changes.<\/li>\n<li><strong>Example:<\/strong> <code>GET cfg:tenantA:v17<\/code> cached for 5 minutes.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">8) Deduplication keys for event processing<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Problem:<\/strong> event-driven systems can re-deliver messages; duplicates cause side effects.<\/li>\n<li><strong>Why it fits:<\/strong> <code>SETNX<\/code> or <code>SET ... NX<\/code> with TTL provides idempotency keys.<\/li>\n<li><strong>Example:<\/strong> <code>SET event:&lt;id&gt; 1 NX EX 86400<\/code> before processing.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">9) Real-time presence or ephemeral state<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Problem:<\/strong> track online users or ephemeral signals.<\/li>\n<li><strong>Why it fits:<\/strong> sets and TTL keys model presence efficiently.<\/li>\n<li><strong>Example:<\/strong> <code>SADD room:123:online user:42<\/code>, refresh TTL periodically.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">10) Cache for expensive computations<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Problem:<\/strong> CPU-heavy computations slow response times.<\/li>\n<li><strong>Why it fits:<\/strong> store computed results keyed by input hash.<\/li>\n<li><strong>Example:<\/strong> cache recommendation results for user segments for 60 seconds.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">11) Queue-like worker coordination (lightweight)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Problem:<\/strong> simple job dispatch without a full queue service.<\/li>\n<li><strong>Why it fits:<\/strong> lists can implement push\/pop semantics.<\/li>\n<li><strong>Example:<\/strong> <code>LPUSH jobs email:123<\/code>, workers <code>BRPOP jobs<\/code>.<\/li>\n<li><strong>Caveat:<\/strong> for durable queues, consider Pub\/Sub or Cloud Tasks.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">12) Request coalescing (stampede protection)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Problem:<\/strong> cache miss causes many concurrent expensive recomputations (\u201cthundering herd\u201d).<\/li>\n<li><strong>Why it fits:<\/strong> locks + short-lived \u201cin progress\u201d markers reduce duplicate work.<\/li>\n<li><strong>Example:<\/strong> first request sets <code>lock:report:&lt;id&gt;<\/code>; others wait\/backoff.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">6. Core Features<\/h2>\n\n\n\n<blockquote>\n<p>Note: exact feature availability can depend on tier\/edition\/region. Where details may vary, this tutorial explicitly says <strong>\u201cVerify in official docs.\u201d<\/strong><\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">Managed Valkey provisioning<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>What it does:<\/strong> creates a Valkey datastore instance without managing servers.<\/li>\n<li><strong>Why it matters:<\/strong> removes VM provisioning, OS tuning, and manual deployments.<\/li>\n<li><strong>Practical benefit:<\/strong> faster setup, fewer moving parts for common cache patterns.<\/li>\n<li><strong>Caveats:<\/strong> instance capacity and configuration options are constrained to supported SKUs.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Private connectivity from your VPC<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>What it does:<\/strong> provides an internal endpoint accessible from your Google Cloud VPC.<\/li>\n<li><strong>Why it matters:<\/strong> reduces exposure and simplifies secure access.<\/li>\n<li><strong>Practical benefit:<\/strong> applications connect using internal IP; traffic stays internal.<\/li>\n<li><strong>Caveats:<\/strong> you may need private service networking \/ Private Service Access configuration\u2014<strong>verify in official docs<\/strong>.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Operational automation (maintenance and patching)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>What it does:<\/strong> Google manages underlying maintenance tasks.<\/li>\n<li><strong>Why it matters:<\/strong> reduces operational toil and security patch lag.<\/li>\n<li><strong>Practical benefit:<\/strong> fewer urgent \u201cpatch now\u201d windows for cache servers.<\/li>\n<li><strong>Caveats:<\/strong> maintenance can still cause performance impact depending on configuration; plan for it.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">High availability options (tier-dependent)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>What it does:<\/strong> provides redundancy\/failover patterns (commonly primary\/replica).<\/li>\n<li><strong>Why it matters:<\/strong> cache outages can cause cascading failures and DB overload.<\/li>\n<li><strong>Practical benefit:<\/strong> improved resilience and faster recovery in many failure modes.<\/li>\n<li><strong>Caveats:<\/strong> HA design, failover behavior, and SLA vary\u2014<strong>verify in official docs<\/strong>.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Scaling (capacity changes)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>What it does:<\/strong> lets you increase (and sometimes decrease) capacity.<\/li>\n<li><strong>Why it matters:<\/strong> cache sizing is often iterative and traffic-driven.<\/li>\n<li><strong>Practical benefit:<\/strong> adjust memory to avoid evictions and latency spikes.<\/li>\n<li><strong>Caveats:<\/strong> resizing can cause brief disruption or rebalancing effects; test and schedule.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Metrics and monitoring integration<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>What it does:<\/strong> exposes performance\/health signals.<\/li>\n<li><strong>Why it matters:<\/strong> caching issues often show up as latency, evictions, or connection churn.<\/li>\n<li><strong>Practical benefit:<\/strong> alert early on memory pressure and error rates.<\/li>\n<li><strong>Caveats:<\/strong> exact metric names and coverage vary\u2014<strong>verify in official docs<\/strong>.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">IAM-based administrative control<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>What it does:<\/strong> controls who can create\/modify\/delete instances.<\/li>\n<li><strong>Why it matters:<\/strong> prevents accidental deletion and enforces separation of duties.<\/li>\n<li><strong>Practical benefit:<\/strong> least privilege for operators and automation.<\/li>\n<li><strong>Caveats:<\/strong> IAM controls the service management plane; data-plane auth is separate (if supported).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Compatibility with Redis protocol (Valkey)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>What it does:<\/strong> Valkey speaks the Redis protocol; many Redis clients work.<\/li>\n<li><strong>Why it matters:<\/strong> reduces app changes and supports common patterns.<\/li>\n<li><strong>Practical benefit:<\/strong> use familiar commands (GET\/SET, TTL, hashes, sets, etc.).<\/li>\n<li><strong>Caveats:<\/strong> confirm your required Redis module\/command support; managed services may restrict some commands.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator\" \/>\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, Memorystore for Valkey consists of:\n&#8211; A <strong>control plane<\/strong> (Google-managed API) that provisions and manages instances.\n&#8211; A <strong>data plane<\/strong> (Valkey nodes) that serves your requests on an internal endpoint.\n&#8211; A <strong>networking model<\/strong> that attaches the instance to your VPC so your apps can connect privately.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Request \/ data \/ control flows<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Control flow:<\/strong> you (or CI\/CD automation) create and manage instances via Google Cloud Console, <code>gcloud<\/code>, or APIs. IAM governs who can do this.<\/li>\n<li><strong>Data flow:<\/strong> your application connects to the Valkey endpoint (IP:port) over internal networking and executes Valkey commands.<\/li>\n<li><strong>Observability flow:<\/strong> metrics and events flow to Cloud Monitoring (and sometimes logs\/audit events flow to Cloud Logging \/ Cloud Audit Logs).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Integrations with related Google Cloud services<\/h3>\n\n\n\n<p>Common integration patterns include:\n&#8211; <strong>GKE<\/strong>: workloads in a cluster connect via VPC-native networking.\n&#8211; <strong>Compute Engine<\/strong>: VMs in the same VPC connect directly.\n&#8211; <strong>Cloud Run<\/strong>: use <strong>Serverless VPC Access<\/strong> to reach the private endpoint.\n&#8211; <strong>Cloud Monitoring<\/strong>: dashboards and alerting for capacity, latency indicators.\n&#8211; <strong>Cloud Audit Logs<\/strong>: track instance lifecycle changes.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Dependency services<\/h3>\n\n\n\n<p>Depending on how Memorystore for Valkey is implemented in your environment, you may need:\n&#8211; A <strong>VPC network<\/strong> and subnet(s).\n&#8211; Potentially <strong>Service Networking API<\/strong> and a configured private service connection (common for managed services using private IP). <strong>Verify in official docs<\/strong> for exact prerequisites.<\/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>Admin plane:<\/strong> governed by IAM (who can create\/resize\/delete).<\/li>\n<li><strong>Data plane:<\/strong> typically gated by private networking; additional auth (like AUTH) and\/or in-transit encryption may be available depending on tier\/feature\u2014<strong>verify in official docs<\/strong>.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Networking model<\/h3>\n\n\n\n<p>Most managed caches on Google Cloud follow one of these patterns:\n&#8211; <strong>Private IP in your VPC<\/strong> (common), reachable only from internal networks (and optionally via VPN\/Interconnect).\n&#8211; Connectivity controlled by <strong>VPC firewall rules<\/strong> and routing.\n&#8211; Private service connectivity constructs might be required (Private Service Access \/ Private Service Connect)\u2014<strong>verify which applies to Memorystore for Valkey<\/strong> in your region.<\/p>\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>Monitor memory usage, evictions, connections, CPU, and latency indicators.<\/li>\n<li>Use Cloud Audit Logs to monitor administrative actions.<\/li>\n<li>Apply labels (team, env, cost-center) and consistent naming for cost allocation and incident response.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Simple architecture diagram (Mermaid)<\/h3>\n\n\n\n<pre><code class=\"language-mermaid\">flowchart LR\n  A[App on Compute Engine \/ GKE \/ Cloud Run] --&gt;|Valkey protocol| B[(Memorystore for Valkey\\nPrivate Endpoint)]\n  A --&gt; C[Cloud Monitoring Alerts\/Dashboards]\n  D[Operator\/CI-CD] --&gt;|Create\/Resize| E[Google Cloud Control Plane]\n  E --&gt; B\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Production-style architecture diagram (Mermaid)<\/h3>\n\n\n\n<pre><code class=\"language-mermaid\">flowchart TB\n  subgraph VPC[\"Google Cloud VPC (prod)\"]\n    subgraph APP[\"Application tier\"]\n      LB[External HTTPS Load Balancer]\n      SRV[Services on GKE or MIG]\n      LB --&gt; SRV\n    end\n\n    subgraph DATA[\"Data tier\"]\n      SQL[(Cloud SQL \/ Spanner\\nSystem of record)]\n      CACHE[(Memorystore for Valkey\\nPrivate endpoint)]\n    end\n\n    SRV --&gt;|Read-through cache| CACHE\n    SRV --&gt;|Fallback reads\/writes| SQL\n  end\n\n  subgraph OPS[\"Ops &amp; Governance\"]\n    MON[Cloud Monitoring]\n    LOG[Cloud Logging \/ Audit Logs]\n    IAM[IAM]\n  end\n\n  SRV --&gt; MON\n  CACHE --&gt; MON\n  IAM --&gt;|Controls admin actions| CACHE\n  CACHE --&gt; LOG\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator\" \/>\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 Google Cloud account with access to a <strong>Google Cloud project<\/strong>.<\/li>\n<li><strong>Billing enabled<\/strong> on the 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 to:\n&#8211; Enable required APIs.\n&#8211; Create and manage Memorystore for Valkey instances.\n&#8211; Create networking resources (if required).\n&#8211; Create a VM or GKE\/Cloud Run resources for connectivity testing.<\/p>\n\n\n\n<p>Typical roles (choose least privilege):\n&#8211; Memorystore admin role for the relevant product (exact role name can differ\u2014<strong>verify in official docs<\/strong>).\n&#8211; <code>roles\/compute.admin<\/code> or narrower roles to create a test VM and firewall rules.\n&#8211; <code>roles\/servicenetworking.admin<\/code> if you must configure private service connectivity (verify).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Tools<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Google Cloud Console<\/strong> (web UI).<\/li>\n<li><strong>Cloud Shell<\/strong> (recommended) or local workstation with:<\/li>\n<li><code>gcloud<\/code> CLI<\/li>\n<li><code>redis-cli<\/code> or a Valkey-compatible CLI client (many Redis tool packages include <code>redis-cli<\/code>)<\/li>\n<li><code>openssl<\/code> (optional, for TLS testing if supported)<\/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 Valkey availability can be region-specific.<\/li>\n<li>Pick a region close to your application workloads.<\/li>\n<li><strong>Verify in official docs<\/strong> which regions support Memorystore for Valkey and which tiers are available.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Quotas \/ limits<\/h3>\n\n\n\n<p>Common limits to plan for:\n&#8211; Number of instances per project\/region.\n&#8211; Maximum instance size.\n&#8211; Network address space requirements for private connectivity.\n&#8211; Connection limits per instance (depends on sizing and service limits).<\/p>\n\n\n\n<p>Check <strong>Quotas<\/strong> in the Google Cloud Console and the Memorystore for Valkey documentation for current limits.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Prerequisite services \/ APIs<\/h3>\n\n\n\n<p>You will typically need:\n&#8211; The API for Memorystore for Valkey (name may differ\u2014<strong>verify in official docs<\/strong>).\n&#8211; Compute Engine API (for the test VM).\n&#8211; Possibly Service Networking API (for private connectivity)\u2014verify.<\/p>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">9. Pricing \/ Cost<\/h2>\n\n\n\n<p>Memorystore for Valkey pricing is <strong>usage-based<\/strong>, but the exact SKUs and dimensions can vary by region and tier\/edition. Do not rely on blog posts for pricing\u2014use the official pricing page and the pricing calculator.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Pricing dimensions (typical for managed in-memory datastores)<\/h3>\n\n\n\n<p>Expect some combination of:\n&#8211; <strong>Provisioned capacity<\/strong> (memory size) billed per unit time (hourly).\n&#8211; <strong>Tier\/HA selection<\/strong> (single node vs highly available) affecting cost.\n&#8211; <strong>Regional placement<\/strong> and any replica requirements affecting cost.\n&#8211; Potential charges for <strong>network egress<\/strong> (especially cross-region or to the internet, though caches are usually private and in-region).<\/p>\n\n\n\n<blockquote>\n<p>Official pricing: start from Google Cloud Memorystore pricing and select the Valkey offering if listed.<br\/>\nPricing page (entry point): https:\/\/cloud.google.com\/memorystore\/pricing<br\/>\nPricing calculator: https:\/\/cloud.google.com\/products\/calculator<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">Free tier<\/h3>\n\n\n\n<p>Google Cloud\u2019s free tier offerings change over time and may not apply to managed Memorystore products. <strong>Verify in official docs and the pricing page<\/strong> whether any free tier or trial credits apply.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Primary cost drivers<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Size of the instance<\/strong> (GB provisioned).<\/li>\n<li><strong>High availability configuration<\/strong> (if replicas are billed separately or included in the SKU).<\/li>\n<li><strong>Number of instances<\/strong> (dev\/test environments often multiply costs).<\/li>\n<li><strong>Uptime<\/strong> (instances billed while running; stopped mode may not exist for managed caches).<\/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>Data transfer<\/strong>:<\/li>\n<li>Cross-zone and cross-region traffic can add egress charges.<\/li>\n<li>Serverless access (Cloud Run) via connectors can introduce networking costs depending on architecture.<\/li>\n<li><strong>Compute costs<\/strong> for clients:<\/li>\n<li>A bastion VM for management\/testing costs money if left running.<\/li>\n<li><strong>Monitoring\/Logging<\/strong>:<\/li>\n<li>Metrics are generally included, but logs and custom metrics can incur costs.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Storage\/compute\/API\/request pricing factors<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Managed caches are usually priced by <strong>provisioned capacity<\/strong> rather than per-request.<\/li>\n<li>Control plane API calls are typically not the main cost driver, but check quotas.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">How to optimize cost<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Start with the smallest instance that matches your dev\/test needs.<\/li>\n<li>Use <strong>TTL<\/strong> aggressively so the cache doesn\u2019t require oversized memory.<\/li>\n<li>Avoid cross-region cache access; keep cache and apps in the same region.<\/li>\n<li>Prefer <strong>read-through caching<\/strong> rather than caching everything forever.<\/li>\n<li>Use key design to avoid memory bloat (short keys, compact values, compression where appropriate).<\/li>\n<li>Delete non-production instances when not in use (in many orgs, dev caches are forgotten).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Example low-cost starter estimate (no fabricated prices)<\/h3>\n\n\n\n<p>A realistic \u201cstarter\u201d approach:\n&#8211; One small instance in a single region for a dev environment.\n&#8211; One small Compute Engine VM for testing for less than an hour.\n&#8211; Minimal data transfer (same region).<\/p>\n\n\n\n<p>To get an accurate number:\n1. Open the <strong>Google Cloud Pricing Calculator<\/strong>.\n2. Search for \u201cMemorystore\u201d and select the Valkey option if available.\n3. Choose your region, tier, and size.\n4. Add a small VM for 1 hour of testing.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Example production cost considerations<\/h3>\n\n\n\n<p>For production, consider:\n&#8211; At least one highly available deployment (if supported\/required).\n&#8211; Larger memory sizing to prevent eviction during peaks.\n&#8211; Multiple environments (prod + staging) and potentially per-region deployments.\n&#8211; Monitoring, alerting, and on-call response time (people cost is real).<\/p>\n\n\n\n<hr class=\"wp-block-separator\" \/>\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 low-cost, private Memorystore for Valkey instance and connects to it from a Compute Engine VM in the same VPC. It focuses on safe, foundational tasks: provisioning, connectivity, basic commands, verification, and cleanup.<\/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 Valkey<\/strong> instance on Google Cloud.<\/li>\n<li>Configure required private connectivity prerequisites (as needed).<\/li>\n<li>Connect from a VM and run basic Valkey commands (using <code>redis-cli<\/code> as a compatible client).<\/li>\n<li>Validate behavior (TTL, atomic counter).<\/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 region and VPC network.\n2. Enable APIs.\n3. Configure private connectivity prerequisites (if required in your region).\n4. Create a Memorystore for Valkey instance.\n5. Create a Compute Engine VM in the same region\/VPC.\n6. Install a Valkey\/Redis CLI and connect privately.\n7. Validate with a few key operations.\n8. Troubleshoot common networking\/auth problems.\n9. Delete resources.<\/p>\n\n\n\n<blockquote>\n<p>Important: UI labels and exact steps can change. If a screen differs, follow the intent and consult the official docs for Memorystore for Valkey.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1: Create or select a Google Cloud project and set defaults<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>In the Google Cloud Console, select an existing project or create a new one:\n   &#8211; <strong>IAM &amp; Admin \u2192 Manage resources \u2192 Create Project<\/strong><\/li>\n<li>Open <strong>Cloud Shell<\/strong>.<\/li>\n<\/ol>\n\n\n\n<p>Set your project and choose a region (example uses <code>us-central1<\/code>; pick one supported by Memorystore for Valkey):<\/p>\n\n\n\n<pre><code class=\"language-bash\">gcloud config set project YOUR_PROJECT_ID\ngcloud config set compute\/region us-central1\ngcloud config set compute\/zone us-central1-a\n<\/code><\/pre>\n\n\n\n<p><strong>Expected outcome:<\/strong> <code>gcloud config list<\/code> shows your chosen project\/region\/zone.<\/p>\n\n\n\n<p>Verification:<\/p>\n\n\n\n<pre><code class=\"language-bash\">gcloud config list\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2: Enable required APIs<\/h3>\n\n\n\n<p>Enable APIs commonly required for this lab:<\/p>\n\n\n\n<pre><code class=\"language-bash\">gcloud services enable compute.googleapis.com\ngcloud services enable servicenetworking.googleapis.com\n<\/code><\/pre>\n\n\n\n<p>Now enable the Memorystore for Valkey API.<\/p>\n\n\n\n<p>Because the exact service name can differ (and product lines evolve), find it in the console:\n&#8211; <strong>APIs &amp; Services \u2192 Library<\/strong>\n&#8211; Search for <strong>\u201cMemorystore\u201d<\/strong> and <strong>\u201cValkey\u201d<\/strong>\n&#8211; Enable the API referenced by the Memorystore for Valkey documentation for your region.<\/p>\n\n\n\n<p><strong>Expected outcome:<\/strong> APIs show as enabled in <strong>APIs &amp; Services \u2192 Enabled APIs &amp; services<\/strong>.<\/p>\n\n\n\n<p>Verification:<\/p>\n\n\n\n<pre><code class=\"language-bash\">gcloud services list --enabled | grep -E \"compute|servicenetworking|memorystore|valkey\" || true\n<\/code><\/pre>\n\n\n\n<p>If you don\u2019t see a Valkey-specific API, <strong>verify in official docs<\/strong>; Google sometimes uses a shared Memorystore API surface.<\/p>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">Step 3: Prepare VPC private connectivity (if required)<\/h3>\n\n\n\n<p>Many managed services that expose <strong>private IPs<\/strong> require Private Service Access (PSA) using Service Networking.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>In the console, go to:\n   &#8211; <strong>VPC network \u2192 VPC network peering<\/strong>\n   &#8211; Look for an existing peering to <code>servicenetworking-googleapis-com<\/code>.<\/li>\n<li>If none exists, you typically need:\n   &#8211; A reserved internal IP range for Google managed services\n   &#8211; A private connection (peering) via Service Networking<\/li>\n<\/ol>\n\n\n\n<p>In Cloud Shell, a common PSA setup pattern looks like this (example range; adjust to avoid conflicts):<\/p>\n\n\n\n<pre><code class=\"language-bash\">NETWORK=\"default\"\nRANGE_NAME=\"psa-managed-services\"\nRANGE_CIDR=\"10.10.0.0\/16\"\n\ngcloud compute addresses create ${RANGE_NAME} \\\n  --global \\\n  --purpose=VPC_PEERING \\\n  --addresses=10.10.0.0 \\\n  --prefix-length=16 \\\n  --network=${NETWORK}\n\ngcloud services vpc-peerings connect \\\n  --service=servicenetworking.googleapis.com \\\n  --network=${NETWORK} \\\n  --ranges=${RANGE_NAME}\n<\/code><\/pre>\n\n\n\n<p><strong>Expected outcome:<\/strong> a private service connection exists and is in an ACTIVE\/CONNECTED state.<\/p>\n\n\n\n<p>Verification:<\/p>\n\n\n\n<pre><code class=\"language-bash\">gcloud services vpc-peerings list --network=${NETWORK} --service=servicenetworking.googleapis.com\ngcloud compute addresses list --global --filter=\"purpose=VPC_PEERING\"\n<\/code><\/pre>\n\n\n\n<blockquote>\n<p>If your organization already has PSA configured, do not create overlapping ranges. If the command fails due to existing setup, inspect current ranges and reuse them.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">Step 4: Create a Memorystore for Valkey instance<\/h3>\n\n\n\n<p>Create the instance using the Google Cloud Console (recommended for accuracy when product flags and tiers vary):<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to <strong>Google Cloud Console \u2192 Memorystore<\/strong><\/li>\n<li>Choose <strong>Memorystore for Valkey<\/strong><\/li>\n<li>Click <strong>Create instance<\/strong><\/li>\n<li>Configure:\n   &#8211; <strong>Name:<\/strong> <code>valkey-lab<\/code>\n   &#8211; <strong>Region:<\/strong> same as your compute region (e.g., <code>us-central1<\/code>)\n   &#8211; <strong>Network:<\/strong> <code>default<\/code> (or a dedicated VPC)\n   &#8211; <strong>Tier\/Availability:<\/strong> choose the lowest-cost option suitable for a lab (often single node).<br\/>\n     For production, choose HA when available and appropriate.\n   &#8211; <strong>Capacity\/Size:<\/strong> choose the smallest available size for the lab.<\/li>\n<\/ol>\n\n\n\n<p>Create the instance and wait until status becomes <strong>Ready<\/strong>.<\/p>\n\n\n\n<p><strong>Expected outcome:<\/strong> instance shows a <strong>private IP address<\/strong> and port (commonly 6379 for Redis\/Valkey protocol, but verify the port shown in the console).<\/p>\n\n\n\n<p>Verification:\n&#8211; In the instance details page, note:\n  &#8211; Endpoint IP\n  &#8211; Port\n  &#8211; VPC network\n  &#8211; Region\n  &#8211; Any authentication\/encryption requirements shown<\/p>\n\n\n\n<blockquote>\n<p>If the console requires additional settings (AUTH, TLS, maintenance window), follow the guided defaults for a lab and record what you chose.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">Step 5: Create a Compute Engine VM to test connectivity<\/h3>\n\n\n\n<p>Create a small Linux VM in the <strong>same region<\/strong> and <strong>same VPC<\/strong>:<\/p>\n\n\n\n<pre><code class=\"language-bash\">gcloud compute instances create valkey-client-vm \\\n  --zone=\"$(gcloud config get-value compute\/zone)\" \\\n  --machine-type=e2-micro \\\n  --subnet=default \\\n  --scopes=https:\/\/www.googleapis.com\/auth\/cloud-platform\n<\/code><\/pre>\n\n\n\n<p><strong>Expected outcome:<\/strong> VM is created and running.<\/p>\n\n\n\n<p>Verification:<\/p>\n\n\n\n<pre><code class=\"language-bash\">gcloud compute instances list --filter=\"name=valkey-client-vm\"\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">Step 6: Install a Valkey\/Redis CLI client on the VM<\/h3>\n\n\n\n<p>SSH into the VM:<\/p>\n\n\n\n<pre><code class=\"language-bash\">gcloud compute ssh valkey-client-vm --zone=\"$(gcloud config get-value compute\/zone)\"\n<\/code><\/pre>\n\n\n\n<p>Install <code>redis-cli<\/code> (package name varies by distro). 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><strong>Expected outcome:<\/strong> <code>redis-cli<\/code> is installed.<\/p>\n\n\n\n<blockquote>\n<p>Many environments use <code>redis-cli<\/code> to connect to Valkey because Valkey maintains protocol compatibility for common operations. If you need a Valkey-specific CLI, <strong>verify in official docs<\/strong> and the Valkey project documentation.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">Step 7: Connect to the Memorystore for Valkey endpoint (private IP)<\/h3>\n\n\n\n<p>From the VM, connect to the endpoint:<\/p>\n\n\n\n<pre><code class=\"language-bash\">VALKEY_IP=\"YOUR_INSTANCE_PRIVATE_IP\"\nVALKEY_PORT=\"YOUR_INSTANCE_PORT\"   # often 6379, but use what the console shows\n\nredis-cli -h \"${VALKEY_IP}\" -p \"${VALKEY_PORT}\" PING\n<\/code><\/pre>\n\n\n\n<p><strong>Expected outcome:<\/strong> you receive <code>PONG<\/code>.<\/p>\n\n\n\n<p>If your instance requires AUTH, you may need:<\/p>\n\n\n\n<pre><code class=\"language-bash\">redis-cli -h \"${VALKEY_IP}\" -p \"${VALKEY_PORT}\" -a \"YOUR_PASSWORD\" PING\n<\/code><\/pre>\n\n\n\n<p>If your instance requires TLS, you might need:<\/p>\n\n\n\n<pre><code class=\"language-bash\">redis-cli -h \"${VALKEY_IP}\" -p \"${VALKEY_PORT}\" --tls PING\n<\/code><\/pre>\n\n\n\n<blockquote>\n<p>Whether AUTH\/TLS are available\/required depends on your Memorystore for Valkey configuration\u2014<strong>verify in official docs<\/strong> and in the instance detail page.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">Step 8: Run basic operations (keys, TTL, atomic counter)<\/h3>\n\n\n\n<p>Run these commands from the <code>redis-cli<\/code> prompt (or as one-liners):<\/p>\n\n\n\n<p>1) Set a key with TTL:<\/p>\n\n\n\n<pre><code class=\"language-bash\">redis-cli -h \"${VALKEY_IP}\" -p \"${VALKEY_PORT}\" SET cache:hello \"world\" EX 60\nredis-cli -h \"${VALKEY_IP}\" -p \"${VALKEY_PORT}\" GET cache:hello\nredis-cli -h \"${VALKEY_IP}\" -p \"${VALKEY_PORT}\" TTL cache:hello\n<\/code><\/pre>\n\n\n\n<p><strong>Expected outcome:<\/strong>\n&#8211; <code>GET<\/code> returns <code>world<\/code>\n&#8211; <code>TTL<\/code> returns a number &lt;= 60<\/p>\n\n\n\n<p>2) Atomic counter (rate limit \/ metrics primitive):<\/p>\n\n\n\n<pre><code class=\"language-bash\">redis-cli -h \"${VALKEY_IP}\" -p \"${VALKEY_PORT}\" DEL counter:requests\nredis-cli -h \"${VALKEY_IP}\" -p \"${VALKEY_PORT}\" INCR counter:requests\nredis-cli -h \"${VALKEY_IP}\" -p \"${VALKEY_PORT}\" INCR counter:requests\nredis-cli -h \"${VALKEY_IP}\" -p \"${VALKEY_PORT}\" GET counter:requests\n<\/code><\/pre>\n\n\n\n<p><strong>Expected outcome:<\/strong> counter increments and returns <code>2<\/code>.<\/p>\n\n\n\n<p>3) Simple hash (session-like object):<\/p>\n\n\n\n<pre><code class=\"language-bash\">redis-cli -h \"${VALKEY_IP}\" -p \"${VALKEY_PORT}\" HSET sess:123 user_id 42 role \"basic\"\nredis-cli -h \"${VALKEY_IP}\" -p \"${VALKEY_PORT}\" HGETALL sess:123\n<\/code><\/pre>\n\n\n\n<p><strong>Expected outcome:<\/strong> returns the field\/value pairs.<\/p>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">Step 9: Add a firewall sanity check (if needed)<\/h3>\n\n\n\n<p>If you can\u2019t connect:\n&#8211; Memorystore endpoints are usually private and controlled by VPC firewall and routing.\n&#8211; Ensure your VM and the Memorystore instance are in the <strong>same VPC<\/strong> (and compatible region connectivity).\n&#8211; Check firewall rules allow egress from the VM to the instance IP\/port (internal traffic is often allowed by default, but org policies can restrict it).<\/p>\n\n\n\n<p>From the VM, test basic connectivity:<\/p>\n\n\n\n<pre><code class=\"language-bash\">nc -vz \"${VALKEY_IP}\" \"${VALKEY_PORT}\"\n<\/code><\/pre>\n\n\n\n<p><strong>Expected outcome:<\/strong> \u201csucceeded\u201d \/ \u201copen\u201d indication.<\/p>\n\n\n\n<p>If <code>nc<\/code> is missing:<\/p>\n\n\n\n<pre><code class=\"language-bash\">sudo apt-get install -y netcat-openbsd\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">Validation<\/h3>\n\n\n\n<p>Use the following checklist:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>[ ] Memorystore for Valkey instance status is <strong>Ready<\/strong>.<\/li>\n<li>[ ] Instance shows a private endpoint IP (and port).<\/li>\n<li>[ ] VM is in the same VPC\/subnet (or has valid routes) and same region or connected network.<\/li>\n<li>[ ] <code>redis-cli PING<\/code> returns <code>PONG<\/code>.<\/li>\n<li>[ ] Key set\/get works.<\/li>\n<li>[ ] TTL decreases over time.<\/li>\n<li>[ ] Counter increments atomically.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">Troubleshooting<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Error: <code>Could not connect to Redis at &lt;ip&gt;:&lt;port&gt;: Connection timed out<\/code><\/h4>\n\n\n\n<p>Common causes and fixes:\n&#8211; <strong>Wrong VPC \/ region mismatch:<\/strong> create the VM in the same VPC and region where the service is reachable.\n&#8211; <strong>Private Service Access not configured:<\/strong> complete PSA setup (Step 3) and retry instance creation if required.\n&#8211; <strong>Firewall restrictions:<\/strong> review VPC firewall rules and org policies; ensure internal traffic to the instance IP\/port is permitted.\n&#8211; <strong>Wrong endpoint\/port:<\/strong> copy the endpoint from the instance detail page.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Error: <code>(error) NOAUTH Authentication required.<\/code><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The instance requires AUTH.<\/li>\n<li>Use <code>redis-cli -a<\/code> or configure your app with the correct password\/secret.<\/li>\n<li>Store secrets in <strong>Secret Manager<\/strong> rather than in code.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Error: TLS-related connection failures<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If the instance requires TLS, you must use <code>--tls<\/code> and possibly provide CA\/certs depending on configuration.<\/li>\n<li>Confirm the instance\u2019s connection guidance in the official docs.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Error: Commands rejected \/ disabled<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Managed services sometimes disable administrative or dangerous commands (CONFIG, DEBUG, etc.).<\/li>\n<li>Re-check supported commands in the Memorystore for Valkey documentation.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">Cleanup<\/h3>\n\n\n\n<p>To avoid charges, delete resources when done.<\/p>\n\n\n\n<p>1) Exit the VM SSH session:<\/p>\n\n\n\n<pre><code class=\"language-bash\">exit\n<\/code><\/pre>\n\n\n\n<p>2) Delete the VM:<\/p>\n\n\n\n<pre><code class=\"language-bash\">gcloud compute instances delete valkey-client-vm \\\n  --zone=\"$(gcloud config get-value compute\/zone)\" --quiet\n<\/code><\/pre>\n\n\n\n<p>3) Delete the Memorystore for Valkey instance:\n&#8211; In Console: <strong>Memorystore \u2192 Memorystore for Valkey \u2192 valkey-lab \u2192 Delete<\/strong>\n&#8211; Or via CLI if the product provides a <code>gcloud<\/code> surface (<strong>verify in official docs<\/strong>).<\/p>\n\n\n\n<p>4) Optional: remove PSA reserved range and peering <strong>only if you created it solely for this lab<\/strong> and your org doesn\u2019t need it:<\/p>\n\n\n\n<pre><code class=\"language-bash\">gcloud services vpc-peerings delete \\\n  --service=servicenetworking.googleapis.com \\\n  --network=default\n\ngcloud compute addresses delete psa-managed-services --global --quiet\n<\/code><\/pre>\n\n\n\n<blockquote>\n<p>Be cautious: deleting PSA can break other managed services in the same VPC.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator\" \/>\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>Treat Memorystore for Valkey as a <strong>cache or ephemeral state store<\/strong>, not the system of record.<\/li>\n<li>Use a <strong>cache-aside\/read-through<\/strong> pattern:\n  1. Try cache\n  2. If miss, read from DB\/system of record\n  3. Populate cache with TTL<\/li>\n<li>Design for <strong>cache failure<\/strong>:<\/li>\n<li>Your app should degrade gracefully if the cache is unavailable.<\/li>\n<li>Implement backoff to avoid stampeding your database.<\/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>Use least privilege for admins:<\/li>\n<li>Separate roles for creating instances vs managing network connectivity.<\/li>\n<li>Use labels and IAM conditions (where appropriate) to reduce accidental changes.<\/li>\n<li>Store any credentials in <strong>Secret Manager<\/strong> and restrict access to the runtime service account.<\/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>Keep cache and clients in the <strong>same region<\/strong> to minimize latency and egress.<\/li>\n<li>Keep dev\/test instances small and <strong>delete when idle<\/strong>.<\/li>\n<li>Set TTLs; avoid \u201cnever expire\u201d unless you fully understand memory growth.<\/li>\n<li>Watch for eviction: evictions often mean \u201cyou\u2019re under-provisioned\u201d or \u201cTTL policy is wrong.\u201d<\/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 <strong>connection pooling<\/strong> in apps to reduce connection churn.<\/li>\n<li>Avoid large values; consider compression or splitting objects.<\/li>\n<li>Prefer hashes for structured objects to reduce key overhead (benchmark for your workload).<\/li>\n<li>Avoid expensive commands on large keyspaces (e.g., wildcard scans) unless you know the cost.<\/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>Choose HA options for production where available and appropriate.<\/li>\n<li>Keep timeouts and retries sane:<\/li>\n<li>Fast timeouts for cache operations.<\/li>\n<li>Circuit breakers to prevent cascade failures.<\/li>\n<li>Implement cache warmup strategies cautiously (avoid thundering herd).<\/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>Create dashboards and alerts for:<\/li>\n<li>Memory usage and eviction count<\/li>\n<li>Connections and connection errors<\/li>\n<li>CPU saturation indicators<\/li>\n<li>Track application-level cache metrics:<\/li>\n<li>hit rate \/ miss rate<\/li>\n<li>latency distributions<\/li>\n<li>error rate<\/li>\n<li>Plan maintenance:<\/li>\n<li>Understand maintenance windows\/behavior in the service docs.<\/li>\n<li>Run load tests after version upgrades in staging.<\/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 clear instance names: <code>valkey-&lt;env&gt;-&lt;app&gt;-&lt;region&gt;<\/code><\/li>\n<li>Apply labels: <code>env=prod<\/code>, <code>team=payments<\/code>, <code>cost_center=cc123<\/code><\/li>\n<li>Document:<\/li>\n<li>key naming conventions<\/li>\n<li>TTL policy per keyspace<\/li>\n<li>maximum value sizes<\/li>\n<li>fallback behavior when cache is down<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator\" \/>\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>Management plane<\/strong>: controlled by Google Cloud IAM (who can create\/delete\/resize).<\/li>\n<li><strong>Data plane<\/strong>: typically gated by private networking; may also support auth and\/or TLS depending on configuration. <strong>Verify in official docs<\/strong>.<\/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>Encryption at rest<\/strong>: Google Cloud services typically encrypt data at rest by default; confirm specifics for Memorystore for Valkey in the official docs.<\/li>\n<li><strong>Encryption in transit<\/strong>: if supported, enable TLS for clients; verify supported cipher suites and client configuration requirements.<\/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>Prefer <strong>private IP-only<\/strong> deployments.<\/li>\n<li>Restrict access using:<\/li>\n<li>VPC firewall rules<\/li>\n<li>subnet controls<\/li>\n<li>workload identity\/service accounts and network boundaries<\/li>\n<li>Use VPN\/Interconnect for on-prem access if needed, rather than public exposure.<\/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>Do not hardcode passwords in code or container images.<\/li>\n<li>Use <strong>Secret Manager<\/strong> and mount\/inject secrets at runtime.<\/li>\n<li>Rotate secrets when employees leave or when compromise is suspected.<\/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> for administrative actions:<\/li>\n<li>instance creation\/deletion<\/li>\n<li>configuration changes<\/li>\n<li>Keep audit logs in a centralized logging project if your org uses it.<\/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>Cache data can still include PII if you put it there.<\/li>\n<li>Apply data classification rules:<\/li>\n<li>Avoid caching sensitive personal data unless absolutely required.<\/li>\n<li>Use short TTLs and consider tokenization.<\/li>\n<li>Ensure access is restricted to only the services that need it.<\/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>Putting the cache on a network reachable from many unrelated services (\u201cflat network\u201d).<\/li>\n<li>Over-permissive IAM roles (developers with delete permissions in prod).<\/li>\n<li>Forgetting that caches can contain sensitive material (tokens, sessions).<\/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>Use separate instances per environment (dev\/stage\/prod).<\/li>\n<li>Use separate VPCs or at least separate subnets and firewall policies for prod.<\/li>\n<li>Enable AUTH\/TLS if supported and required by your security posture (verify exact support).<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">13. Limitations and Gotchas<\/h2>\n\n\n\n<blockquote>\n<p>This section lists common \u201cmanaged cache\u201d issues. Confirm service-specific details in the official Memorystore for Valkey docs.<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">Known limitations (typical)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Not intended as a durable primary datastore.<\/li>\n<li>Some administrative commands may be restricted in managed environments.<\/li>\n<li>Scaling operations can cause brief disruptions or require planning windows.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Quotas<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Instance count per project\/region.<\/li>\n<li>Maximum memory size per instance.<\/li>\n<li>Connection limits and throughput constraints.\nCheck <strong>Quotas<\/strong> and the service documentation.<\/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 may support Memorystore for Valkey or all tiers.<\/li>\n<li>Some features (HA, encryption in transit) may be region\/tier dependent.<\/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>Running multiple always-on instances across environments.<\/li>\n<li>Cross-region network egress if clients are not co-located.<\/li>\n<li>Forgotten dev instances left running.<\/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>Client compatibility: most Redis clients work, but confirm:<\/li>\n<li>supported commands<\/li>\n<li>any disabled commands<\/li>\n<li>version differences<\/li>\n<li>Lua scripting\/module support may be limited or unsupported\u2014verify.<\/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>Memory eviction can silently degrade correctness if the app assumes keys always exist.<\/li>\n<li>Cache stampede can overload the system of record when cache misses spike.<\/li>\n<li>Long-lived connections without keepalives can fail under network changes\u2014use sane reconnect logic.<\/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>Migrating from self-managed Redis\/Valkey may require:<\/li>\n<li>dump\/restore or application-level warmup<\/li>\n<li>TTL preservation strategy<\/li>\n<li>keyspace compatibility validation<\/li>\n<li>Migrating from Memorystore for Redis to Memorystore for Valkey:<\/li>\n<li>verify version\/command compatibility<\/li>\n<li>plan cutover to avoid session loss (or accept it if it\u2019s a cache)<\/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>Private connectivity prerequisites (PSA\/peering) are often the #1 stumbling block.<\/li>\n<li>Maintenance behavior and failover timing are service-defined\u2014review docs before production rollout.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">14. Comparison with Alternatives<\/h2>\n\n\n\n<p>Memorystore for Valkey is one option in the <strong>Databases<\/strong> toolkit on Google Cloud. Here are common alternatives.<\/p>\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 Redis<\/strong>: managed Redis engine (different from Valkey, but similar usage).<\/li>\n<li><strong>Memorystore for Memcached<\/strong>: simpler cache with no persistence and different semantics.<\/li>\n<li><strong>Cloud SQL \/ Spanner \/ Firestore<\/strong>: systems of record (not caches).<\/li>\n<li><strong>Bigtable<\/strong>: wide-column datastore for high throughput, not an in-memory cache.<\/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<\/strong> (Redis engine; AWS also supports Valkey in some contexts\u2014verify current offerings).<\/li>\n<li><strong>Azure Cache for Redis<\/strong> (Redis engine, managed).<\/li>\n<li>These are good comparisons for multi-cloud decision-making, but service details differ.<\/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>Run Valkey on:<\/li>\n<li>Compute Engine VMs (manual\/automated)<\/li>\n<li>GKE (StatefulSets with persistent volumes)<\/li>\n<li>Pros: full control, custom modules, specialized tuning.<\/li>\n<li>Cons: operations, patching, HA, backups, incident response burden.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Comparison table<\/h3>\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 Valkey (Google Cloud)<\/td>\n<td>Managed Valkey-based caching and ephemeral state<\/td>\n<td>Managed ops, private VPC access, fast latency, integrates with Google Cloud tooling<\/td>\n<td>Not a system of record; some features\/commands may be restricted; region\/tier limits<\/td>\n<td>You want managed Valkey on Google Cloud with minimal ops<\/td>\n<\/tr>\n<tr>\n<td>Memorystore for Redis (Google Cloud)<\/td>\n<td>Teams standardized on Redis engine<\/td>\n<td>Mature managed Redis option, similar client ecosystem<\/td>\n<td>Engine choice differs from Valkey; feature set differs by product\/version<\/td>\n<td>You need Redis engine specifically or your org already uses it<\/td>\n<\/tr>\n<tr>\n<td>Memorystore for Memcached (Google Cloud)<\/td>\n<td>Simple, distributed cache with minimal features<\/td>\n<td>Very simple, good for pure caching<\/td>\n<td>No rich data structures like Valkey\/Redis; different client model<\/td>\n<td>You only need a basic cache and simplicity matters<\/td>\n<\/tr>\n<tr>\n<td>Self-managed Valkey on GKE\/VMs<\/td>\n<td>Full control and customization<\/td>\n<td>Full control over config\/modules, topology, versions<\/td>\n<td>Highest ops burden; harder HA and upgrades<\/td>\n<td>You require custom features or cannot use managed service constraints<\/td>\n<\/tr>\n<tr>\n<td>Cloud SQL \/ Spanner \/ Firestore<\/td>\n<td>Durable primary storage<\/td>\n<td>Strong durability, query capabilities, transactions (varies)<\/td>\n<td>Slower than in-memory; higher latency and cost per request for cache-like loads<\/td>\n<td>You need a system of record, not a cache<\/td>\n<\/tr>\n<tr>\n<td>AWS ElastiCache \/ Azure Cache for Redis<\/td>\n<td>Non-Google Cloud environments<\/td>\n<td>Managed caching on those clouds<\/td>\n<td>Different networking\/IAM\/pricing; migration complexity<\/td>\n<td>You are on AWS\/Azure or doing multi-cloud<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator\" \/>\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: Global e-commerce platform<\/h3>\n\n\n\n<p><strong>Problem<\/strong>\nA retail platform experiences high load on its product catalog database during promotions. Product pages and search results trigger repeated reads with similar parameters, leading to database saturation and increased latency.<\/p>\n\n\n\n<p><strong>Proposed architecture<\/strong>\n&#8211; System of record: Cloud SQL or Spanner (depending on scale\/consistency needs)\n&#8211; Cache: Memorystore for Valkey in the same region as app compute\n&#8211; Application tier: GKE services\n&#8211; Pattern: cache-aside with TTL and stampede protection<\/p>\n\n\n\n<p><strong>Why Memorystore for Valkey was chosen<\/strong>\n&#8211; Private VPC endpoint reduces exposure.\n&#8211; Managed operations reduce the need for the SRE team to operate cache clusters.\n&#8211; Valkey\u2019s data structures support caching, counters, and short-lived locks for request coalescing.<\/p>\n\n\n\n<p><strong>Expected outcomes<\/strong>\n&#8211; Lower database QPS during peak events.\n&#8211; Improved p95\/p99 latency for product endpoints.\n&#8211; Reduced operational toil and faster scaling for cache capacity.<\/p>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">Startup\/small-team example: SaaS analytics dashboard<\/h3>\n\n\n\n<p><strong>Problem<\/strong>\nA small team serves dashboards that aggregate recent activity. Queries are expensive; users frequently reload pages, generating redundant compute and database reads.<\/p>\n\n\n\n<p><strong>Proposed architecture<\/strong>\n&#8211; Backend on Cloud Run\n&#8211; Memorystore for Valkey accessed via Serverless VPC Access\n&#8211; Cache keys include tenant + query hash, TTL 30\u2013120 seconds\n&#8211; Background jobs pre-warm popular queries<\/p>\n\n\n\n<p><strong>Why Memorystore for Valkey was chosen<\/strong>\n&#8211; Quick provisioning without operating stateful clusters.\n&#8211; Predictable low latency for common dashboard queries.\n&#8211; Easy to implement TTL-based caching without changing the system of record.<\/p>\n\n\n\n<p><strong>Expected outcomes<\/strong>\n&#8211; Reduced compute and database costs.\n&#8211; Faster dashboard load times.\n&#8211; Better user experience without overengineering.<\/p>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">16. FAQ<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1) Is Memorystore for Valkey a database or a cache?<\/h3>\n\n\n\n<p>It\u2019s in the <strong>Databases<\/strong> category on Google Cloud, but functionally it\u2019s best treated as an <strong>in-memory datastore<\/strong> for caching and ephemeral state\u2014not as a durable primary database.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2) What is Valkey?<\/h3>\n\n\n\n<p>Valkey is an open-source, community-driven in-memory key-value datastore that is protocol-compatible with Redis for many use cases. See the Valkey project for engine details: https:\/\/valkey.io\/<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3) Can I use my existing Redis client libraries?<\/h3>\n\n\n\n<p>Often yes, because Valkey is designed to be compatible with the Redis protocol for common operations. You must still validate command compatibility and any managed-service restrictions.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4) Does Memorystore for Valkey support TLS?<\/h3>\n\n\n\n<p>It may, depending on tier\/feature availability. Check the instance\u2019s connection settings and the official docs for \u201cin-transit encryption\u201d or TLS guidance.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">5) Does it support AUTH\/password authentication?<\/h3>\n\n\n\n<p>It may, depending on configuration. If enabled, store secrets in Secret Manager and rotate them periodically.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">6) Is Memorystore for Valkey accessible from the public internet?<\/h3>\n\n\n\n<p>Typically, managed Memorystore endpoints are designed for <strong>private VPC access<\/strong>. Public exposure is generally not recommended. Verify official docs for supported connectivity models.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">7) Can Cloud Run connect to Memorystore for Valkey?<\/h3>\n\n\n\n<p>Commonly yes using <strong>Serverless VPC Access<\/strong> to reach private IPs. Verify the supported networking pattern for your region and configure the connector\/subnet accordingly.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">8) How do I choose an instance size?<\/h3>\n\n\n\n<p>Start from:\n&#8211; expected working set size (hot keys in memory)\n&#8211; value sizes and overhead\n&#8211; peak QPS and connection count\nThen load test, observe eviction and latency, and resize accordingly.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">9) What happens if the cache goes down?<\/h3>\n\n\n\n<p>Your application should fall back to the system of record (database) and degrade gracefully. Add circuit breakers and request coalescing to avoid stampedes.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">10) Is Memorystore for Valkey suitable for storing sessions?<\/h3>\n\n\n\n<p>Yes, sessions are a common use case. Use TTLs, key namespaces, and plan for cache loss (sessions may be invalidated if cache is flushed or lost).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">11) Can I run pub\/sub workloads on it?<\/h3>\n\n\n\n<p>Valkey\/Redis pub\/sub can work for ephemeral signaling, but it is not a durable messaging system. For durable messaging, use Pub\/Sub.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">12) How do I monitor cache health?<\/h3>\n\n\n\n<p>Use Cloud Monitoring dashboards\/alerts plus application-level metrics (hit rate, latency, error rate). Also monitor evictions and memory pressure.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">13) How do I prevent cache stampede?<\/h3>\n\n\n\n<p>Use short-lived locks, request coalescing, jittered TTLs, and \u201cstale-while-revalidate\u201d approaches when appropriate.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">14) Does Memorystore for Valkey support persistence or backups?<\/h3>\n\n\n\n<p>Some managed cache offerings support persistence features, but availability and behavior can differ. <strong>Verify in official docs<\/strong> for Memorystore for Valkey persistence\/backups (if offered) and do not rely on it as your sole durability mechanism.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">15) What is the difference between Memorystore for Valkey and Memorystore for Redis?<\/h3>\n\n\n\n<p>They use different underlying engines (Valkey vs Redis). Feature sets, versions, and support policies can differ. Choose based on engine preference, compatibility requirements, and Google Cloud\u2019s documented capabilities.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">16) Can I use it across regions?<\/h3>\n\n\n\n<p>Technically you can connect across regions if networking allows, but it increases latency and can incur egress charges. Prefer same-region deployments.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">17) Is it suitable for distributed locks?<\/h3>\n\n\n\n<p>It can be used with careful patterns, but distributed locking is easy to get wrong. Validate correctness, consider failure modes, and prefer purpose-built coordination systems when required.<\/p>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">17. Top Online Resources to Learn Memorystore for Valkey<\/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 documentation (entry point) \u2013 https:\/\/cloud.google.com\/memorystore\/docs<\/td>\n<td>Starting point for Memorystore products, concepts, and operational guidance<\/td>\n<\/tr>\n<tr>\n<td>Official documentation<\/td>\n<td>Memorystore for Valkey docs (product-specific) \u2013 Verify in official docs<\/td>\n<td>The authoritative source for Valkey-specific features, connection methods, and limits<\/td>\n<\/tr>\n<tr>\n<td>Official pricing<\/td>\n<td>Memorystore pricing \u2013 https:\/\/cloud.google.com\/memorystore\/pricing<\/td>\n<td>Official SKUs and pricing model<\/td>\n<\/tr>\n<tr>\n<td>Official calculator<\/td>\n<td>Google Cloud Pricing Calculator \u2013 https:\/\/cloud.google.com\/products\/calculator<\/td>\n<td>Build region-accurate cost estimates<\/td>\n<\/tr>\n<tr>\n<td>Official networking<\/td>\n<td>Private Service Access \/ Service Networking \u2013 https:\/\/cloud.google.com\/vpc\/docs\/private-services-access<\/td>\n<td>Common prerequisite for private managed services connectivity<\/td>\n<\/tr>\n<tr>\n<td>Official observability<\/td>\n<td>Cloud Monitoring \u2013 https:\/\/cloud.google.com\/monitoring\/docs<\/td>\n<td>Metrics, dashboards, and alerting patterns<\/td>\n<\/tr>\n<tr>\n<td>Official logging\/audit<\/td>\n<td>Cloud Audit Logs \u2013 https:\/\/cloud.google.com\/logging\/docs\/audit<\/td>\n<td>Track administrative actions for governance and security<\/td>\n<\/tr>\n<tr>\n<td>Architecture guidance<\/td>\n<td>Google Cloud Architecture Center \u2013 https:\/\/cloud.google.com\/architecture<\/td>\n<td>Reference architectures; search for caching patterns and Memorystore<\/td>\n<\/tr>\n<tr>\n<td>Engine docs<\/td>\n<td>Valkey official site \u2013 https:\/\/valkey.io\/<\/td>\n<td>Engine behavior, command reference direction, ecosystem links<\/td>\n<\/tr>\n<tr>\n<td>Community\/learning<\/td>\n<td>Redis CLI usage reference (general) \u2013 verify current docs<\/td>\n<td>Practical CLI patterns apply to Valkey for many commands<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator\" \/>\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, platform teams<\/td>\n<td>Google Cloud operations, DevOps tooling, cloud labs (check course catalog)<\/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 fundamentals, SCM, cloud basics, hands-on practices<\/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 ops practitioners<\/td>\n<td>Operations, monitoring, reliability, cloud runbooks<\/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, operations teams<\/td>\n<td>SRE principles, monitoring\/alerting, incident response, reliability engineering<\/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 adopting AIOps<\/td>\n<td>AIOps concepts, automation, observability-driven operations<\/td>\n<td>check website<\/td>\n<td>https:\/\/www.aiopsschool.com\/<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator\" \/>\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 (verify offerings)<\/td>\n<td>Beginners to working engineers<\/td>\n<td>https:\/\/www.rajeshkumar.xyz\/<\/td>\n<\/tr>\n<tr>\n<td>devopstrainer.in<\/td>\n<td>DevOps training and workshops (verify offerings)<\/td>\n<td>DevOps engineers, students<\/td>\n<td>https:\/\/www.devopstrainer.in\/<\/td>\n<\/tr>\n<tr>\n<td>devopsfreelancer.com<\/td>\n<td>Freelance DevOps help\/training resources (verify offerings)<\/td>\n<td>Teams needing short-term guidance<\/td>\n<td>https:\/\/www.devopsfreelancer.com\/<\/td>\n<\/tr>\n<tr>\n<td>devopssupport.in<\/td>\n<td>DevOps support and enablement resources (verify offerings)<\/td>\n<td>Ops teams and SMBs<\/td>\n<td>https:\/\/www.devopssupport.in\/<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator\" \/>\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 (verify exact services)<\/td>\n<td>Architecture, implementation, migration planning<\/td>\n<td>Cache architecture review; VPC\/private connectivity setup; performance tuning<\/td>\n<td>https:\/\/www.cotocus.com\/<\/td>\n<\/tr>\n<tr>\n<td>DevOpsSchool.com<\/td>\n<td>DevOps consulting and training (verify exact services)<\/td>\n<td>Enablement, platform practices, cloud ops<\/td>\n<td>Building reference architectures; CI\/CD enablement; SRE practices around managed caches<\/td>\n<td>https:\/\/www.devopsschool.com\/<\/td>\n<\/tr>\n<tr>\n<td>DEVOPSCONSULTING.IN<\/td>\n<td>DevOps consulting (verify exact services)<\/td>\n<td>Cloud adoption, operational maturity<\/td>\n<td>Designing monitoring\/alerting; governance\/IAM; production readiness reviews<\/td>\n<td>https:\/\/www.devopsconsulting.in\/<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator\" \/>\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 Valkey<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Google Cloud fundamentals:<\/li>\n<li>Projects, billing, IAM<\/li>\n<li>VPC networking, subnets, firewall rules<\/li>\n<li>Basic Linux and CLI skills (Cloud Shell, SSH)<\/li>\n<li>Caching concepts:<\/li>\n<li>TTL, eviction, cache-aside\/read-through<\/li>\n<li>cache stampede and thundering herd<\/li>\n<li>Basic app performance:<\/li>\n<li>latency, p95\/p99, connection pooling<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">What to learn after Memorystore for Valkey<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Production reliability engineering:<\/li>\n<li>SLOs\/SLIs for cache hit rate and latency<\/li>\n<li>incident response and postmortems<\/li>\n<li>Advanced Google Cloud networking:<\/li>\n<li>Private Service Access vs Private Service Connect (understand which applies)<\/li>\n<li>Hybrid connectivity (VPN\/Interconnect)<\/li>\n<li>Observability:<\/li>\n<li>Cloud Monitoring alert design<\/li>\n<li>log-based metrics and tracing (Cloud Trace \/ OpenTelemetry)<\/li>\n<li>Data architecture:<\/li>\n<li>choosing the right system of record (Spanner, Cloud SQL, Firestore)<\/li>\n<li>designing cache invalidation strategies<\/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 \/ Production Engineer<\/li>\n<li>Backend Engineer \/ API Engineer<\/li>\n<li>Solutions Architect<\/li>\n<li>DevOps Engineer<\/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. Commonly relevant ones include:\n&#8211; Associate Cloud Engineer\n&#8211; Professional Cloud Architect\n&#8211; Professional Cloud DevOps Engineer<\/p>\n\n\n\n<p>For the latest list: 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<ul class=\"wp-block-list\">\n<li>Build a read-through cache for a simple product catalog API (Cloud Run + Cloud SQL + Memorystore for Valkey).<\/li>\n<li>Implement rate limiting middleware using atomic counters.<\/li>\n<li>Build a leaderboard microservice using sorted sets.<\/li>\n<li>Add cache stampede protection and measure DB load reduction.<\/li>\n<li>Create dashboards and alerts for eviction rate and cache hit ratio (app metrics + Cloud Monitoring).<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">22. Glossary<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Valkey<\/strong>: Open-source in-memory key-value datastore compatible with the Redis protocol for many use cases.<\/li>\n<li><strong>Cache-aside<\/strong>: Application pattern where the app checks cache first; on miss it reads from DB and populates cache.<\/li>\n<li><strong>TTL (Time To Live)<\/strong>: Expiration time for a key; after TTL elapses the key is removed.<\/li>\n<li><strong>Eviction<\/strong>: When the datastore removes keys to free memory (often due to max memory constraints and eviction policy).<\/li>\n<li><strong>Private IP<\/strong>: Internal IP address reachable only within a VPC (or connected networks).<\/li>\n<li><strong>VPC (Virtual Private Cloud)<\/strong>: Private network construct in Google Cloud where subnets, routes, and firewall rules live.<\/li>\n<li><strong>Private Service Access (PSA)<\/strong>: A private networking method to access Google-managed services over internal IPs (often via service networking peering).<\/li>\n<li><strong>Service Networking API<\/strong>: Google API used to configure private service connections\/peering for managed services.<\/li>\n<li><strong>Control plane<\/strong>: Management layer (create\/resize\/delete) governed by IAM and APIs.<\/li>\n<li><strong>Data plane<\/strong>: The actual traffic path for Valkey commands (GET\/SET, etc.).<\/li>\n<li><strong>p95\/p99 latency<\/strong>: 95th\/99th percentile latency; important for user-perceived performance.<\/li>\n<li><strong>Stampede \/ Thundering herd<\/strong>: Many requests concurrently recompute\/fetch data due to cache miss, overloading systems.<\/li>\n<li><strong>System of record<\/strong>: Primary durable database where authoritative data is stored (Cloud SQL, Spanner, Firestore, etc.).<\/li>\n<li><strong>Serverless VPC Access<\/strong>: Mechanism for Cloud Run\/functions to reach resources with private IPs in a VPC.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">23. Summary<\/h2>\n\n\n\n<p>Memorystore for Valkey is Google Cloud\u2019s managed Valkey-based in-memory datastore service in the <strong>Databases<\/strong> category. It is designed for low-latency caching and ephemeral state\u2014helping teams reduce database load, speed up APIs, and simplify operations compared to self-managed Valkey clusters.<\/p>\n\n\n\n<p>Architecturally, it fits as a private, VPC-accessible cache in front of a durable system of record. Cost is primarily driven by provisioned capacity, tier\/availability configuration, and how many instances you keep running\u2014plus potential network egress if you connect across regions. From a security standpoint, prioritize private networking, least-privilege IAM for administrative access, and (when supported) enable data-plane protections like AUTH\/TLS and store secrets in Secret Manager.<\/p>\n\n\n\n<p>Use Memorystore for Valkey when you need fast key-value operations with managed operations on Google Cloud. Avoid using it as your primary durable datastore. As a next step, build a small service that implements a cache-aside pattern (Cloud Run or GKE) and add monitoring\/alerts for eviction rate and latency so you can operate it like a production-grade platform component.<\/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-684","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\/684","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=684"}],"version-history":[{"count":0,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts\/684\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/media?parent=684"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/categories?post=684"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/tags?post=684"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}