{"id":97573,"date":"2025-02-15T09:38:34","date_gmt":"2025-02-15T06:08:34","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/how-to-implement-redis-caching-in-golang-for-beginners-a-step-by-step-guidewindows-edition-1g1a\/"},"modified":"2025-02-15T09:38:34","modified_gmt":"2025-02-15T06:08:34","slug":"how-to-implement-redis-caching-in-golang-for-beginners-a-step-by-step-guidewindows-edition-1g1a","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/how-to-implement-redis-caching-in-golang-for-beginners-a-step-by-step-guidewindows-edition-1g1a\/","title":{"rendered":"\u0646\u062d\u0648\u0647 \u0627\u062c\u0631\u0627\u06cc \u062d\u0627\u0641\u0638\u0647 \u067e\u0646\u0647\u0627\u0646 Redis \u062f\u0631 Golang \u0628\u0631\u0627\u06cc \u0645\u0628\u062a\u062f\u06cc\u0627\u0646: \u06cc\u06a9 \u0631\u0627\u0647\u0646\u0645\u0627\u06cc \u06af\u0627\u0645 \u0628\u0647 \u06af\u0627\u0645 (\u0648\u06cc\u0646\u062f\u0648\u0632 \u0646\u0633\u062e\u0647)"},"content":{"rendered":"<div data-article-id=\"2278854\" id=\"article-body\">\n<p>__ <\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u067e\u0633\u062a \u060c \u0645\u0646 \u0634\u0645\u0627 \u0631\u0627 \u0637\u06cc \u0645\u06cc \u06a9\u0646\u0645 <strong>\u0646\u062d\u0648\u0647 \u062a\u0646\u0638\u06cc\u0645 \u0648 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062d\u0627\u0641\u0638\u0647 \u067e\u0646\u0647\u0627\u0646 Redis<\/strong> \u062f\u0631 \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 Golang. \u0627\u06cc\u0646 \u062a\u0646\u0638\u06cc\u0645 \u0628\u0647 \u06a9\u0627\u0647\u0634 \u06a9\u0645\u06a9 \u0645\u06cc \u06a9\u0646\u062f <strong>\u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647<\/strong> \u0648 \u0628\u0647\u0628\u0648\u062f <strong>\u0639\u0645\u0644<\/strong> \u0628\u0627 \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0631\u062f\u0646 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u063a\u0627\u0644\u0628\u0627\u064b \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06cc \u0634\u0648\u062f.  <\/p>\n<hr\/>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter-rtl ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"\u062a\u063a\u06cc\u06cc\u0631 \u0648\u0636\u0639\u06cc\u062a \u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/how-to-implement-redis-caching-in-golang-for-beginners-a-step-by-step-guidewindows-edition-1g1a\/#%F0%9F%94%B9_%DA%86%D8%B1%D8%A7_%D8%A7%D8%B2_redis_%D8%A8%D8%B1%D8%A7%DB%8C_%D8%B0%D8%AE%DB%8C%D8%B1%D9%87_%D8%B3%D8%A7%D8%B2%DB%8C_%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87_%D9%85%DB%8C_%DA%A9%D9%86%DB%8C%D9%85%D8%9F\" >\ud83d\udd39 \u0686\u0631\u0627 \u0627\u0632 redis \u0628\u0631\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0633\u0627\u0632\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645\u061f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/how-to-implement-redis-caching-in-golang-for-beginners-a-step-by-step-guidewindows-edition-1g1a\/#%F0%9F%93%8C_%D9%85%D8%B1%D8%AD%D9%84%D9%87_1_%D8%A8%D8%B3%D8%AA%D9%87_redis_%D8%B1%D8%A7_%D9%86%D8%B5%D8%A8_%DA%A9%D9%86%DB%8C%D8%AF\" >\ud83d\udccc \u0645\u0631\u062d\u0644\u0647 1: \u0628\u0633\u062a\u0647 redis \u0631\u0627 \u0646\u0635\u0628 \u06a9\u0646\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nabfollower.com\/blog\/how-to-implement-redis-caching-in-golang-for-beginners-a-step-by-step-guidewindows-edition-1g1a\/#%F0%9F%93%8C_%D9%85%D8%B1%D8%AD%D9%84%D9%87_2_%D9%85%D8%B4%D8%AA%D8%B1%DB%8C_Redis_%D8%B1%D8%A7_%D8%A7%D9%88%D9%84%DB%8C%D9%87_%DA%A9%D9%86%DB%8C%D8%AF\" >\ud83d\udccc \u0645\u0631\u062d\u0644\u0647 2: \u0645\u0634\u062a\u0631\u06cc Redis \u0631\u0627 \u0627\u0648\u0644\u06cc\u0647 \u06a9\u0646\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/nabfollower.com\/blog\/how-to-implement-redis-caching-in-golang-for-beginners-a-step-by-step-guidewindows-edition-1g1a\/#%F0%9F%93%8C_%D9%85%D8%B1%D8%AD%D9%84%D9%87_3_%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C_%D8%AA%D9%88%D8%A7%D8%A8%D8%B9_%D8%B0%D8%AE%DB%8C%D8%B1%D9%87_%D8%B3%D8%A7%D8%B2%DB%8C\" >\ud83d\udccc \u0645\u0631\u062d\u0644\u0647 3: \u0627\u062c\u0631\u0627\u06cc \u062a\u0648\u0627\u0628\u0639 \u0630\u062e\u06cc\u0631\u0647 \u0633\u0627\u0632\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nabfollower.com\/blog\/how-to-implement-redis-caching-in-golang-for-beginners-a-step-by-step-guidewindows-edition-1g1a\/#%F0%9F%93%8C_%D9%85%D8%B1%D8%AD%D9%84%D9%87_4_%D8%A7%D8%B2_%D8%AD%D8%A7%D9%81%D8%B8%D9%87_%D9%86%D9%87%D8%A7%D9%86_Redis_%D8%AF%D8%B1_%D9%BE%D8%B1%D8%B3_%D9%88_%D8%AC%D9%88%D9%87%D8%A7%DB%8C_%D9%BE%D8%A7%DB%8C%DA%AF%D8%A7%D9%87_%D8%AF%D8%A7%D8%AF%D9%87_%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87_%DA%A9%D9%86%DB%8C%D8%AF\" >\ud83d\udccc \u0645\u0631\u062d\u0644\u0647 4: \u0627\u0632 \u062d\u0627\u0641\u0638\u0647 \u0646\u0647\u0627\u0646 Redis \u062f\u0631 \u067e\u0631\u0633 \u0648 \u062c\u0648\u0647\u0627\u06cc \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/nabfollower.com\/blog\/how-to-implement-redis-caching-in-golang-for-beginners-a-step-by-step-guidewindows-edition-1g1a\/#%F0%9F%93%8C_%D9%85%D8%B1%D8%AD%D9%84%D9%87_5_%D9%87%D9%86%DA%AF%D8%A7%D9%85_%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1_%D8%AF%D8%A7%D8%AF%D9%87_%D9%87%D8%A7_%D8%8C_%D8%AD%D8%A7%D9%81%D8%B8%D9%87_%D9%BE%D9%86%D9%87%D8%A7%D9%86_%D8%B1%D8%A7_%D8%A8%D8%A7%D8%B7%D9%84_%DA%A9%D9%86%DB%8C%D8%AF\" >\ud83d\udccc \u0645\u0631\u062d\u0644\u0647 5: \u0647\u0646\u06af\u0627\u0645 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0627\u062f\u0647 \u0647\u0627 \u060c \u062d\u0627\u0641\u0638\u0647 \u067e\u0646\u0647\u0627\u0646 \u0631\u0627 \u0628\u0627\u0637\u0644 \u06a9\u0646\u06cc\u062f<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/nabfollower.com\/blog\/how-to-implement-redis-caching-in-golang-for-beginners-a-step-by-step-guidewindows-edition-1g1a\/#%E2%9C%85_%D9%85%D8%B1%D8%AD%D9%84%D9%87_1_redis_%D8%B1%D8%A7_%D8%A8%D9%87_%D8%B5%D9%88%D8%B1%D8%AA_%D9%85%D8%AD%D9%84%DB%8C_%D9%86%D8%B5%D8%A8_%D9%88_%D8%A7%D8%AC%D8%B1%D8%A7_%DA%A9%D9%86%DB%8C%D8%AF\" >\u2705 \u0645\u0631\u062d\u0644\u0647 1: redis \u0631\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u062d\u0644\u06cc \u0646\u0635\u0628 \u0648 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/nabfollower.com\/blog\/how-to-implement-redis-caching-in-golang-for-beginners-a-step-by-step-guidewindows-edition-1g1a\/#%E2%9C%85_%D9%85%D8%B1%D8%AD%D9%84%D9%87_2_%DA%A9%D9%84%DB%8C%D8%AF%D9%87%D8%A7_%D8%B1%D8%A7_%D8%AF%D8%B1_Redis_%D8%AA%D9%86%D8%B8%DB%8C%D9%85_%D9%88_%D8%AF%D8%B1%DB%8C%D8%A7%D9%81%D8%AA_%DA%A9%D9%86%DB%8C%D8%AF_%D8%A2%D8%B2%D9%85%D8%A7%DB%8C%D8%B4_%D9%85%D8%AD%D9%84%DB%8C\" >\u2705 \u0645\u0631\u062d\u0644\u0647 2: \u06a9\u0644\u06cc\u062f\u0647\u0627 \u0631\u0627 \u062f\u0631 Redis \u062a\u0646\u0638\u06cc\u0645 \u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u06cc\u062f (\u0622\u0632\u0645\u0627\u06cc\u0634 \u0645\u062d\u0644\u06cc)<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"%F0%9F%94%B9_%DA%86%D8%B1%D8%A7_%D8%A7%D8%B2_redis_%D8%A8%D8%B1%D8%A7%DB%8C_%D8%B0%D8%AE%DB%8C%D8%B1%D9%87_%D8%B3%D8%A7%D8%B2%DB%8C_%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87_%D9%85%DB%8C_%DA%A9%D9%86%DB%8C%D9%85%D8%9F\"><\/span>\n<p>  \ud83d\udd39 <strong>\u0686\u0631\u0627 \u0627\u0632 redis \u0628\u0631\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0633\u0627\u0632\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645\u061f<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>load \u0628\u0627\u0631 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0631\u0627 \u06a9\u0627\u0647\u0634 \u0645\u06cc \u062f\u0647\u062f<\/p>\n<p>time \u0632\u0645\u0627\u0646 \u067e\u0627\u0633\u062e \u0631\u0627 \u0628\u0647\u0628\u0648\u062f \u0645\u06cc \u0628\u062e\u0634\u062f<\/p>\n<p>storation \u0630\u062e\u06cc\u0631\u0647 \u0633\u0627\u0632\u06cc \u0628\u0627 \u0627\u0631\u0632\u0634 \u06a9\u0644\u06cc\u062f \u0622\u0633\u0627\u0646<\/p>\n<p>\u2705 \u0627\u0632 \u0627\u0646\u0642\u0636\u0627 \u0648 \u0628\u06cc \u0627\u0639\u062a\u0628\u0627\u0631 \u0628\u0648\u062f\u0646 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0645\u06cc \u06a9\u0646\u062f  <\/p>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"%F0%9F%93%8C_%D9%85%D8%B1%D8%AD%D9%84%D9%87_1_%D8%A8%D8%B3%D8%AA%D9%87_redis_%D8%B1%D8%A7_%D9%86%D8%B5%D8%A8_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  \ud83d\udccc <strong>\u0645\u0631\u062d\u0644\u0647 1: \u0628\u0633\u062a\u0647 redis \u0631\u0627 \u0646\u0635\u0628 \u06a9\u0646\u06cc\u062f<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0645\u0627 \u0627\u0632 <strong>go-redis\/v9<\/strong> \u0628\u0633\u062a\u0647 \u0628\u0646\u062f\u06cc \u0628\u0631\u0627\u06cc \u062a\u0639\u0627\u0645\u0644 \u0628\u0627 redis. \u0622\u0646 \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632: \u0646\u0635\u0628 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>go get github.com\/redis\/go-redis\/v9\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"%F0%9F%93%8C_%D9%85%D8%B1%D8%AD%D9%84%D9%87_2_%D9%85%D8%B4%D8%AA%D8%B1%DB%8C_Redis_%D8%B1%D8%A7_%D8%A7%D9%88%D9%84%DB%8C%D9%87_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  \ud83d\udccc <strong>\u0645\u0631\u062d\u0644\u0647 2: \u0645\u0634\u062a\u0631\u06cc Redis \u0631\u0627 \u0627\u0648\u0644\u06cc\u0647 \u06a9\u0646\u06cc\u062f<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f <strong><code>utils\/redis.go<\/code><\/strong>  \u0648 \u0645\u0648\u0627\u0631\u062f \u0632\u06cc\u0631 \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight go\"><code><span class=\"k\">package<\/span> <span class=\"n\">utils<\/span>\n\n<span class=\"k\">import<\/span> <span class=\"p\">(<\/span>\n    <span class=\"s\">\"context\"<\/span>\n    <span class=\"s\">\"crypto\/tls\"<\/span>\n    <span class=\"s\">\"log\"<\/span>\n\n    <span class=\"s\">\"github.com\/redis\/go-redis\/v9\"<\/span>\n<span class=\"p\">)<\/span>\n\n<span class=\"k\">var<\/span> <span class=\"p\">(<\/span>\n    <span class=\"n\">RedisClient<\/span> <span class=\"o\">*<\/span><span class=\"n\">redis<\/span><span class=\"o\">.<\/span><span class=\"n\">Client<\/span>\n    <span class=\"n\">Ctx<\/span>         <span class=\"o\">=<\/span> <span class=\"n\">context<\/span><span class=\"o\">.<\/span><span class=\"n\">Background<\/span><span class=\"p\">()<\/span>\n<span class=\"p\">)<\/span>\n\n<span class=\"c\">\/\/ Initialize Redis Connection<\/span>\n<span class=\"k\">func<\/span> <span class=\"n\">InitRedis<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n    <span class=\"n\">RedisClient<\/span> <span class=\"o\">=<\/span> <span class=\"n\">redis<\/span><span class=\"o\">.<\/span><span class=\"n\">NewClient<\/span><span class=\"p\">(<\/span><span class=\"o\">&amp;<\/span><span class=\"n\">redis<\/span><span class=\"o\">.<\/span><span class=\"n\">Options<\/span><span class=\"p\">{<\/span>\n        <span class=\"n\">Addr<\/span><span class=\"o\">:<\/span>     <span class=\"s\">\"127.0.0.1:6379\"<\/span><span class=\"p\">,<\/span> <span class=\"c\">\/\/ Replace with Redis host<\/span>\n        <span class=\"n\">Password<\/span><span class=\"o\">:<\/span> <span class=\"s\">\"\"<\/span><span class=\"p\">,<\/span> <span class=\"c\">\/\/ Replace with Redis password<\/span>\n        <span class=\"n\">DB<\/span><span class=\"o\">:<\/span>       <span class=\"m\">0<\/span><span class=\"p\">,<\/span>\n\n\n    <span class=\"n\">_<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">RedisClient<\/span><span class=\"o\">.<\/span><span class=\"n\">Ping<\/span><span class=\"p\">(<\/span><span class=\"n\">Ctx<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">Result<\/span><span class=\"p\">()<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">log<\/span><span class=\"o\">.<\/span><span class=\"n\">Fatalf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"\u274c Failed to connect to Redis: %v\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">}<\/span>\n    <span class=\"n\">log<\/span><span class=\"o\">.<\/span><span class=\"n\">Println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"\u2705 Redis connection established\"<\/span><span class=\"p\">)<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\ud83d\udd39 <strong>\u062f\u0631 \u0635\u0648\u0631\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06cc\u06a9 \u0646\u0645\u0648\u0646\u0647 \u0645\u062d\u0644\u06cc Redis<\/strong>\u060c \u0645\u062c\u0645\u0648\u0639\u0647 <code>Addr: \"127.0.0.1:6379\"<\/code> \u0648 \u062d\u0630\u0641 <code>TLSConfig<\/code>\u0628\u0634\u0631<\/p>\n<p>\ud83d\udd39 <strong>\u0628\u0631\u0627\u06cc \u0627\u0631\u0627\u0626\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 Cloud Redis (\u0645\u0627\u0646\u0646\u062f Aiven \u060c AWS \u0648 \u063a\u06cc\u0631\u0647) \u060c<\/strong> \u0627\u0632 \u062a\u0646\u0638\u06cc\u0645 TLS \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.  <\/p>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"%F0%9F%93%8C_%D9%85%D8%B1%D8%AD%D9%84%D9%87_3_%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C_%D8%AA%D9%88%D8%A7%D8%A8%D8%B9_%D8%B0%D8%AE%DB%8C%D8%B1%D9%87_%D8%B3%D8%A7%D8%B2%DB%8C\"><\/span>\n<p>  \ud83d\udccc <strong>\u0645\u0631\u062d\u0644\u0647 3: \u0627\u062c\u0631\u0627\u06cc \u062a\u0648\u0627\u0628\u0639 \u0630\u062e\u06cc\u0631\u0647 \u0633\u0627\u0632\u06cc<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062a\u0648\u0627\u0628\u0639 \u0630\u062e\u06cc\u0631\u0647 \u0633\u0627\u0632\u06cc \u0632\u06cc\u0631 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u062f\u0627\u062f\u0647 \u0647\u0627 \u062f\u0631 REDIS \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight go\"><code><span class=\"k\">package<\/span> <span class=\"n\">utils<\/span>\n\n<span class=\"k\">import<\/span> <span class=\"p\">(<\/span>\n    <span class=\"s\">\"encoding\/json\"<\/span>\n    <span class=\"s\">\"errors\"<\/span>\n    <span class=\"s\">\"log\"<\/span>\n    <span class=\"s\">\"time\"<\/span>\n<span class=\"p\">)<\/span>\n\n<span class=\"c\">\/\/ CacheGet: Fetch data from Redis<\/span>\n<span class=\"k\">func<\/span> <span class=\"n\">CacheGet<\/span><span class=\"p\">(<\/span><span class=\"n\">key<\/span> <span class=\"kt\">string<\/span><span class=\"p\">,<\/span> <span class=\"n\">result<\/span> <span class=\"k\">interface<\/span><span class=\"p\">{})<\/span> <span class=\"p\">(<\/span><span class=\"kt\">bool<\/span><span class=\"p\">,<\/span> <span class=\"kt\">error<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"n\">log<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"\ud83d\udd0d Checking cache for key: %s\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">key<\/span><span class=\"p\">)<\/span>\n\n    <span class=\"n\">val<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">RedisClient<\/span><span class=\"o\">.<\/span><span class=\"n\">Get<\/span><span class=\"p\">(<\/span><span class=\"n\">Ctx<\/span><span class=\"p\">,<\/span> <span class=\"n\">key<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">Result<\/span><span class=\"p\">()<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">==<\/span> <span class=\"n\">redis<\/span><span class=\"o\">.<\/span><span class=\"n\">Nil<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">return<\/span> <span class=\"no\">false<\/span><span class=\"p\">,<\/span> <span class=\"n\">errors<\/span><span class=\"o\">.<\/span><span class=\"n\">New<\/span><span class=\"p\">(<\/span><span class=\"s\">\"key does not exist\"<\/span><span class=\"p\">)<\/span> <span class=\"c\">\/\/ Cache miss<\/span>\n    <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">return<\/span> <span class=\"no\">false<\/span><span class=\"p\">,<\/span> <span class=\"n\">errors<\/span><span class=\"o\">.<\/span><span class=\"n\">New<\/span><span class=\"p\">(<\/span><span class=\"s\">\"internal server error\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"c\">\/\/ Unmarshal JSON into result<\/span>\n    <span class=\"n\">err<\/span> <span class=\"o\">=<\/span> <span class=\"n\">json<\/span><span class=\"o\">.<\/span><span class=\"n\">Unmarshal<\/span><span class=\"p\">([]<\/span><span class=\"kt\">byte<\/span><span class=\"p\">(<\/span><span class=\"n\">val<\/span><span class=\"p\">),<\/span> <span class=\"n\">result<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">return<\/span> <span class=\"no\">false<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"n\">log<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"\u2705 Cache hit for key: %s\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">key<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">return<\/span> <span class=\"no\">true<\/span><span class=\"p\">,<\/span> <span class=\"no\">nil<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"c\">\/\/ CacheSet: Store data in Redis<\/span>\n<span class=\"k\">func<\/span> <span class=\"n\">CacheSet<\/span><span class=\"p\">(<\/span><span class=\"n\">key<\/span> <span class=\"kt\">string<\/span><span class=\"p\">,<\/span> <span class=\"n\">value<\/span> <span class=\"k\">interface<\/span><span class=\"p\">{},<\/span> <span class=\"n\">expiration<\/span> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">Duration<\/span><span class=\"p\">)<\/span> <span class=\"kt\">error<\/span> <span class=\"p\">{<\/span>\n    <span class=\"n\">jsonData<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">json<\/span><span class=\"o\">.<\/span><span class=\"n\">Marshal<\/span><span class=\"p\">(<\/span><span class=\"n\">value<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">return<\/span> <span class=\"n\">err<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">return<\/span> <span class=\"n\">RedisClient<\/span><span class=\"o\">.<\/span><span class=\"n\">Set<\/span><span class=\"p\">(<\/span><span class=\"n\">Ctx<\/span><span class=\"p\">,<\/span> <span class=\"n\">key<\/span><span class=\"p\">,<\/span> <span class=\"n\">jsonData<\/span><span class=\"p\">,<\/span> <span class=\"n\">expiration<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">Err<\/span><span class=\"p\">()<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"c\">\/\/ InvalidateCache: Delete a cached key (for updates)<\/span>\n<span class=\"k\">func<\/span> <span class=\"n\">InvalidateCache<\/span><span class=\"p\">(<\/span><span class=\"n\">key<\/span> <span class=\"kt\">string<\/span><span class=\"p\">)<\/span> <span class=\"kt\">error<\/span> <span class=\"p\">{<\/span>\n    <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">RedisClient<\/span><span class=\"o\">.<\/span><span class=\"n\">Del<\/span><span class=\"p\">(<\/span><span class=\"n\">Ctx<\/span><span class=\"p\">,<\/span> <span class=\"n\">key<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">Err<\/span><span class=\"p\">()<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">log<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"\u274c Error invalidating cache for key: %s\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">key<\/span><span class=\"p\">)<\/span>\n        <span class=\"k\">return<\/span> <span class=\"n\">err<\/span>\n    <span class=\"p\">}<\/span>\n    <span class=\"n\">log<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"\ud83d\uddd1\ufe0f Cache invalidated for key: %s\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">key<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">return<\/span> <span class=\"no\">nil<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\ud83d\udd39 <strong><code>CacheGet()<\/code><\/strong>  \u2192 \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0622\u06cc\u0627 \u06a9\u0644\u06cc\u062f \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f \u060c \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u0648 Unmarshals \u0631\u0627 \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\ud83d\udd39 <strong><code>CacheSet()<\/code><\/strong>  \u2192 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0631\u0645\u0632\u06af\u0630\u0627\u0631\u06cc \u0634\u062f\u0647 JSON \u0631\u0627 \u0628\u0627 \u0632\u0645\u0627\u0646 \u0627\u0646\u0642\u0636\u0627 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\ud83d\udd39 <strong><code>InvalidateCache()<\/code><\/strong>  inte \u06cc\u06a9 \u0648\u0631\u0648\u062f\u06cc \u062d\u0627\u0641\u0638\u0647 \u0646\u0647\u0627\u0646 \u0631\u0627 \u062d\u0630\u0641 \u06a9\u0646\u06cc\u062f (\u0647\u0646\u06af\u0627\u0645 \u0628\u0647 \u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627 \u0645\u0641\u06cc\u062f \u0627\u0633\u062a).  <\/p>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"%F0%9F%93%8C_%D9%85%D8%B1%D8%AD%D9%84%D9%87_4_%D8%A7%D8%B2_%D8%AD%D8%A7%D9%81%D8%B8%D9%87_%D9%86%D9%87%D8%A7%D9%86_Redis_%D8%AF%D8%B1_%D9%BE%D8%B1%D8%B3_%D9%88_%D8%AC%D9%88%D9%87%D8%A7%DB%8C_%D9%BE%D8%A7%DB%8C%DA%AF%D8%A7%D9%87_%D8%AF%D8%A7%D8%AF%D9%87_%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  \ud83d\udccc <strong>\u0645\u0631\u062d\u0644\u0647 4: \u0627\u0632 \u062d\u0627\u0641\u0638\u0647 \u0646\u0647\u0627\u0646 Redis \u062f\u0631 \u067e\u0631\u0633 \u0648 \u062c\u0648\u0647\u0627\u06cc \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062a\u0648\u0627\u0628\u0639 \u067e\u0631\u0633 \u0648 \u062c\u0648 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u062e\u0648\u062f \u0631\u0627 \u0628\u0647 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0647\u06cc\u062f <strong>\u0627\u0648\u0644\u06cc\u0646 \u0628\u0631\u0631\u0633\u06cc redis<\/strong> \u0642\u0628\u0644 \u0627\u0632 \u067e\u0631\u0633 \u0648 \u062c\u0648 \u0627\u0632 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight go\"><code><span class=\"k\">package<\/span> <span class=\"n\">services<\/span>\n\n<span class=\"k\">import<\/span> <span class=\"p\">(<\/span>\n    <span class=\"s\">\"errors\"<\/span>\n    <span class=\"s\">\"log\"<\/span>\n    <span class=\"s\">\"time\"<\/span>\n    <span class=\"s\">\"your_project\/utils\"<\/span> <span class=\"c\">\/\/ Import utils package<\/span>\n<span class=\"p\">)<\/span>\n\n<span class=\"k\">var<\/span> <span class=\"n\">cacheExpiration<\/span> <span class=\"o\">=<\/span> <span class=\"m\">10<\/span> <span class=\"o\">*<\/span> <span class=\"n\">time<\/span><span class=\"o\">.<\/span><span class=\"n\">Minute<\/span> <span class=\"c\">\/\/ Set cache expiration time<\/span>\n\n<span class=\"k\">type<\/span> <span class=\"n\">Category<\/span> <span class=\"k\">struct<\/span> <span class=\"p\">{<\/span>\n    <span class=\"n\">ID<\/span>   <span class=\"kt\">int<\/span>    <span class=\"s\">`json:\"id\"`<\/span>\n    <span class=\"n\">Name<\/span> <span class=\"kt\">string<\/span> <span class=\"s\">`json:\"name\"`<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"k\">func<\/span> <span class=\"n\">GetAllCategories<\/span><span class=\"p\">()<\/span> <span class=\"p\">([]<\/span><span class=\"n\">Category<\/span><span class=\"p\">,<\/span> <span class=\"kt\">error<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">var<\/span> <span class=\"n\">categories<\/span> <span class=\"p\">[]<\/span><span class=\"n\">Category<\/span>\n    <span class=\"n\">cacheKey<\/span> <span class=\"o\">:=<\/span> <span class=\"s\">\"categories_cache\"<\/span>\n\n    <span class=\"c\">\/\/ 1\ufe0f\u20e3 Check Redis cache first<\/span>\n    <span class=\"n\">cached<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">utils<\/span><span class=\"o\">.<\/span><span class=\"n\">CacheGet<\/span><span class=\"p\">(<\/span><span class=\"n\">cacheKey<\/span><span class=\"p\">,<\/span> <span class=\"o\">&amp;<\/span><span class=\"n\">categories<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">log<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Redis CacheGet error: %v\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">}<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">cached<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">log<\/span><span class=\"o\">.<\/span><span class=\"n\">Println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"\u2705 Categories fetched from Redis cache\"<\/span><span class=\"p\">)<\/span>\n        <span class=\"k\">return<\/span> <span class=\"n\">categories<\/span><span class=\"p\">,<\/span> <span class=\"no\">nil<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"c\">\/\/ 2\ufe0f\u20e3 Cache miss \u2192 Fetch data from DB<\/span>\n    <span class=\"n\">log<\/span><span class=\"o\">.<\/span><span class=\"n\">Println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"\u26a0\ufe0f Cache miss: Fetching categories from DB\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">query<\/span> <span class=\"o\">:=<\/span> <span class=\"s\">`SELECT id, name FROM categories`<\/span>\n    <span class=\"n\">rows<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">utils<\/span><span class=\"o\">.<\/span><span class=\"n\">DB<\/span><span class=\"o\">.<\/span><span class=\"n\">Query<\/span><span class=\"p\">(<\/span><span class=\"n\">query<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">return<\/span> <span class=\"no\">nil<\/span><span class=\"p\">,<\/span> <span class=\"n\">errors<\/span><span class=\"o\">.<\/span><span class=\"n\">New<\/span><span class=\"p\">(<\/span><span class=\"s\">\"database error\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">}<\/span>\n    <span class=\"k\">defer<\/span> <span class=\"n\">rows<\/span><span class=\"o\">.<\/span><span class=\"n\">Close<\/span><span class=\"p\">()<\/span>\n\n    <span class=\"k\">for<\/span> <span class=\"n\">rows<\/span><span class=\"o\">.<\/span><span class=\"n\">Next<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">var<\/span> <span class=\"n\">category<\/span> <span class=\"n\">Category<\/span>\n        <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">rows<\/span><span class=\"o\">.<\/span><span class=\"n\">Scan<\/span><span class=\"p\">(<\/span><span class=\"o\">&amp;<\/span><span class=\"n\">category<\/span><span class=\"o\">.<\/span><span class=\"n\">ID<\/span><span class=\"p\">,<\/span> <span class=\"o\">&amp;<\/span><span class=\"n\">category<\/span><span class=\"o\">.<\/span><span class=\"n\">Name<\/span><span class=\"p\">);<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n            <span class=\"k\">return<\/span> <span class=\"no\">nil<\/span><span class=\"p\">,<\/span> <span class=\"n\">errors<\/span><span class=\"o\">.<\/span><span class=\"n\">New<\/span><span class=\"p\">(<\/span><span class=\"s\">\"data scan error\"<\/span><span class=\"p\">)<\/span>\n        <span class=\"p\">}<\/span>\n        <span class=\"n\">categories<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">append<\/span><span class=\"p\">(<\/span><span class=\"n\">categories<\/span><span class=\"p\">,<\/span> <span class=\"n\">category<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"c\">\/\/ 3\ufe0f\u20e3 Store fetched data in Redis<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">utils<\/span><span class=\"o\">.<\/span><span class=\"n\">CacheSet<\/span><span class=\"p\">(<\/span><span class=\"n\">cacheKey<\/span><span class=\"p\">,<\/span> <span class=\"n\">categories<\/span><span class=\"p\">,<\/span> <span class=\"n\">cacheExpiration<\/span><span class=\"p\">);<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">log<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Redis CacheSet error: %v\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"n\">log<\/span><span class=\"o\">.<\/span><span class=\"n\">Println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"\u2705 Categories cached in Redis\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">return<\/span> <span class=\"n\">categories<\/span><span class=\"p\">,<\/span> <span class=\"no\">nil<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\ud83d\udd39 <strong>\u0627\u0628\u062a\u062f\u0627 \u062d\u0627\u0641\u0638\u0647 \u0646\u0647\u0627\u0646 Redis \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f<\/strong> \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 <code>CacheGet()<\/code>\u0628\u0634\u0631<\/p>\n<p>\ud83d\udd39 \u0627\u06af\u0631 <strong>\u062d\u0627\u0641\u0638\u0647 \u067e\u0646\u0647\u0627\u0646<\/strong>\u060c \u062f\u06cc\u062a\u0627\u0628\u06cc\u0633 \u0631\u0627 \u067e\u0631\u0633 \u0648 \u062c\u0648 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\ud83d\udd39 <strong>\u0646\u062a\u06cc\u062c\u0647 \u0631\u0627 \u062f\u0631 redis \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0646\u06cc\u062f<\/strong> \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062f\u0631 \u0622\u06cc\u0646\u062f\u0647 \u0628\u0627 <code>CacheSet()<\/code>\u0628\u0634\u0631  <\/p>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"%F0%9F%93%8C_%D9%85%D8%B1%D8%AD%D9%84%D9%87_5_%D9%87%D9%86%DA%AF%D8%A7%D9%85_%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1_%D8%AF%D8%A7%D8%AF%D9%87_%D9%87%D8%A7_%D8%8C_%D8%AD%D8%A7%D9%81%D8%B8%D9%87_%D9%BE%D9%86%D9%87%D8%A7%D9%86_%D8%B1%D8%A7_%D8%A8%D8%A7%D8%B7%D9%84_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  \ud83d\udccc <strong>\u0645\u0631\u062d\u0644\u0647 5: \u0647\u0646\u06af\u0627\u0645 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0627\u062f\u0647 \u0647\u0627 \u060c \u062d\u0627\u0641\u0638\u0647 \u067e\u0646\u0647\u0627\u0646 \u0631\u0627 \u0628\u0627\u0637\u0644 \u06a9\u0646\u06cc\u062f<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0647\u0631 \u0632\u0645\u0627\u0646 \u06a9\u0647 \u062f\u0633\u062a\u0647 \u0647\u0627\u06cc \u062c\u062f\u06cc\u062f \u0627\u0636\u0627\u0641\u0647 \u0634\u0648\u062f \u060c \u062d\u0627\u0641\u0638\u0647 \u067e\u0646\u0647\u0627\u0646 \u0645\u0646\u0633\u0648\u062e \u0631\u0627 \u062d\u0630\u0641 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight go\"><code><span class=\"n\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"n\">utils<\/span><span class=\"o\">.<\/span><span class=\"n\">InvalidateCache<\/span><span class=\"p\">(<\/span><span class=\"s\">\"categories_cache\"<\/span><span class=\"p\">)<\/span>\n<span class=\"k\">if<\/span> <span class=\"n\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"no\">nil<\/span> <span class=\"p\">{<\/span>\n    <span class=\"n\">log<\/span><span class=\"o\">.<\/span><span class=\"n\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Error invalidating cache: %v\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span><span class=\"p\">)<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\ud83d\udd39 \u0627\u0632 \u0627\u06cc\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f <strong>\u067e\u0633 \u0627\u0632 \u0627\u0641\u0632\u0648\u062f\u0646\/\u0628\u0647 \u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc\/\u062d\u0630\u0641 \u062f\u0627\u062f\u0647 \u0647\u0627<\/strong> \u0628\u0631\u0627\u06cc \u062a\u0627\u0632\u0647 \u0646\u06af\u0647 \u062f\u0627\u0634\u062a\u0646 \u062d\u0627\u0641\u0638\u0647 \u067e\u0646\u0647\u0627\u0646.  <\/p>\n<hr\/>\n<p>\u0627\u06af\u0631 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f Redis Caching \u0631\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u062d\u0644\u06cc \u0622\u0632\u0645\u0627\u06cc\u0634 \u06a9\u0646\u06cc\u062f <strong>\u0648\u06cc\u0646\u062f\u0648\u0632<\/strong>\u060c \u0627\u06cc\u0646 \u0645\u0631\u0627\u062d\u0644 \u0631\u0627 \u062f\u0646\u0628\u0627\u0644 \u06a9\u0646\u06cc\u062f:<\/p>\n<hr\/>\n<h3><span class=\"ez-toc-section\" id=\"%E2%9C%85_%D9%85%D8%B1%D8%AD%D9%84%D9%87_1_redis_%D8%B1%D8%A7_%D8%A8%D9%87_%D8%B5%D9%88%D8%B1%D8%AA_%D9%85%D8%AD%D9%84%DB%8C_%D9%86%D8%B5%D8%A8_%D9%88_%D8%A7%D8%AC%D8%B1%D8%A7_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  \u2705 <strong>\u0645\u0631\u062d\u0644\u0647 1: redis \u0631\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u062d\u0644\u06cc \u0646\u0635\u0628 \u0648 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ol>\n<li>\n<p><strong>\u0628\u0627\u0631\u06af\u06cc\u0631\u06cc redis \u0628\u0631\u0627\u06cc \u0648\u06cc\u0646\u062f\u0648\u0632:<\/strong>  <\/p>\n<ul>\n<li>    (Redis \u0628\u0647 \u0637\u0648\u0631 \u0628\u0648\u0645\u06cc \u062f\u0631 \u0648\u06cc\u0646\u062f\u0648\u0632 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0646\u0645\u06cc \u0634\u0648\u062f)<\/li>\n<li>\u0633\u0631\u0648\u0631 redis \u0631\u0627 \u0646\u0635\u0628 \u0648 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f.<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>Server Redis \u0631\u0627 \u0634\u0631\u0648\u0639 \u06a9\u0646\u06cc\u062f:<\/strong><\/p>\n<p>\u0627\u06af\u0631 \u0646\u0635\u0628 \u06a9\u0631\u062f\u0647 \u0627\u06cc\u062f <strong>redis \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 WSL<\/strong> \u06cc\u0627 <strong>\u0646\u0633\u062e\u0647 \u0633\u0627\u0632\u06af\u0627\u0631<\/strong>\u060c \u0622\u0646 \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632:<\/p>\n<\/li>\n<\/ol>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>   redis-server\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<ol>\n<li>\n<strong>\u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0622\u06cc\u0627 Redis \u062f\u0631 \u062d\u0627\u0644 \u0627\u062c\u0631\u0627 \u0627\u0633\u062a:<\/strong><br \/>\n\u0628\u0627\u0632 <strong>\u0641\u0631\u0645\u0627\u0646 \u0633\u0631\u06cc\u0639 (CMD)<\/strong> \u0648 \u0627\u062c\u0631\u0627:\n<\/li>\n<\/ol>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>   redis-cli ping\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06af\u0631 Redis \u062f\u0631 \u062d\u0627\u0644 \u0627\u062c\u0631\u0627 \u0627\u0633\u062a \u060c \u0628\u0627\u06cc\u062f \u0628\u0631\u06af\u0631\u062f\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>   PONG\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<hr\/>\n<h3><span class=\"ez-toc-section\" id=\"%E2%9C%85_%D9%85%D8%B1%D8%AD%D9%84%D9%87_2_%DA%A9%D9%84%DB%8C%D8%AF%D9%87%D8%A7_%D8%B1%D8%A7_%D8%AF%D8%B1_Redis_%D8%AA%D9%86%D8%B8%DB%8C%D9%85_%D9%88_%D8%AF%D8%B1%DB%8C%D8%A7%D9%81%D8%AA_%DA%A9%D9%86%DB%8C%D8%AF_%D8%A2%D8%B2%D9%85%D8%A7%DB%8C%D8%B4_%D9%85%D8%AD%D9%84%DB%8C\"><\/span>\n<p>  \u2705 <strong>\u0645\u0631\u062d\u0644\u0647 2: \u06a9\u0644\u06cc\u062f\u0647\u0627 \u0631\u0627 \u062f\u0631 Redis \u062a\u0646\u0638\u06cc\u0645 \u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u06cc\u062f (\u0622\u0632\u0645\u0627\u06cc\u0634 \u0645\u062d\u0644\u06cc)<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0628\u0631\u0627\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u062d\u0627\u0641\u0638\u0647 \u0646\u0647\u0627\u0646 \u062e\u0648\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u06a9\u0644\u06cc\u062f \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f <strong><code>categories_cache<\/code><\/strong>\u060c \u0627\u0632 \u062f\u0633\u062a\u0648\u0631\u0627\u062a \u0632\u06cc\u0631 \u062f\u0631 <strong>\u0627\u0639\u0644\u0627\u0646 \u0641\u0631\u0645\u0627\u0646<\/strong>:<\/p>\n<ol>\n<li>\n<strong>Redis CLI \u0631\u0627 \u0628\u0627\u0632 \u06a9\u0646\u06cc\u062f:<\/strong>\n<\/li>\n<\/ol>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>   redis-cli\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<ol>\n<li>\n<strong>\u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0622\u06cc\u0627 <code>categories_cache<\/code> \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f:<\/strong>\n<\/li>\n<\/ol>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>   EXISTS categories_cache\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06af\u0631 \u0628\u0631\u06af\u0631\u062f\u062f <code>1<\/code>\u060c \u06a9\u0644\u06cc\u062f \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f. \u0627\u06af\u0631 <code>0<\/code>\u060c \u0627\u0632 \u062f\u0633\u062a \u0631\u0641\u062a\u0647 \u0627\u0633\u062a.<\/p>\n<ol>\n<li>\n<strong>\u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0634\u062f\u0647 \u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u06cc\u062f:<\/strong>\n<\/li>\n<\/ol>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>   GET categories_cache\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u0646 \u0628\u0627\u06cc\u062f \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0634\u062f\u0647 JSON \u0631\u0627 \u0628\u0631\u06af\u0631\u062f\u0627\u0646\u062f.<\/p>\n<hr\/><\/div>\n","protected":false},"excerpt":{"rendered":"<p>__ \u062f\u0631 \u0627\u06cc\u0646 \u067e\u0633\u062a \u060c \u0645\u0646 \u0634\u0645\u0627 \u0631\u0627 \u0637\u06cc \u0645\u06cc \u06a9\u0646\u0645 \u0646\u062d\u0648\u0647 \u062a\u0646\u0638\u06cc\u0645 \u0648 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062d\u0627\u0641\u0638\u0647 \u067e\u0646\u0647\u0627\u0646 Redis \u062f\u0631 \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 Golang. \u0627\u06cc\u0646 \u062a\u0646\u0638\u06cc\u0645 \u0628\u0647 \u06a9\u0627\u0647\u0634 \u06a9\u0645\u06a9 \u0645\u06cc \u06a9\u0646\u062f \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0648 \u0628\u0647\u0628\u0648\u062f \u0639\u0645\u0644 \u0628\u0627 \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0631\u062f\u0646 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u063a\u0627\u0644\u0628\u0627\u064b \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06cc \u0634\u0648\u062f. \ud83d\udd39 \u0686\u0631\u0627 \u0627\u0632 redis \u0628\u0631\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0633\u0627\u0632\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 &hellip;<\/p>\n","protected":false},"author":2,"featured_media":97574,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-97573","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/97573","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=97573"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/97573\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/97574"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=97573"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=97573"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=97573"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}