Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Redis

Redis . के साथ SvelteKit TODO ऐप

इस पोस्ट में, हम SvelteKitand Serverless Redis (Upstash) का उपयोग करते हुए एक सरल TODO लिखेंगे।

<ब्लॉकक्वॉट>

SvelteKit एक सुंदर विकास अनुभव और लचीली फाइल सिस्टम-आधारित रूटिंग के साथ सभी आकारों के वेब अनुप्रयोगों के निर्माण के लिए एक ढांचा है।

प्रोजेक्ट बनाएं

निम्न आदेश चलाएँ:

npm init svelte@next todo-app-with-redis

Redis . के साथ SvelteKit TODO ऐप

परियोजना तैयार है। अब निर्भरताएँ स्थापित करते हैं और चलाते हैं:

npm install
npm run dev

Redis . के साथ SvelteKit TODO ऐप

उपयोगकर्ता इंटरफ़ेस

हम टूडू आइटम रखने के लिए एक साधारण फॉर्म और एक सूची बनाते हैं। यह अभी के लिए खाली होगा, बाद में हम इसे डेटाबेस से जोड़ देंगे।

// src/routes/index.svelte

<script lang="ts">
  import type {Todo} from "../lib/types";
  import TodoItem from "../components/Todo.svelte";

  export let todos: Todo[] = [
    {
      id: '1',
      text: 'Create database',
      status: true
    },
    {
      id: '2',
      text: 'Copy database url',
      status: false
    }
  ];

  const uncheckedTodos = todos.filter((todo) => !todo.status);
  const checkedTodos = todos.filter((todo) => todo.status);
</script>

