Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Redis

เพิ่มประสิทธิภาพ Strapi ด้วย Serverless Redis Caching

การส่งมอบโปรเจกต์ทันเวลามักหมายถึงการใช้ประโยชน์จากเทคโนโลยีที่มีอยู่ให้มากที่สุด ทุกการตัดสินใจที่นำไปสู่ Custom Implementation ต้องคิดว่าคุณต้อง Maintain โซลูชันของตัวเองด้วย นี่คือเหตุผลที่ Open-source Tools เช่น Strapi จึงเป็นทางเลือกสำหรับการสร้าง REST API โปรเจกต์ถัดไป

Strapi เป็น Headless CMS ระดับ State-of-the-art ให้คุณกำหนด Schema ด้วย Graphical Interface ทำให้ Non-technical People สามารถ Model Data ได้ Development Team สามารถโฟกัสสร้าง Web/Mobile Apps และส่งฟีเจอร์ใหม่โดยไม่กังวล Backend Implementation เพราะมี Big Open-source Community Maintain Strapi

เร่งความเร็ว Backend

Strapi เร็วพอสมควรในการส่ง Response ด้วย SQLite แต่เมื่อ Data และ User Base โตขึ้น อาจไม่ใช่ Best Solution หลัง Hit The Market อาจมี Users พันๆ คนกระจายทั่วโลก

คุณต้อง Scale Out Strapi และ Database Deployments เพื่อรับ Load นั้นๆ จะดีมากถ้าแค่ Plug In Cache ได้ไหม?

เข้าสู่ REST Cache

Strapi REST Cache เป็นชุด Strapi Plugins ช่วยเพิ่ม LRU Caching ให้ Strapi App ลด Actual Database Requests

รองรับ Memory, Couchbase และ Redis และเขียน Custom Provider ได้ ส่วนที่น่าตื่นเต้นคือ Redis Cache Provider ที่เชื่อมต่อ Upstash Redis ได้ในไม่กี่นาที!

Upstash Redis ใช้ได้ใน Scenario ส่วนใหญ่ที่ใช้ Redis ความต่างคือ Setup ได้ไม่กี่คลิก มาพร้อม Global Replication Strapi Instances จะ Route ไป Replica ใกล้ที่สุด สำคัญสำหรับ Fast Cache และเป็น Serverless จ่ายแค่ที่ใช้

มาดูวิธีทำให้ Strapi รันกับ Upstash Redis!

ข้อกำหนดเบื้องต้น

ต้องมี Upstash Account และ Node.js Installation ต้องมี Yarn (Package Manager ที่ Strapi ชอบ)

สร้าง Strapi Project

ข้ามไป "Adding the REST Cache" ได้เลยหากมี Strapi Project อยู่แล้ว ขั้นตอนด้านล่างเพื่อ Setup Data ทำงาน

ขั้นแรก สร้าง Backend ใหม่กับ Strapi:

$ npx create-strapi-app@latest strapi-upstash-redis-cache

หลัง Command เสร็จ Strapi จะเปิด Browser ขอ Admin Login Details สร้าง Data Model และ Content แรก

Modeling Data ด้วย Content-Type Builder

หลัง Login สร้าง Collection Type แรกด้วย Strapi Content-Type Builder Figure 1 แสดงตำแหน่ง Content-Type Builder ใน Strapi Admin Console

เพิ่มประสิทธิภาพ Strapi ด้วย Serverless Redis Caching

กด "Create new collection type" สร้าง Type ใหม่ ชื่อ "Article" เพิ่ม 2 Text Fields Field หนึ่ง Short Text ชื่อ "title" อีกอัน Long Text ชื่อ "content"

Figure 2 แสดง Type ควรเป็นอย่างไรก่อนกด "Save"

เพิ่มประสิทธิภาพ Strapi ด้วย Serverless Redis Caching

หลังนั้น ต้องมี Instance จริงของ Content Type นั้น

สร้าง Content ด้วย Content Manager

ดูตำแหน่ง Content Manager ใน Figure 1 ไปที่นั่น กด "Create new entry" มุมขวาบน

Figure 3 แสดง New Content Entry UI อย่าลืมกด "Save" และ "Publish" มิฉะนั้นจะเป็น Private Draft เข้าถึง Public API ไม่ได้

