"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > اذهب إلى Redis Crud مثال سريعًا

اذهب إلى Redis Crud مثال سريعًا

تم النشر بتاريخ 2024-11-19
تصفح:944

Go Redis Crud quickly example

تثبيت التبعيات ومتغير البيئة

استبدل القيم من اتصال قاعدة البيانات بالقيم الخاصة بك.

#env file
REDIS_ADDRESS=localhost
REDIS_PORT=6379
REDIS_PASSWORD=123456
REDIS_DB=0

#install on go
go get github.com/redis/go-redis/v9

مدير ريديس

أنشئ ملفًا لإدارة.go سيحتوي هذا على طريقة للاتصال بـ redis على سبيل المثال في الوحدات والخدمات الأخرى.

package main

import (
    "fmt"
    "github.com/redis/go-redis/v9"
    "os"
    "strconv"
)

const CustomerDb = 0

type RedisManager struct {
    Db     int
    Client *redis.Client
}

func NewRedisClient(customerDb int) (*RedisManager, error) {
    address := os.Getenv("REDIS_ADDRESS")
    if address == "" {
        return nil, fmt.Errorf("REDIS_ADDRESS is not set")
    }
    password := os.Getenv("REDIS_PASSWORD")
    if password == "" {
        return nil, fmt.Errorf("REDIS_PASSWORD is not set")
    }
    port := os.Getenv("REDIS_PORT")
    if port == " " {
        return nil, fmt.Errorf("REDIS_PORT is not set")
    }
    db := os.Getenv("REDIS_DB")
    if db == "" {
        return nil, fmt.Errorf("REDIS_DB is not set")
    }
    redisDb, err := strconv.Atoi(db)
    if err != nil {
        return nil, fmt.Errorf("REDIS_DB is not a number")
    }
    cli := redis.NewClient(&redis.Options{
        Addr:     fmt.Sprintf("%s:%s", address, port),
        Password: password,
        DB:       redisDb,
    })
    return &RedisManager{
        Client: cli,
        Db:     customerDb,
    }, nil
}
func (rd *RedisManager) SetDb(db int) {
    rd.Db = db
}

إنشاء هيكل لإدارة مستودع الكيان (العميل).

أنشئ هيكلًا لإدارة اتصال redis واحصل على جميع الطرق للتفاعل مع كيان redis (عمليات واستعلامات CRUD)
باستخدام هذه البنية، في أي وقت نحتاج فيه إلى الوصول إلى بيانات الكيان (العميل)، يمكننا مثيلها والبدء في استخدامها كنمط مستودع.

type CustomerRepo struct {
    Cli *RedisManager
    Db  int
}

func NewCustomerRepo() (*CustomerRepo, error) {
    cli, err := NewRedisClient(CustomerDb)
    if err != nil {
        return nil, err
    }
    return &CustomerRepo{
        Cli: cli,
    }, nil
}

إنشاء كيان هيكلي

في كيان العملاء، أضف العلامات التي تم تعيينها باستخدام حقول الكعكة.
redis:"-" يقوم بإنشاء علاقة مع الحقول المراد حفظها على redis. إذا كنت تريد ملفًا واحدًا أو لم يتم حفظ البنية، فلا تقم بإضافة العلامة.

type Customer struct {
    ID    string `redis:"id"`
    Name  string `redis:"name"`
    Email string `redis:"email"`
    Phone string `redis:"phone"`
    Age   int    `redis:"age"`
}

الأساليب الخام

مثال على طريقة تخزين أو تحديث أو الحصول على المعلومات من الجهة.
يتم استخدام هذه الأساليب من كيان CustomersRepo.
لقد استلموا كيان العميل بالمعلومات واعتمادًا على العملية، قم بإرجاع النتيجة.

حفظ سجل جديد

func (c *CustomerRepo) Save(customer *Customer) error {
    return c.Cli.Client.HSet(context.TODO(), customer.ID, customer).Err()
}

الحصول على سجل لبطاقة الهوية

func (c *CustomerRepo) Get(id string) (*Customer, error) {
    customer := &Customer{}
    resMap := c.Cli.Client.HGetAll(context.TODO(), id)
    if resMap.Err() != nil {
        return nil, resMap.Err()
    }
    if len(resMap.Val()) == 0 {
        return nil, nil
    }
    err := resMap.Scan(customer)
    if err != nil {
        return nil, err
    }
    return customer, nil
}

تحديث سجل جديد

func (c *CustomerRepo) Update(customer *Customer) error {
    return c.Cli.Client.HSet(context.TODO(), customer.ID, customer).Err()
}

حذف سجل جديد

func (c *CustomerRepo) Delete(id string) error {
    return c.Cli.Client.Del(context.TODO(), id).Err()
}

قم بمراجعة مثال الكود

مثال Redis لاختباره

بيان الافراج تم نشر هذه المقالة على: https://dev.to/luigiescalante/go-redis-crud-quickly-example-2agj?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3