<main class="container">
  <form class="new" action="/" method="post">
    <input
      type="text"
      name="text"
      autofocus
      aria-label="Add todo"
      class="input"
      placeholder="What needs to be done?"
    />
  </form>

  {#if uncheckedTodos.length}
    <div class="todos">
      {#each uncheckedTodos as todo (todo.id)}
        <TodoItem {todo}/>
      {/each}
    </div>
  {/if}

  {#if checkedTodos.length}
    <div class="todos todos-done">
      {#each checkedTodos as todo (todo.id)}
        <TodoItem {todo}/>
      {/each}
    </div>
  {/if}
</main>

यहाँ हमारा TODO घटक है:

// src/components/Todo.svelte

<script lang="ts">
  import type {Todo} from "../lib/types";

  export let todo: Todo;
</script>

<div class="todo">
  <form action="/?_method=PATCH" method="post">
    <input type="hidden" name="todo" value={JSON.stringify(todo)}/>
    <button
      class="checkbox"
      aria-label="Mark todo as {todo.status ? 'not done' : 'done'}"
    >
      {todo.status ? "✓" : ""}
    </button>
  </form>

  <span class="text">{todo.text}</span>

  <form action="/?_method=DELETE" method="post">
    <input type="hidden" name="id" value={todo.id}/>
    <button class="delete" aria-label="Delete todo">✕</button>
  </form>
</div>

अब आपको देखना चाहिए:

Redis . के साथ SvelteKit TODO ऐप

डेटाबेस तैयार करें

हम अपना डेटा Upstash Redis में रखेंगे। इसलिए एक Upstash डेटाबेस बनाएं। हम HTTP आधारित अपस्टैश क्लाइंट का उपयोग करेंगे जो सर्वर रहित वातावरण के अनुकूल है। आइए स्थापित करें:

npm install @upstash/redis

चलिए अब Upstash कंसोल पर अपना Redis डेटाबेस बनाते हैं। UPSTASH_REDIS_REST_URL को कॉपी/पेस्ट करें। और UPSTASH_REDIS_REST_TOKEN .env फ़ाइल में।

UPSTASH_REDIS_REST_URL=https://global-renewing-gecko-31543.upstash.io
UPSTASH_REDIS_REST_TOKEN=AXs3ACsjfg684jJBFQgN34je7RFJ58wYjg4NjMt=

हमें dotenv . स्थापित करने की आवश्यकता है पर्यावरण चर का उपयोग करने के लिए।

npm install dotenv

अब lib/redis.ts बनाएं और नीचे के रूप में एक नया रेडिस उदाहरण बनाएं:

// src/lib/redis.ts

import "dotenv/config";
import { Redis } from "@upstash/redis";

export const databaseName =
  process.env.NODE_ENV === "development"
    ? "redis-with-svelte-kit-dev"
    : "redis-with-svelte-kit";

const redis = new Redis({
  url: process.env.UPSTASH_REDIS_REST_URL,
  token: process.env.UPSTASH_REDIS_REST_TOKEN,
});

export default redis;

एपीआई बनाएं

फ़ोल्डर में, js/ts फाइलों का उपयोग एपीआई बैकएंड के रूप में किया जाता है। तो index.svelte -> फ्रंटएंड, index.ts -> बैकएंड।

आइए बनाते हैं index.ts और आवश्यक API विधियाँ जोड़ें।

// src/routes/index.ts

import redis, { databaseName } from "../lib/redis";
import type { RequestHandler } from "@sveltejs/kit";

const redirect = {
  status: 303,
  headers: {
    location: "/",
  },
};

export const get: RequestHandler = async () => {
  // runs every time the page is loaded
  return { body: { todos: [] } };
};

export const post: RequestHandler = async ({ request }) => {
  // form: create todo
  return redirect;
};

export const patch: RequestHandler = async ({ request }) => {
  // form: update todo
  return redirect;
};

export const del: RequestHandler = async ({ request }) => {
  // form: delete todo
  return redirect;
};

POST टूडू बनाएं

आइए TODO आइटम निर्माण को लागू करें:

// src/routes/index.ts

export const post: RequestHandler = async ({ request }) => {
  const form = await request.formData();
  const text = form.get("text");
  const id = Date.now().toString();

  const todo = JSON.stringify({ text, status: false });

  await redis.hset(databaseName, id, todo);
  return redirect;
};

GET लोड टोडोस

अब, TODO मदों की सूची बनाते हैं:

// src/routes/index.ts

export const get: RequestHandler = async () => {
  let todos = [];

  const data = await redis.hgetall(databaseName);
  if (!data) return { body: { todos } };

  // normalize data
  todos = Object.keys(data)
    .map((key) => ({
      id: key,
      text: data[key]["text"],
      status: data[key]["status"],
    }))
    // id = timestamp
    .sort((a, b) => parseInt(b.id) - parseInt(a.id));

  return { body: { todos } };
};
<ब्लॉकक्वॉट>

पोस्ट को सरल रखने के लिए, मैंने task deletion नहीं जोड़ा और taks completion यहां कोड है, लेकिन आप उन्हें जीथब रेपो में देख सकते हैं।

अब सब कुछ तैयार है!

स्रोत कोड| डेमो ऐप

मैं उसी TODO एप्लिकेशन को Next.js के साथ लागू करने की योजना बना रहा हूं। फिर मैं इन ढांचे में अपने अनुभव की तुलना करूंगा।

बने रहें और हमें Twitterand Discord पर फ़ॉलो करें।


  1. एज कैशिंग के साथ 5 एमएस ग्लोबल रेडिस लेटेंसी

    जब डेटाबेस और क्लाइंट एक ही क्षेत्र में हों, तो Redis के साथ 1 ms लेटेंसी आसान होती है। लेकिन अगर आप चाहते हैं कि ग्राहकों को विश्व स्तर पर वितरित किया जाए तो विलंबता 100 एमएस से अधिक हो जाती है। हमने इसे दूर करने के लिए एज कैशिंग का निर्माण किया। एज कैशिंग एज कैशिंग के साथ, सीडीएन की तरह, आरईएसटी

  1. रेडिस @ एज विद क्लाउडफ्लेयर वर्कर्स

    एज पर कंप्यूटिंग हाल के वर्षों में सबसे रोमांचक क्षमताओं में से एक है। सीडीएन आपको अपनी फाइलों को अपने उपयोगकर्ताओं के करीब रखने की अनुमति देता है। एज कंप्यूटिंग आपको अपने एप्लिकेशन को अपने उपयोगकर्ताओं के करीब चलाने की अनुमति देता है। यह डेवलपर्स को विश्व स्तर पर वितरित, प्रदर्शनकारी एप्लिकेशन बनान

  1. उदाहरण के साथ Redis GEORADIUSBYMEMBER कमांड - Redis Tutorial

    इस ट्यूटोरियल में, हम सीखेंगे कि भू-स्थानिक मूल्य के तत्वों को एक कुंजी पर कैसे संग्रहीत किया जाए, जो विशिष्ट क्षेत्र के अंतर्गत आता है। इसके लिए हम एक Redis GEORADIUSBYMEMBER  . का उपयोग करेंगे आदेश। GEORADIUSBYMEMBER कमांड इस कमांड का उपयोग एक कुंजी पर संग्रहीत भू-स्थानिक मूल्य (सॉर्टेड सेट) के