{"id":90,"date":"2014-12-17T16:03:37","date_gmt":"2014-12-17T16:03:37","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/expiry-callbacks-couchbase-server\/"},"modified":"2014-12-17T16:03:37","modified_gmt":"2014-12-17T16:03:37","slug":"expiry-callbacks-couchbase-server","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/expiry-callbacks-couchbase-server\/","title":{"rendered":"Couchbase Labs Expiry Callbacks"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\">TTL&#8217;s and Expiry Notification<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Couchbase includes a <a href=\"https:\/\/www.couchbase.com\/blog\/how-to-manage-ttl-with-couchbase-n1ql\/\">TTL<\/a> (Time To Live) as part of the meta data fields for each document. \u00a0All of the client SDK&#8217;s includes support for setting\/querying\/touching this value. \u00a0 The value is set as the &#8220;number of seconds a document should live&#8221; for documents that are to expire in 30 days or less. \u00a0For values longer than 30 days a unix epoch time value must be passed. \u00a0TTL&#8217;s are often used in high performance session stores and caching applications. \u00a0 What happens to a session when a document expires can be problematic and cumbersome to manage at the application tier. \u00a0 What if the high performance and flexibility of Couchbase Server were leveraged to provide callbacks for document expiration? \u00a0 \u00a0Introducing &#8220;expiry-notifier&#8221; from Couchbase Labs. \u00a0 The application, source code, and\u00a0instructions can be downloaded from <a href=\"https:\/\/github.com\/couchbaselabs\/expiry-notifier\">the couchbaselabs repo on github.<\/a>**<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Couchbase Labs expiry-notifier<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The application runs a small application instance of node.js and express. \u00a0 It is configured and accessed through a REST API. \u00a0Why Node.js? \u00a0 Node.js is a well supported application platform for Couchbase, is incredibly lightweight, manages its footprint efficiently and is well suited for RESTful applications. \u00a0Expiry-notifier can be called directly or can be configured to automatically perform expiry callbacks within a given time interval. The expiry callback functionality returns meta id&#8217;s and expiration time (or seconds until expiration) for documents that will expire within a specified time window.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example, to receive an expiry callback from an application that will\u00a0directly poll\u00a0the service,\u00a0a document is defined\u00a0in Couchbase with a 300 second expiration as:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><span><br>\nKey (meta.id): triumph<\/span><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><span>{<br>\n&#8220;value&#8221;: &#8220;1966 Triumph Spitfire Mark II 4 speed with overdrive and twin Weber carburetors.&#8221;<br>\n}<\/span><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If expiry-notifier is running, relative time has been set to true (more on this in a second), and after 10 seconds the REST endpoint is called to poll for expiry callbacks:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span><strong>https:\/\/servername:3000\/poll\/300<\/strong><\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A JSON object will be returned:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><span>{triumph:290}<\/span><\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span>How expiry-notifier Works<\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Expiry-notifier can be run from any server that has node.js installed. \u00a0 After expiry-notifier is installed (instructions can be found <a href=\"https:\/\/github.com\/couchbaselabs\/expiry-notifier\">at the couchbaselabs repo on github<\/a>), the application needs to be started. \u00a0From the root directory where the application is installed, run<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span><strong>&#8220;npm start&#8221;<\/strong><\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">By default the application will run using port 3000. \u00a0 To test if the application is running, call the following REST command:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span><strong>&#8220;https:\/\/:3000\/status&#8221;<strong><strong><strong><strong>???<\/strong><\/strong><\/strong><\/strong><\/strong><strong><strong><strong>???<\/strong><\/strong><\/strong><\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To configure the service to communicate with a couchbase cluster, call the following REST command:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span><strong>&#8220;https:\/\/:3000\/setup\/server\/192.168.60.101\/8091\/beer-sample&#8221;<\/strong><\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The above REST command is defined as:\u00a0<strong><span>\/setup\/server\/:server\/:port\/:bucket [RETURNS: {JSON OBJECT} with status change]. \u00a0<\/span><\/strong><span>Calling this REST command performs the following: <\/span><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Instantiates the smart client to communicate to the Couchbase cluster<\/li>\n\n\n<li>Sets up a lightweight index in couchbase that holds meta data for expiry time only.<\/li>\n\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">To setup an endpoint for the service to send expiry callbacks to an application server use the following REST command:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span><strong>&#8220;https:\/\/:3000\/setup\/endpoint\/\/3000\/receive_callback&#8221;<\/strong><\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The above REST command is defined as: <strong><span>\/setup\/endpoint\/:hostname\/:port\/:path\/ [RETURNS: {JSON OBJECT} with status change] <\/span><\/strong>Note: the &#8220;https&#8221; flag is only used if expiry-notifier is to send callbacks over the https protocol. \u00a0Refer to the documentation for more specific information.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To begin sending callbacks to the above defined endpoint for documents that are set to expire within the next 30 seconds, and each 30 seconds thereafter use the following REST command :<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><span>&#8220;https:\/\/:3000\/setup\/poll\/30\/loop&#8221;<\/span><\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The above REST command is defined as:<span><span><strong>\/setup\/poll\/:interval\/:loop [RETURNS: {JSON OBJECT} with status change]<\/strong><\/span> This command will send a JSON object of meta id&#8217;s and their expiration in UNIX epoch time (number of seconds after 1\/1\/1970 that the document is set to expire). \u00a0If the number of seconds until the document expires are preferred, use the command below.<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To return the number of seconds until a document expires instead of the UNIX epoch time use the following command:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span><strong>&#8220;https:\/\/:3000\/setup\/relative\/true&#8221;<\/strong><\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The above REST command is defined as:\u00a0<span><strong>\/setup\/relative\/:bool [RETURNS: {JSON OBJECT} with status change]<\/strong><\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><span>** Disclaimer: Couchbase Labs provides experimental code for research and development purposes only. \u00a0 Code and applications from Couchbase Labs are not supported under any Couchbase Support Agreement and are provided as is with no warranty of any kind. \u00a0<\/span><\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>TTL&#8217;s and Expiry Notification Couchbase includes a TTL (Time To Live) as part of the meta data fields for each document. \u00a0All of the client SDK&#8217;s includes support for setting\/querying\/touching this value. \u00a0 The value is set as the &#8220;number of seconds a document should live&#8221; for documents that are to expire in 30 days [&hellip;]<\/p>\n","protected":false},"author":20,"featured_media":18,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"_acf":"","footnotes":""},"categories":[17,49],"tags":[],"ppma_author":[50],"class_list":["post-90","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-performance","category-node-js"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.6 (Yoast SEO v27.6) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Couchbase Labs Expiry Callbacks - The Couchbase Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/es\/expiry-callbacks-couchbase-server\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Couchbase Labs Expiry Callbacks\" \/>\n<meta property=\"og:description\" content=\"TTL&#8217;s and Expiry Notification Couchbase includes a TTL (Time To Live) as part of the meta data fields for each document. \u00a0All of the client SDK&#8217;s includes support for setting\/querying\/touching this value. \u00a0 The value is set as the &#8220;number of seconds a document should live&#8221; for documents that are to expire in 30 days [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/expiry-callbacks-couchbase-server\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2014-12-17T16:03:37+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/couchbase-nosql-dbaas.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1800\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Todd Greenstein\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@todd_greenstein\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Todd Greenstein\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/expiry-callbacks-couchbase-server\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/expiry-callbacks-couchbase-server\\\/\"},\"author\":{\"name\":\"Todd Greenstein\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/64b5d1e5969768c5d63c11c696951ed3\"},\"headline\":\"Couchbase Labs Expiry Callbacks\",\"datePublished\":\"2014-12-17T16:03:37+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/expiry-callbacks-couchbase-server\\\/\"},\"wordCount\":702,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/expiry-callbacks-couchbase-server\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/05\\\/couchbase-nosql-dbaas.png\",\"articleSection\":[\"High Performance\",\"Node.js\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/expiry-callbacks-couchbase-server\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/expiry-callbacks-couchbase-server\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/expiry-callbacks-couchbase-server\\\/\",\"name\":\"Couchbase Labs Expiry Callbacks - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/expiry-callbacks-couchbase-server\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/expiry-callbacks-couchbase-server\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/05\\\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2014-12-17T16:03:37+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/expiry-callbacks-couchbase-server\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/expiry-callbacks-couchbase-server\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/expiry-callbacks-couchbase-server\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/05\\\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/05\\\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/expiry-callbacks-couchbase-server\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Couchbase Labs Expiry Callbacks\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/06\\\/logo.svg\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2026\\\/06\\\/logo.svg\",\"width\":\"1024\",\"height\":\"1024\",\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/64b5d1e5969768c5d63c11c696951ed3\",\"name\":\"Todd Greenstein\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f230045f7f6e636cf01abbd35f1cbf66a1206fbe149a0d4f0bbdd992c646257d?s=96&d=mm&r=gabfbe093983052aa28595343c19888ce\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f230045f7f6e636cf01abbd35f1cbf66a1206fbe149a0d4f0bbdd992c646257d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f230045f7f6e636cf01abbd35f1cbf66a1206fbe149a0d4f0bbdd992c646257d?s=96&d=mm&r=g\",\"caption\":\"Todd Greenstein\"},\"description\":\"Todd Greenstein is a Solution Architect at Couchbase. Todd is specialize in API design, architecture, data modeling, nodejs and golang development.\",\"sameAs\":[\"https:\\\/\\\/x.com\\\/todd_greenstein\"],\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/es\\\/author\\\/todd-greenstein\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Couchbase Labs Expiry Callbacks - The Couchbase Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/es\/expiry-callbacks-couchbase-server\/","og_locale":"es_MX","og_type":"article","og_title":"Couchbase Labs Expiry Callbacks","og_description":"TTL&#8217;s and Expiry Notification Couchbase includes a TTL (Time To Live) as part of the meta data fields for each document. \u00a0All of the client SDK&#8217;s includes support for setting\/querying\/touching this value. \u00a0 The value is set as the &#8220;number of seconds a document should live&#8221; for documents that are to expire in 30 days [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/es\/expiry-callbacks-couchbase-server\/","og_site_name":"The Couchbase Blog","article_published_time":"2014-12-17T16:03:37+00:00","og_image":[{"width":1800,"height":630,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/couchbase-nosql-dbaas.png","type":"image\/png"}],"author":"Todd Greenstein","twitter_card":"summary_large_image","twitter_creator":"@todd_greenstein","twitter_misc":{"Written by":"Todd Greenstein","Est. reading time":"3 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/expiry-callbacks-couchbase-server\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/expiry-callbacks-couchbase-server\/"},"author":{"name":"Todd Greenstein","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/64b5d1e5969768c5d63c11c696951ed3"},"headline":"Couchbase Labs Expiry Callbacks","datePublished":"2014-12-17T16:03:37+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/expiry-callbacks-couchbase-server\/"},"wordCount":702,"commentCount":1,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/expiry-callbacks-couchbase-server\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/couchbase-nosql-dbaas.png","articleSection":["High Performance","Node.js"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/expiry-callbacks-couchbase-server\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/expiry-callbacks-couchbase-server\/","url":"https:\/\/www.couchbase.com\/blog\/expiry-callbacks-couchbase-server\/","name":"Couchbase Labs Expiry Callbacks - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/expiry-callbacks-couchbase-server\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/expiry-callbacks-couchbase-server\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/couchbase-nosql-dbaas.png","datePublished":"2014-12-17T16:03:37+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/expiry-callbacks-couchbase-server\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/expiry-callbacks-couchbase-server\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/expiry-callbacks-couchbase-server\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/05\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/expiry-callbacks-couchbase-server\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Couchbase Labs Expiry Callbacks"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"The Couchbase Blog","description":"Couchbase, the NoSQL Database","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"The Couchbase Blog","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/06\/logo.svg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/5\/2026\/06\/logo.svg","width":"1024","height":"1024","caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/64b5d1e5969768c5d63c11c696951ed3","name":"Todd Greenstein","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/f230045f7f6e636cf01abbd35f1cbf66a1206fbe149a0d4f0bbdd992c646257d?s=96&d=mm&r=gabfbe093983052aa28595343c19888ce","url":"https:\/\/secure.gravatar.com\/avatar\/f230045f7f6e636cf01abbd35f1cbf66a1206fbe149a0d4f0bbdd992c646257d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f230045f7f6e636cf01abbd35f1cbf66a1206fbe149a0d4f0bbdd992c646257d?s=96&d=mm&r=g","caption":"Todd Greenstein"},"description":"Todd Greenstein is a Solution Architect at Couchbase. Todd is specialize in API design, architecture, data modeling, nodejs and golang development.","sameAs":["https:\/\/x.com\/todd_greenstein"],"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/todd-greenstein\/"}]}},"acf":[],"authors":[{"term_id":50,"user_id":20,"is_guest":0,"slug":"todd-greenstein","display_name":"Todd Greenstein","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/?s=96&d=mm&r=g","author_category":"","first_name":"Todd","last_name":"Greenstein","user_url":"","job_title":"","description":"Todd Greenstein is a Solution Architect at Couchbase. Todd is  specialize in API design, architecture, data modeling, nodejs and golang development."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/90","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/20"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=90"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/90\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/18"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=90"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=90"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=90"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=90"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}