「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Redis Crud を簡単に実行する例

Redis Crud を簡単に実行する例

2024 年 11 月 19 日に公開
ブラウズ:897

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

マネージャー Redis

manage.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
}

エンティティ (顧客) リポジトリを管理するための Struct の作成

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
}

構造体エンティティの作成

Customers エンティティに、パン フィールドにマップされたタグを追加します。
redis:"-" は、redis に保存するフィールドとの関係を作成します。 1 つのファイルが必要な場合、または構造体が保存されない場合は、タグを追加しないでください。

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

CRUDメソッド

エンティティから情報を保存、更新、または取得するメソッドの例。
これらのメソッドは、CustomersRepo エンティティから使用されます。
彼らは情報を含む顧客エンティティを受け取り、操作に応じて結果を返します。

新しいレコードを保存する

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

IDのレコードを取得する

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