Upstash Redis और Fly.io का उपयोग करके एज पर एक लीडरबोर्ड बनाएं
<पी> गतिशील और आकर्षक वेब अनुप्रयोगों में, लीडरबोर्ड प्रतिस्पर्धा और उपयोगकर्ता जुड़ाव को बढ़ावा देने के लिए एक शक्तिशाली उपकरण हैं। इस ट्यूटोरियल में, हम अपस्टैश रेडिस का उपयोग करके एक वास्तविक समय लीडरबोर्ड बनाने की यात्रा शुरू करेंगे। बैकएंड स्टोरेज के रूप में और इसे Fly.io के साथ किनारे पर तैनात करें . यह गतिशील जोड़ी Fly.io की वैश्विक वितरण क्षमताओं के साथ सर्वर रहित रेडिस सेवा की दक्षता को जोड़ती है, जो दुनिया भर के उपयोगकर्ताओं के लिए कम-विलंबता पहुंच सुनिश्चित करती है।अपस्टैश रेडिस के बारे में
<पी> अपस्टैश एक क्लाउड सेवा है यह सादगी, मापनीयता और उपयोग में आसानी पर ध्यान केंद्रित करते हुए पूरी तरह से प्रबंधित रेडिस सेवा प्रदान करता है। रेडिस, जो अपनी बहुमुखी प्रतिभा और उच्च-प्रदर्शन वाली इन-मेमोरी डेटा स्टोर क्षमताओं के लिए जाना जाता है, अपस्टैश के साथ जोड़े जाने पर और भी अधिक आकर्षक हो जाता है। अपस्टैश के साथ, डेवलपर्स बुनियादी ढांचे के प्रबंधन से जुड़ी परिचालन जटिलताओं के बिना विभिन्न उपयोग के मामलों के लिए रेडिस को निर्बाध रूप से तैनात और स्केल कर सकते हैं। <पी> अपस्टैश रेडिस की प्रमुख विशेषताओं में शामिल हैं:- <पी> तैनाती में आसानी: अपस्टैश परिनियोजन प्रक्रिया को महत्वपूर्ण रूप से सरल बनाता है, जिससे यह उन डेवलपर्स के लिए एक उत्कृष्ट विकल्प बन जाता है जो बुनियादी ढांचे से जुड़ी परिचालन जटिलताओं को कम करना चाहते हैं।
- <पी> उच्च प्रदर्शन: रेडिस अपने बिजली की तेजी से डेटा पुनर्प्राप्ति के लिए जाना जाता है, जो इसे कार्य कतार, संदेश पासिंग और वास्तविक समय लीडरबोर्ड को संभालने के लिए उपयुक्त बनाता है जैसा कि हम इस ट्यूटोरियल में देखेंगे। अपस्टैश के साथ, आप निर्बाध स्केलिंग के लिए क्लाउड इंफ्रास्ट्रक्चर पर भरोसा कर सकते हैं, यह सुनिश्चित करते हुए कि आपके एप्लिकेशन अलग-अलग कार्यभार को कुशलतापूर्वक संभाल सकते हैं।
- <पी> स्केलेबिलिटी: रेडिस अत्यधिक स्केलेबल है, और अपस्टैश के साथ, यह मांग के आधार पर स्वचालित रूप से स्केल कर सकता है। यह सुनिश्चित करता है कि आपका एप्लिकेशन लोड के विभिन्न स्तरों को संभालने के लिए हमेशा सुसज्जित है, जो इसे गतिशील और स्केलेबल अनुप्रयोगों के लिए एक आदर्श विकल्प बनाता है।
- <पी> डेटा स्टोर एकीकरण: रेडिस एक संदेश ब्रोकर और परिणाम स्टोर दोनों के रूप में कार्य करता है, जो आपके द्वारा प्रबंधित किए जाने वाले घटकों की संख्या को कम करके आर्किटेक्चर को सुव्यवस्थित करता है।
आवश्यकताएँ
<पी> इससे पहले कि हम अपनी यात्रा शुरू करें, सुनिश्चित करें कि आपके पास निम्नलिखित शर्तें हैं:- <पी> ए Fly.io खाता.
- <पी> फ्लास्क और पायथन का बुनियादी ज्ञान।
Fly.io खाता और Redis डेटाबेस सेट करें
<पी> Fly.io में एक खाता बनाकर प्रारंभ करें और फिर फ्लाई सीएलआई स्थापित करें: # Linux
curl -L https://fly.io/install.sh | sh
# Other type of installation: https://fly.io/docs/hands-on/install-flyctl/ <पी> इंस्टॉल करने के बाद, अपने टर्मिनल से, Fly: से लॉग इन करें fly auth login <पी> इससे एक ब्राउज़र खुल जाएगा जिसमें वह आपसे आपके द्वारा अभी बनाए गए खाते से लॉगिन को अधिकृत करने के लिए कहेगा। बढ़िया, अब आप अपने टर्मिनल से फ्लाई के साथ बातचीत कर पाएंगे। <पी> अब जब हमने फ्लाई की स्थापना कर ली है, तो आइए एक रेडिस बनाएं डेटाबेस, जिसका उपयोग हम अपना लीडरबोर्ड बनाने के लिए करने जा रहे हैं: <पी> अब हमारे पास अपना अपस्टैश रेडिस डेटाबेस है जिसे हमने एक ही कमांड के साथ Fly.io के माध्यम से बनाया है। अब आप REDIS_URL को आउटपुट से या टर्मिनल में कमांड के साथ देख सकते हैं: flyctl redis status upstash-fly-leaderboard
# Or open the upstash dashboard
fly redis dashboard <your_org_name | personal> <पी> निजी_यूआरएल पकड़ें और इसे संग्रहीत करें क्योंकि हमें अपने फ्लास्क_एपीपी में इसकी आवश्यकता होगी पी> फ्लास्क एप्लिकेशन विकसित करें
<पी> अपना लीडरबोर्ड बनाने के लिए हम फ्लास्क का उपयोग करने जा रहे हैं। फ्लास्क वेब अनुप्रयोगों के निर्माण के लिए एक न्यूनतम पायथन ढांचा है। तो आइए निर्भरताएँ स्थापित करके शुरुआत करें। # flask - for as a web application framework
# redis - A wrapper to connect and interact with Redis
# gunicorn - wsgi server for running Python web applications
$ pip install flask redis gunicorn
# export the dependencies to requirements.txt
$ pip freeze > requirements.txt <पी> अब, आइए अपने फ्लास्क ऐप की नींव रखें। एक मॉड्यूल ऐप.पी बनाकर शुरुआत करें और फ्लास्क एप्लिकेशन शुरू करने और अपस्टैश रेडिस से कनेक्ट करने के लिए न्यूनतम कोड लिखें। पी> import os
from flask import Flask, render_template, request, redirect, url_for
import redis
app = Flask(__name__)
# Read the connection string from the environment variable
UPSTASH_FLY_REDIS_CONNECTION_STRING = os.getenv('REDIS_URL')
LEADERBOARD_KEY = 'leaderboard'
# Initiate a connection to Upstash Redis Instance using the connection string
redis_client = redis.from_url(UPSTASH_FLY_REDIS_CONNECTION_STRING)
<पी> तो हम: - <पी> एक फ्लास्क ऐप शुरू किया
- <पी> पर्यावरण चर से REDIS_URL पढ़ें
- <पी> हमारे अपस्टैश रेडिस डेटाबेस के साथ इंटरैक्ट करने के लिए एक redis_client आरंभ किया गया जिसे हमने Fly.io में बनाया था।
def add_score(player_id, score):
# Add or update the score for the player in the leaderboard
redis_client.zadd(LEADERBOARD_KEY, {player_id: score})
def get_leaderboard():
leaderboard = redis_client.zrevrange(LEADERBOARD_KEY, 0, 9, withscores=True)
formatted_leaderboard = [{'player_id': player_id.decode('utf-8'), 'score': int(score)} for player_id, score in
leaderboard]
return formatted_leaderboard
<पी> फ़ंक्शन add_score एक player_id मिलती है और एक स्कोर और इसे लीडरबोर्ड में जोड़ता है. ज़ाद रेडिस में एक कमांड है जिसका उपयोग क्रमबद्ध सेट में स्कोर वाले एक या अधिक सदस्यों को जोड़ने के लिए किया जाता है। <पी> दूसरा फ़ंक्शन get_leaderboard() रेडिस सॉर्ट किए गए सेट (लीडरबोर्ड) से स्कोर के साथ शीर्ष 10 प्रविष्टियों को पुनः प्राप्त करता है, और उन्हें खिलाड़ी आईडी और उनके संबंधित स्कोर वाली एक स्वरूपित सूची में लौटाता है। <पी> ठीक है, अब अपने अपस्टैश रेडिस डेटाबेस के साथ इंटरैक्ट करने के लिए तीन एंडपॉइंट जोड़ते हैं। - <पी> [प्राप्त करें] / - लीडरबोर्ड पुनः प्राप्त करें
- <पी> POST /submit_score — लीडरबोर्ड में स्कोर सबमिट करें
- <पी> /clear_table प्राप्त करें - लीडरबोर्ड को साफ़ करता है
@app.route('/')
def leaderboard():
# Retrieve the top 10 players from the leaderboard and redirect to the leaderboard page with the data
leaderboard = get_leaderboard()
return render_template('leaderboard.html', leaderboard=leaderboard)
@app.route('/submit_score', methods=['POST'])
def submit_score():
player_id = request.form['player_id']
score = int(request.form['score'])
# Call the function to add or update the score for the player in the leaderboard
add_score(player_id, score)
return redirect(url_for('leaderboard'))
@app.route('/clear_table', methods=['GET'])
def clear_table():
# Delete all the data from the leaderboard
redis_client.delete(LEADERBOARD_KEY)
return redirect(url_for('leaderboard')) <पी> जैसा कि हम देख सकते हैं, हम इसे अधिक इंटरैक्टिव और वास्तविक समय में बनाने के लिए एक फ्रंट-एंड पेज लीडरबोर्ड.html भी प्रस्तुत कर रहे हैं। प्रोजेक्ट के मूल में, एक फ़ोल्डर टेम्पलेट्स बनाएं, और अंदर एक फ़ाइल लीडरबोर्ड.html निम्न कोड के साथ बनाएं। पी> <पी> बिल्कुल सही, अब अपने टर्मिनल में स्थानीय स्तर पर इसका परीक्षण करने के लिए पर्यावरण चर को लोड करें: # Linux
export REDIS_URL='YOUR_UPSTASH_FLY_REDIS_CONNECTION_STRING'
# Windows
set REDIS_URL='YOUR_UPSTASH_FLY_REDIS_CONNECTION_STRING'
# After that run:
$ flask run <पी> आपका एप्लिकेशन लीडरबोर्ड और लीडरबोर्ड में रिकॉर्ड जोड़ने के तरीके के साथ तैयार होना चाहिए। <पी> Fly.io पर तैनात करें
<पी> अब, आइए अपने फ्लास्क ऐप को Fly.io पर तैनात करके नई ऊंचाइयों तक ले जाएं। अपने कोडबेस के मूल से, निष्पादित करें:flyctl launch
Scanning source code
Detected a Python app
Using the following build configuration:
Builder: paketobuildpacks/builder:base
Creating app in /home/valon/code/upstash-fly-leaderboard
We're about to launch your Python app on Fly.io. Here's what you're getting:
Organization: <MyOrg> (fly launch defaults to the personal org)
Name: upstash-leaderboard (derived from your directory name)
Region: Amsterdam, Netherlands (this is the fastest region for you)
App Machines: shared-cpu-1x, 1GB RAM (most apps need about 1GB of RAM)
Postgres: <none> (not requested)
Redis: <none> (not requested)
? Do you want to tweak these settings before proceeding? (y/N) : N <पी> यह आपके कोडबेस का पता लगाएगा और आपके एप्लिकेशन नाम, कोड इत्यादि के आधार पर कुछ डिफ़ॉल्ट कॉन्फ़िगरेशन लागू करेगा। मैं डिफ़ॉल्ट सेटिंग्स के साथ जाऊंगा इसलिए मैं N के साथ जारी रखूंगा। . <पी> अब यह एक fly.toml उत्पन्न करेगा और एक प्रोफ़ाइल : app = "upstash-fly-leaderboard"
primary_region = "otp" #
[build]
builder = "paketobuildpacks/builder:base"
[env]
PORT = "8080"
[http_service]
internal_port = 8080 # Port where the app runs
force_https = true
auto_stop_machines = true
auto_start_machines = true
min_machines_running = 0
processes = ["app"]
[[vm]]
cpu_kind = "shared"
cpus = 1
memory_mb = 1024 <पी> मैंने उस क्षेत्र को छोड़कर, जिसे मैं ओटीपी में बदलता हूं, सब कुछ डिफ़ॉल्ट के रूप में छोड़ दिया। अब Procfile को अपडेट करते हैं , जहां निष्पादन आदेश परिभाषित किया गया है, और इसे gunicorn के साथ चलाएं 8080 में बंदरगाह. web: gunicorn -b 0.0.0.0:8080 app:app <पी> जहां ऐप मॉड्यूल नाम और अन्य ऐप है मॉड्यूल में परिभाषित वेरिएबल है जहां हमने फ्लास्क ऐप को परिभाषित किया है। हम ज्यादातर काम कर चुके हैं, लेकिन याद रखें कि कोड में हमने REDIS_URL जोड़ा है एक पर्यावरण चर के रूप में, और हम अपस्टैश रेडिस के लिए स्थानीय रूप से मान निर्धारित करते हैं जिसे हमने फ्लाई सीएलआई का उपयोग करके बनाया था। , आइए इसे फ्लाई.आईओ में एक रहस्य के रूप में स्थापित करें। fly secrets set --app upstash-fly-leaderboard REDIS_URL=<> <पी> हम सब तैयार हैं, आइए ऐप को fly.io पर तैनात करें अभी: fly deploy --ha=false <पी> आउटपुट को हमें हमारे नए तैनात एप्लिकेशन पर जाने के लिए यूआरएल देना चाहिए। Watch your deployment at https://fly.io/apps/<app_name>/monitoring
-------
Updating existing machines in '<app_name>' with rolling strategy
-------
✔ Machine <machine_id> [app] update succeeded
-------
Visit your newly deployed app at https://<app_name>.fly.dev/ निष्कर्ष
<पी> इस ट्यूटोरियल में, हमने अपस्टैश रेडिस का निर्बाध एकीकरण देखा है और Fly.io एक वास्तविक समय लीडरबोर्ड बनाने के लिए। Fly.io की वैश्विक वितरण क्षमताओं के साथ सर्वर रहित रेडिस सेवा की दक्षता को जोड़कर, हमने यह सुनिश्चित किया है कि दुनिया भर के उपयोगकर्ताओं को कम-विलंबता पहुंच का अनुभव हो। <पी> उपयोगकर्ता प्रमाणीकरण, अतिरिक्त आँकड़े, या आपके एप्लिकेशन की आवश्यकताओं के अनुरूप कोई अन्य सुविधाएँ जोड़कर अपने लीडरबोर्ड एप्लिकेशन को और बेहतर बनाने के लिए स्वतंत्र महसूस करें। अपस्टैश रेडिस की शक्ति और Fly.io की वैश्विक पहुंच द्वारा संचालित, आकर्षक और उत्तरदायी वेब अनुप्रयोगों का भविष्य यहीं है। <पी> आप निर्देशों के साथ GitHub रिपॉजिटरी पर लेख का पूरा स्रोत कोड पा सकते हैं। पी> <पी> https://github.com/vjanz/upstash-fly-redis-leaderboard <पी> यदि आपके कोई प्रश्न हैं, तो बेझिझक मुझसे संपर्क करें। इसके अलावा, आप मुझसे LinkedIn, GitHub पर भी जुड़ सकते हैंसंदर्भ
<पी> अपस्टैशhttps://redis.io
https://fly.io/