[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"technology-pl-redis":3,"technology-projects-pl-redis":29,"mdc-3powdb-key":106},{"id":4,"title":5,"category":6,"content":7,"description":8,"extension":9,"faq":10,"icon":11,"links":12,"meta":21,"projects":22,"since":25,"stem":26,"updated":27,"__hash__":28},"technologies_pl\u002Fpl\u002Ftechnologies\u002Fredis.yml","Redis","database","Redis to magazyn danych w pamięci, którego używam do buforowania i przetwarzania w tle. W projektach Laravel pomaga wykonywać zadania, na które użytkownik nie powinien czekać w ramach żądania HTTP.\n\n## Przykłady z moich projektów\n\nNetPostPanel korzysta z Laravel Horizon do kolejek generowania treści. W DigiPulse Redis uczestniczy w architekturze monitoringu opartej na zdarzeniach. Takie zadania wymagają innego podejścia do trwałości niż zwykła pamięć podręczna strony: utrata oczekującej pracy może wpłynąć na produkt, nawet jeśli cache da się odtworzyć.\n\n## Buforowanie i koordynacja\n\nRedis może przechowywać wyniki obliczeń, liczniki żądań i krótkotrwałe blokady. Klucze i czas wygaśnięcia muszą pasować do danych. Blokady pomagają koordynować procesy, ale ponawianie zadań nadal trzeba zaprojektować tak, aby nie powielało operacji biznesowych.\n\n## Trwałość danych kolejki\n\nRedis oferuje migawki RDB i dziennik AOF z różnymi możliwościami odtwarzania. Restart nie musi oznaczać utraty danych, a traktowanie wszystkich kluczy jako jednorazowych jest niebezpieczne dla kolejek. Trwałość, usuwanie kluczy przy braku pamięci i ponawianie zadań trzeba skonfigurować razem. Natomiast Redis Pub\u002FSub nie przechowuje wiadomości dla odłączonych odbiorców.\n","Redis w aplikacjach Laravel: kolejki zadań, pamięć podręczna i koordynacja pracy na przykładzie DigiPulse oraz NetPostPanel.","yml",null,"i-simple-icons-redis",[13,18],{"label":14,"to":15,"color":16,"icon":17},"redis.io","https:\u002F\u002Fredis.io","neutral","i-heroicons-arrow-top-right-on-square",{"label":19,"to":20,"color":16,"icon":17},"Dokumentacja techniczna","https:\u002F\u002Fredis.io\u002Fdocs\u002Flatest\u002Foperate\u002Foss_and_stack\u002Fmanagement\u002Fpersistence\u002F",{},[23,24],"digipulse","netpostpanel","2019","pl\u002Ftechnologies\u002Fredis","2026-09-20","2j_TCXW9S2DQRyq9CcQO_ZN3Xmcs2JifWUtt4BlWGOo",[30,74],{"id":31,"title":32,"content":33,"date":34,"description":35,"extension":9,"featured":36,"image":37,"links":38,"meta":47,"stack":48,"stem":68,"tags":69,"url":41,"__hash__":73},"projects_pl\u002Fpl\u002Fprojects\u002Fdigipulse.yml","DigiPulse","SaaS do monitorowania dostępności — sprawdzanie co 60 sekund, śledzenie wygaśnięcia SSL, powiadomienia przez Telegram i email. Panel administracyjny i podstawowy backend zbudowane na Laravel (Octane, websockety Reverb) i Filament, a silnik monitorujący to osobny serwis w Go. Integracja logowania Google OAuth i Cloudflare Turnstile. Zawiera serwer MCP, który udostępnia dane monitoringu bezpośrednio asystentom AI. Self-hosted na Proxmox.\n\n## Kluczowe funkcje\n\n- **Dedykowany silnik w Go** - sprawdzanie dostępności wykonuje osobny serwis w Go, więc ciągłe odpytywanie co 60 sekund nie spowalnia aplikacji Laravel\n- **Dashboard w czasie rzeczywistym** - websockety Reverb przesyłają zmiany statusu do UI na żywo, bez odświeżania\n- **Octane + Filament** - Laravel rezydentny w pamięci z pełnym panelem administracyjnym dla monitorów, kontaktów i reguł alertów\n- **Serwer MCP** - monitory i incydenty dostępne dla asystentów AI (Claude, Cursor) przez Model Context Protocol\n- **Google OAuth + Turnstile** - logowanie bez hasła i ochrona przed botami na formularzach publicznych\n- **Self-hosted** - wdrożone na własnym homelab Proxmox, którym zarządzam end-to-end\n\n## Stos technologiczny\n\n- **Backend**: Laravel (Octane, websockety Reverb)\n- **Panel administracyjny**: Filament\n- **Silnik monitorujący**: Go (osobny serwis)\n- **Baza danych**: PostgreSQL\n- **Integracja AI**: Serwer MCP\n- **Infrastruktura**: Self-hosted na Proxmox\n","2026-04-17","SaaS do monitorowania dostępności: architektura event-driven — Laravel (Octane, Reverb) i Filament wysyłają zadania przez Redis do lekkiego workera w Go; serwer MCP udostępnia dane monitoringu asystentom AI; powiadomienia Telegram\u002Fe-mail",true,"\u002Fhero\u002Fdigipulse.avif",[39,43],{"label":40,"to":41,"color":42,"icon":17},"Live Demo","https:\u002F\u002Fdigipulse.cloud","primary",{"label":44,"to":45,"color":16,"icon":46},"GitHub","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fdigipulse-backend","i-simple-icons-github",{},[49,52,55,58,61,62,65],{"name":50,"icon":51},"Laravel","i-simple-icons-laravel",{"name":53,"icon":54},"Filament","i-simple-icons-filament",{"name":56,"icon":57},"Go","i-simple-icons-go",{"name":59,"icon":60},"PostgreSQL","i-simple-icons-postgresql",{"name":5,"icon":11},{"name":63,"icon":64},"Vue","i-simple-icons-vuedotjs",{"name":66,"icon":67},"MCP","i-heroicons-cpu-chip","pl\u002Fprojects\u002Fdigipulse",[70,50,56,71,66,5,72],"SaaS","Monitoring","Event-driven","GqA86kRO7Vh1dUrEBwiAh6SARuOescZleItqed4Wz8M",{"id":75,"title":76,"content":77,"date":78,"description":79,"extension":9,"featured":36,"image":80,"links":81,"meta":85,"stack":86,"stem":100,"tags":101,"url":104,"__hash__":105},"projects_pl\u002Fpl\u002Fprojects\u002Fnetpostpanel.yml","NetPostPanel","Wewnętrzna platforma AI do operacji na treści, która zamienia research tematu w gotową treść: pełny pipeline RAG (Google Custom Search + RSS → scraping → generacja multi-provider → wektoryzacja), plus wersjonowane zewnętrzne API zasilające procesy treściowe innych projektów, w tym pipeline bloga DigiSpace.\n\n## Kluczowe funkcje\n\n- **Zewnętrzne API** - wersjonowane `POST \u002Fapi\u002Fv1\u002Fgenerate` + `\u002Ftranslate` z kluczami i limitami per klient udostępnia cały pipeline innym aplikacjom, synchronicznie lub asynchronicznie z callbackami\n- **Auto Pilot** - codzienne zaplanowane uruchomienia generują treść z nowych inspiracji lub własnych tematów, w pełni automatycznie\n- **AI bez przywiązania do dostawcy** - Gemini i OpenAI za abstrakcją driverów, więc zmiana modelu to konfiguracja, nie refaktoryzacja\n- **Pipeline semantyczny** - wyszukiwanie wektorowe na Qdrant deduplikuje i grupuje newsy zanim trafią do generacji\n- **Autonomiczna agregacja** - auto-wykrywanie kanałów RSS oraz Google Custom Search plus scraping zamieniają temat w samozasilające się źródło treści\n- **Widoczne wywołania LLM** - każda generacja jest śledzona w Langfuse: tokeny, opóźnienie, koszt\n- **Dostęp oparty na rolach** - role admin\u002Fcontent manager\u002Feditor, każde zapytanie ograniczone do właściciela poza adminem\n\n## Stos technologiczny\n\n- **Backend**: Laravel, agenci `laravel\u002Fai`\n- **Frontend**: Inertia.js + Vue 3 (SPA Search & Creation, edytor TipTap)\n- **AI**: Multi-provider (Gemini\u002FOpenAI) za abstrakcją driverów\n- **Research**: Google Custom Search + agregacja RSS, scraping stron\n- **Baza wektorowa**: Qdrant do wyszukiwania semantycznego\n- **Obserwowalność**: Langfuse do śledzenia LLM\n- **Kolejka**: Laravel Horizon\n- **Testy**: PHPUnit\u002FPest + Cypress E2E\n","2024-11-10","Platforma AI do operacji na treści — pipeline RAG (research → scraping → generacja → wektoryzacja), zewnętrzne API dla innych aplikacji oraz Auto Pilot do generacji bez udziału człowieka","\u002Fhero\u002Fnetpostpanel.avif",[82],{"label":83,"to":84,"color":16,"icon":46},"Przegląd projektu","https:\u002F\u002Fgithub.com\u002FYurij2015\u002Fnet-post-panel-overview",{},[87,88,91,94,97],{"name":50,"icon":51},{"name":89,"icon":90},"AI","i-heroicons-sparkles",{"name":92,"icon":93},"Qdrant","i-simple-icons-qdrant",{"name":95,"icon":96},"Langfuse","i-heroicons-chart-bar",{"name":98,"icon":99},"Horizon","i-simple-icons-laravelhorizon","pl\u002Fprojects\u002Fnetpostpanel",[89,50,102,103,92,98],"RAG","External API","https:\u002F\u002Fnet-post-panel.digispace.pro","Gkp9EK0q-C32J7DZ0z0fi4In36IKL9zOIc9U4HbCAxA",{"data":107,"body":108},{},{"type":109,"children":110},"root",[111,119,126,131,137,142,148],{"type":112,"tag":113,"props":114,"children":115},"element","p",{},[116],{"type":117,"value":118},"text","Redis to magazyn danych w pamięci, którego używam do buforowania i przetwarzania w tle. W projektach Laravel pomaga wykonywać zadania, na które użytkownik nie powinien czekać w ramach żądania HTTP.",{"type":112,"tag":120,"props":121,"children":123},"h2",{"id":122},"przykłady-z-moich-projektów",[124],{"type":117,"value":125},"Przykłady z moich projektów",{"type":112,"tag":113,"props":127,"children":128},{},[129],{"type":117,"value":130},"NetPostPanel korzysta z Laravel Horizon do kolejek generowania treści. W DigiPulse Redis uczestniczy w architekturze monitoringu opartej na zdarzeniach. Takie zadania wymagają innego podejścia do trwałości niż zwykła pamięć podręczna strony: utrata oczekującej pracy może wpłynąć na produkt, nawet jeśli cache da się odtworzyć.",{"type":112,"tag":120,"props":132,"children":134},{"id":133},"buforowanie-i-koordynacja",[135],{"type":117,"value":136},"Buforowanie i koordynacja",{"type":112,"tag":113,"props":138,"children":139},{},[140],{"type":117,"value":141},"Redis może przechowywać wyniki obliczeń, liczniki żądań i krótkotrwałe blokady. Klucze i czas wygaśnięcia muszą pasować do danych. Blokady pomagają koordynować procesy, ale ponawianie zadań nadal trzeba zaprojektować tak, aby nie powielało operacji biznesowych.",{"type":112,"tag":120,"props":143,"children":145},{"id":144},"trwałość-danych-kolejki",[146],{"type":117,"value":147},"Trwałość danych kolejki",{"type":112,"tag":113,"props":149,"children":150},{},[151],{"type":117,"value":152},"Redis oferuje migawki RDB i dziennik AOF z różnymi możliwościami odtwarzania. Restart nie musi oznaczać utraty danych, a traktowanie wszystkich kluczy jako jednorazowych jest niebezpieczne dla kolejek. Trwałość, usuwanie kluczy przy braku pamięci i ponawianie zadań trzeba skonfigurować razem. Natomiast Redis Pub\u002FSub nie przechowuje wiadomości dla odłączonych odbiorców."]