{"id":1605,"date":"2014-12-17T16:03:37","date_gmt":"2014-12-17T16:03:37","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=1605"},"modified":"2025-06-13T23:50:04","modified_gmt":"2025-06-14T06:50:04","slug":"expiry-callbacks-couchbase-server","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/expiry-callbacks-couchbase-server\/","title":{"rendered":"Callbacks de expira\u00e7\u00e3o do Couchbase Labs"},"content":{"rendered":"<h3>TTLs e notifica\u00e7\u00e3o de expira\u00e7\u00e3o<\/h3>\n<p>O Couchbase inclui um <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/how-to-manage-ttl-with-couchbase-n1ql\/\">TTL<\/a> (Time To Live) como parte dos campos de metadados de cada documento.  Todos os SDKs do cliente incluem suporte para definir\/consultar\/tocar esse valor.   O valor \u00e9 definido como o \"n\u00famero de segundos que um documento deve durar\" para documentos que devem expirar em 30 dias ou menos.  Para valores superiores a 30 dias, deve ser passado um valor de tempo de \u00e9poca unix.  Os TTLs s\u00e3o frequentemente usados em armazenamentos de sess\u00e3o de alto desempenho e aplicativos de cache.   O que acontece com uma sess\u00e3o quando um documento expira pode ser problem\u00e1tico e complicado de gerenciar na camada do aplicativo.   E se o alto desempenho e a flexibilidade do Couchbase Server fossem aproveitados para fornecer retornos de chamada para a expira\u00e7\u00e3o de documentos?    Apresentamos o \"expiry-notifier\" do Couchbase Labs.   O aplicativo, o c\u00f3digo-fonte e as instru\u00e7\u00f5es podem ser baixados em <a href=\"https:\/\/github.com\/couchbaselabs\/expiry-notifier\">o reposit\u00f3rio do couchbaselabs no github.<\/a>**<\/p>\n<h3>Notificador de expira\u00e7\u00e3o do Couchbase Labs<\/h3>\n<p>O aplicativo executa uma pequena inst\u00e2ncia de aplicativo do node.js e do express.   Ele \u00e9 configurado e acessado por meio de uma API REST.  Por que o Node.js?   O Node.js \u00e9 uma plataforma de aplicativos bem suportada para o Couchbase, \u00e9 incrivelmente leve, gerencia seu espa\u00e7o de forma eficiente e \u00e9 adequado para aplicativos RESTful.  O Expiry-notifier pode ser chamado diretamente ou pode ser configurado para executar automaticamente retornos de chamada de expira\u00e7\u00e3o em um determinado intervalo de tempo. A funcionalidade de retorno de chamada de expira\u00e7\u00e3o retorna meta ids e tempo de expira\u00e7\u00e3o (ou segundos at\u00e9 a expira\u00e7\u00e3o) para documentos que expirar\u00e3o em uma janela de tempo especificada.<\/p>\n<p>Por exemplo, para receber uma chamada de retorno de expira\u00e7\u00e3o de um aplicativo que pesquisar\u00e1 diretamente o servi\u00e7o, um documento \u00e9 definido no Couchbase com uma expira\u00e7\u00e3o de 300 segundos:<\/p>\n<p><strong><span style=\"font-size: 14px\"><br \/>\nChave (meta.id): triunfo<\/span><\/strong><\/p>\n<p class=\"rteindent1\"><strong><span style=\"font-size: 14px\">{<br \/>\n\"valor\": \"1966 Triumph Spitfire Mark II 4 velocidades com overdrive e carburadores Weber duplos.\"<br \/>\n}<\/span><\/strong><\/p>\n<p>Se o notificador de expira\u00e7\u00e3o estiver em execu\u00e7\u00e3o, o tempo relativo foi definido como verdadeiro (falaremos mais sobre isso em um segundo) e, ap\u00f3s 10 segundos, o ponto de extremidade REST ser\u00e1 chamado para pesquisar retornos de chamada de expira\u00e7\u00e3o:<\/p>\n<p class=\"rteindent1\"><span style=\"font-size: 14px\"><strong>https:\/\/servername:3000\/poll\/300<\/strong><\/span><\/p>\n<p>Um objeto JSON ser\u00e1 retornado:<\/p>\n<p class=\"rteindent1\"><strong><span style=\"font-size: 14px\">(triunfo:290)<\/span><\/strong><\/p>\n<h3><span style=\"font-family: inherit;font-size: 1em\">Como funciona o notificador de expira\u00e7\u00e3o<\/span><\/h3>\n<p>O Expiry-notifier pode ser executado em qualquer servidor que tenha o node.js instalado.   Depois que o expiry-notifier for instalado (as instru\u00e7\u00f5es podem ser encontradas em <a href=\"https:\/\/github.com\/couchbaselabs\/expiry-notifier\">no reposit\u00f3rio do couchbaselabs no github<\/a>), o aplicativo precisa ser iniciado.  No diret\u00f3rio raiz em que o aplicativo est\u00e1 instalado, execute<\/p>\n<p class=\"rteindent1\"><span style=\"font-size: 14px\"><strong>\"npm start\"<\/strong><\/span><\/p>\n<p>Por padr\u00e3o, o aplicativo ser\u00e1 executado usando a porta 3000.   Para testar se o aplicativo est\u00e1 em execu\u00e7\u00e3o, chame o seguinte comando REST:<\/p>\n<p class=\"rteindent1\"><span style=\"font-size: 14px\"><strong>\"https:\/\/:3000\/status\"<strong><strong><strong><strong>???<\/strong><\/strong><\/strong><\/strong><\/strong><strong><strong><strong>???<\/strong><\/strong><\/strong><\/span><\/p>\n<p>Para configurar o servi\u00e7o para se comunicar com um cluster do couchbase, chame o seguinte comando REST:<\/p>\n<p class=\"rteindent1\"><span style=\"font-size: 14px\"><strong>\u201chttps:\/\/:3000\/setup\/server\/192.168.60.101\/8091\/beer-sample\u201d<\/strong><\/span><\/p>\n<p class=\"rteindent1\">O comando REST acima \u00e9 definido como:\u00a0<strong><span style=\"font-size: 14px\">\/setup\/server\/:server\/:port\/:bucket [RETURNS: {JSON OBJECT} with status change]. \u00a0<\/span><\/strong><span style=\"font-size: 16px\">A chamada desse comando REST executa o seguinte: <\/span><\/p>\n<ul class=\"rteindent1\">\n<li>Instancia o cliente inteligente para se comunicar com o cluster do Couchbase<\/li>\n<li>Configura um \u00edndice leve no couchbase que mant\u00e9m metadados apenas por tempo de expira\u00e7\u00e3o.<\/li>\n<\/ul>\n<p>Para configurar um ponto de extremidade para que o servi\u00e7o envie retornos de chamada de expira\u00e7\u00e3o para um servidor de aplicativos, use o seguinte comando REST:<\/p>\n<p class=\"rteindent1\"><span style=\"font-size: 14px\"><strong>\"https:\/\/:3000\/setup\/endpoint\/\/3000\/receive_callback\"<\/strong><\/span><\/p>\n<p class=\"rteindent1\">O comando REST acima \u00e9 definido como: <strong><span style=\"font-size: 14px\">\/setup\/endpoint\/:hostname\/:port\/:path\/ [RETURNS: {JSON OBJECT} with status change] <\/span><\/strong>Observa\u00e7\u00e3o: o sinalizador \"https\" s\u00f3 \u00e9 usado se o notificador de expira\u00e7\u00e3o tiver de enviar retornos de chamada pelo protocolo https.  Consulte a documenta\u00e7\u00e3o para obter informa\u00e7\u00f5es mais espec\u00edficas.<\/p>\n<p>Para come\u00e7ar a enviar retornos de chamada para o ponto de extremidade definido acima para documentos que est\u00e3o definidos para expirar nos pr\u00f3ximos 30 segundos e a cada 30 segundos depois disso, use o seguinte comando REST:<\/p>\n<p class=\"rteindent1\"><strong><span style=\"font-size: 14px\">\"https:\/\/:3000\/setup\/poll\/30\/loop\"<\/span><\/strong><\/p>\n<p class=\"rteindent1\">O comando REST acima \u00e9 definido como:<span style=\"font-family: inherit;font-size: 1em\"><span style=\"font-size: 14px\"><strong>\/setup\/poll\/:interval\/:loop [RETURNS: {JSON OBJECT} com altera\u00e7\u00e3o de status]<\/strong><\/span> Esse comando enviar\u00e1 um objeto JSON de meta ids e sua expira\u00e7\u00e3o em tempo de \u00e9poca UNIX (n\u00famero de segundos ap\u00f3s 1\/1\/1970 em que o documento est\u00e1 definido para expirar).  Se preferir o n\u00famero de segundos at\u00e9 a expira\u00e7\u00e3o do documento, use o comando abaixo.<\/span><\/p>\n<p>Para retornar o n\u00famero de segundos at\u00e9 a expira\u00e7\u00e3o de um documento em vez da hora da \u00e9poca do UNIX, use o seguinte comando:<\/p>\n<p class=\"rteindent1\"><span style=\"font-size: 14px\"><strong>\"https:\/\/:3000\/setup\/relative\/true\"<\/strong><\/span><\/p>\n<p class=\"rteindent1\">O comando REST acima \u00e9 definido como:\u00a0<span style=\"font-size: 14px\"><strong>\/setup\/relative\/:bool [RETURNS: {JSON OBJECT} com altera\u00e7\u00e3o de status]<\/strong><\/span><\/p>\n<p><strong><span style=\"font-size: 14px\">** Isen\u00e7\u00e3o de responsabilidade: o Couchbase Labs fornece c\u00f3digo experimental apenas para fins de pesquisa e desenvolvimento.   O c\u00f3digo e os aplicativos do Couchbase Labs n\u00e3o s\u00e3o suportados por nenhum contrato de suporte do Couchbase e s\u00e3o fornecidos no estado em que se encontram, sem garantia de qualquer tipo. \u00a0<\/span><\/strong><\/p>","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 [&hellip;]<\/p>","protected":false},"author":20,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[9417,1822],"tags":[],"ppma_author":[9019],"class_list":["post-1605","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-performance","category-node-js"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.0 (Yoast SEO v26.0) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\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\/pt\/expiry-callbacks-couchbase-server\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\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 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/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=\"article:modified_time\" content=\"2025-06-14T06:50:04+00:00\" \/>\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\",\"dateModified\":\"2025-06-14T06:50:04+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\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"articleSection\":[\"High Performance\",\"Node.js\"],\"inLanguage\":\"pt-BR\",\"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\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2014-12-17T16:03:37+00:00\",\"dateModified\":\"2025-06-14T06:50:04+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/expiry-callbacks-couchbase-server\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/expiry-callbacks-couchbase-server\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/expiry-callbacks-couchbase-server\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/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\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"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\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/abfbe093983052aa28595343c19888ce\",\"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\/pt\/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\/pt\/expiry-callbacks-couchbase-server\/","og_locale":"pt_BR","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 [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/expiry-callbacks-couchbase-server\/","og_site_name":"The Couchbase Blog","article_published_time":"2014-12-17T16:03:37+00:00","article_modified_time":"2025-06-14T06:50:04+00:00","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","dateModified":"2025-06-14T06:50:04+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\/1\/2022\/11\/couchbase-nosql-dbaas.png","articleSection":["High Performance","Node.js"],"inLanguage":"pt-BR","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\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2014-12-17T16:03:37+00:00","dateModified":"2025-06-14T06:50:04+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/expiry-callbacks-couchbase-server\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/expiry-callbacks-couchbase-server\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/expiry-callbacks-couchbase-server\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/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":"Blog do Couchbase","description":"Couchbase, o banco de dados NoSQL","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":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"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":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/abfbe093983052aa28595343c19888ce","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\/pt\/author\/todd-greenstein\/"}]}},"authors":[{"term_id":9019,"user_id":20,"is_guest":0,"slug":"todd-greenstein","display_name":"Todd Greenstein","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/f230045f7f6e636cf01abbd35f1cbf66a1206fbe149a0d4f0bbdd992c646257d?s=96&d=mm&r=g","author_category":"","last_name":"Greenstein","first_name":"Todd","job_title":"","user_url":"","description":"Todd Greenstein \u00e9 arquiteto de solu\u00e7\u00f5es na Couchbase. Todd \u00e9 especializado em design de API, arquitetura, modelagem de dados, desenvolvimento em nodejs e golang."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/1605","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/20"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=1605"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/1605\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=1605"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=1605"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=1605"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=1605"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}