เพิ่มประสิทธิภาพ Strapi ด้วย Serverless Redis Caching

ตั้งค่า Permissions สำหรับ Content-Type

มี Article Type และ Article จริง แต่เข้าถึง Public ไม่ได้ ต้อง Update Public Role Figure 4 แสดงตำแหน่งใน Navigation

เพิ่มประสิทธิภาพ Strapi ด้วย Serverless Redis Caching

กด Public Role แล้ว "Article" Permissions เลือก "find" และ "findOne" กด "Save" ทุกคนเปิด API จะ List Articles ทั้งหมดและ Load Article เดียวได้

Default Strapi Settings ควรให้ Resource ที่ URL:

https://localhost:1337/api/articles

Response ควรประมาณนี้:

{
    "data": [
        {
            "id": 2,
            "attributes": {
                "title": "My First Article",
                "content": "This is an article!",
                "createdAt": "2022-04-06T15:29:48.104Z",
                "updatedAt": "2022-04-06T15:29:48.949Z",
                "publishedAt": "2022-04-06T15:29:48.948Z"
            }
        }
    ],
    "meta": {
        "pagination": {
            "page": 1,
            "pageSize": 25,
            "pageCount": 1,
            "total": 1
        }
    }
}

เพิ่ม REST Cache

สุดท้าย ส่วนน่าตื่นเต้น: เพิ่ม Caching ด้วย Upstash Redis!

ติดตั้ง 3 Packages ก่อน:

yarn add strapi-plugin-redis \
strapi-plugin-rest-cache \
strapi-provider-rest-cache-redis

3 Packages นี้ทำให้ Strapi ส่ง Data ไป Upstash Redis Database ได้

สร้าง Upstash Redis Database

เพื่อ Configure Cache ให้ถูกต้อง ต้องการ URL ของ Redis Instance สร้าง Upstash Redis Database เปิด Upstash Console กด "Create database"

หลังสร้างเสร็จ Grab Database URL ใช้ไม่กี่วินาที เลือก Tab "Node" คัดลอก URL จาก Code Example ตาม Figure 5

เพิ่มประสิทธิภาพ Strapi ด้วย Serverless Redis Caching

ตั้งค่า REST Cache

สร้างไฟล์ที่ config/plugins.js เนื้อหาดังนี้:

// config/plugins.js
module.exports = {
    redis: {
        config: {
            connections: {
                default: {
                    connection: "REDIS_URL"
                },
            },
        },
    },
    "rest-cache": {
        config: {
            provider: {
                name: "redis"
            },
            strategy: {
                contentTypes: [{
                    contentType: "api::article.article",
                    hitpass: false
                }],
                // debug: true,
            },
        },
    },
};

ใน Field redis ตั้งค่า Connection ไป Upstash Redis Database URL จากขั้นตอนก่อนหน้ามี Credentials ทั้งหมดที่ Strapi ต้องการ

ใน rest-cache field บอก Cache ว่าใช้ Provider อะไร และ Cache Content Type ไหน ในกรณีนี้คือ Article Content Type hitpass: false ทำให้ Content ถูก Cache เสมอ แม้จะมี Authentication เกิดขึ้น

ถ้า Un-comment debug: true จะเห็น Debug Output ช่วยดูว่า Cache ทำงานหรือไม่

Strapi ใช้ SQLite เป็น Default รัน In-process บน Development Computer จะเร็วกว่า Upstash Redis ที่ Deploy กิโลเมตรไกล ใน Production Environment กับ Real Database Server จะต่างออกไป

ทดสอบ Cache

หลัง Config ถูกต้อง Restart Dev Server:

yarn run develop

Server Up แล้ว เข้าถึงได้ที่ URL:

https://localhost:1337/api/articles

Database จะ Serve Request แรก Upstash Redis จะทำ Request ต่อไป

ข้อสรุป

เร่ง Strapi Deployment ใช้ไม่กี่นาทีกับ Upstash Redis Upstash Console ให้ URL วางใน Config ได้เลย เสร็จสิ้น

Upstash Redis Database แรกฟรี ลองดู ไม่ต้อง Credit Card!