」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 快速使用 Redis Crud 範例

快速使用 Redis Crud 範例

發佈於2024-11-19
瀏覽:788

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管理器

建立一個檔案來管理.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
}

建立結構體實體

在客戶實體上新增與bun欄位對應的標籤。
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()
}

取得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]刪除
最新教學 更多>
  • 如何使用正規表示式驗證電子郵件地址:語法與完整驗證?
    如何使用正規表示式驗證電子郵件地址:語法與完整驗證?
    如何使用正規表示式驗證電子郵件地址透過表單收集使用者輸入時,確保提供的電子郵件地址有效至關重要。正規表示式 (regex) 提供了執行此驗證的便捷方法。然而,僅驗證語法是不夠的。 語法驗證要執行基本語法驗證,可以使用以下正規表示式模式:[^@] @[^@] \.[^@] 此模式檢視以下內容標準:剛好...
    程式設計 發佈於2024-11-19
  • 為什麼我們要在程式退出之前呼叫 C++ 中的「delete」?
    為什麼我們要在程式退出之前呼叫 C++ 中的「delete」?
    為什麼在程式退出之前在C中呼叫delete? 在C中,在程式終止之前明確調用堆分配記憶體的delete是很重要的。如果不這樣做,可能會導致記憶體洩漏和不可靠的應用程式行為。 程式退出時的記憶體釋放雖然大多數作業系統在程式退出時自動回收堆內存,僅依賴這種預設行為可能會出現問題。造成這種情況的主要原因有...
    程式設計 發佈於2024-11-19
  • 儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    解決PHP 中的POST 請求故障在提供的程式碼片段中:action=''而非:action="<?php echo $_SERVER['PHP_SELF'];?>";?>"檢查$_POST陣列:表單提交後使用 var_dump 檢查 $_POST 陣列的內...
    程式設計 發佈於2024-11-19
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-11-19
  • 如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    在 PHP 中組合關聯數組在 PHP 中,將兩個關聯數組組合成一個數組是常見任務。考慮以下請求:問題描述:提供的代碼定義了兩個關聯數組,$array1 和 $array2。目標是建立一個新陣列 $array3,它合併兩個陣列中的所有鍵值對。 此外,提供的陣列具有唯一的 ID,而名稱可能重疊。要求是建...
    程式設計 發佈於2024-11-19
  • ::content 偽元素如何在 Shadow DOM 中啟用深度樣式?
    ::content 偽元素如何在 Shadow DOM 中啟用深度樣式?
    揭開Shadow DOM 中的::content/:slotted 偽元素Shadow DOM 是Web 元件的一個關鍵方面,它引入了一種封裝和分離內容的新穎方法。在此領域中,::content(以前稱為 ::slotted)偽元素在啟用 ShadowTree 內的分散式節點的深層樣式方面發揮關鍵作...
    程式設計 發佈於2024-11-19
  • 大批
    大批
    方法是可以在物件上呼叫的 fns 數組是對象,因此它們在 JS 中也有方法。 slice(begin):將陣列的一部分提取到新數組中,而不改變原始數組。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index ...
    程式設計 發佈於2024-11-19
  • 如何在 InnoDB 中鎖定不存在的行:困境和解決方案
    如何在 InnoDB 中鎖定不存在的行:困境和解決方案
    鎖定不存在的 InnoDB 行:技術困境在資料庫管理領域,通常需要確保操作以原子方式執行,防止任何衝突或不一致。在處理可能嘗試修改相同資料的並發事務時尤其如此。在本文中,我們解決了一個需要鎖定不存在的 InnoDB 行的特定場景。 提出的問題是:如何確定資料庫中不存在使用者名,然後將其插入為一個新行...
    程式設計 發佈於2024-11-19
  • PHP 的 `__get` 和 `__set` 魔術方法何時被實際呼叫?
    PHP 的 `__get` 和 `__set` 魔術方法何時被實際呼叫?
    PHP 魔術方法:為屬性重載揭開__get 和__set 的面紗在PHP 中,__get 和__set 魔術方法提供了另一種處理方法超越傳統getter 和setter 的屬性存取和修改。這些方法使開發人員能夠在未明確定義所要求的屬性時攔截和自訂屬性存取的行為。 但是,一個常見的誤解是 __get ...
    程式設計 發佈於2024-11-19
  • 為什麼在使用 Node.js 連接到 MySQL 時出現「connect ECONNREFUSED」錯誤?
    為什麼在使用 Node.js 連接到 MySQL 時出現「connect ECONNREFUSED」錯誤?
    了解Node.js MySQL 的ECONNREFUSED 錯誤嘗試使用Node.js 建立與MySQL 資料庫的連線時,開發人員可能會遇到錯誤訊息“連接ECONNREFUSED”。這表明伺服器端拒絕連接,有效阻止客戶端應用程式存取資料庫。 查詢中提供的程式碼片段包括以下設定:var client ...
    程式設計 發佈於2024-11-19
  • 什麼時候應該使用 JavaScript Click 而不是 WebDriver Click?
    什麼時候應該使用 JavaScript Click 而不是 WebDriver Click?
    WebDriver click() vs JavaScript click()WebDriver click() vs JavaScript click() 背景:用戶有報告遇到了WebDriver 的「點擊」指令無法與某些元素互動的情況,而使用JavaScript 點擊作為解決方法可以繞過問題。這...
    程式設計 發佈於2024-11-19
  • 為什麼 JavaScript 中 [1,2] + [3,4] 等於「1,23,4」?
    為什麼 JavaScript 中 [1,2] + [3,4] 等於「1,23,4」?
    JavaScript 中意外的陣列串連:為什麼 [1,2] [3,4] = "1,23,4"? 在JavaScript 中,嘗試使用運算子將兩個陣列的元素相加,如表達式[1,2] [3,4] 中所示,會產生以下意外結果「1,23,4」而非[1,2,3,4]。這種行為是由於以下原因...
    程式設計 發佈於2024-11-19
  • 如何在 Java 8 中透過 ExecutorService 使用目前執行緒執行任務?
    如何在 Java 8 中透過 ExecutorService 使用目前執行緒執行任務?
    問題:利用目前執行緒的ExecutorService 選項問題:利用目前執行緒執行任務的ExecutorService,避免建立單獨的執行緒池或依賴單一線程的線程池。 答案:Java 8 的簡化方法Java 8 提供了一個優雅的解決方案:Executor e = Runnable::run;Exec...
    程式設計 發佈於2024-11-19
  • 如何在無頭環境中運行 Selenium:克服「無法開啟顯示」錯誤?
    如何在無頭環境中運行 Selenium:克服「無法開啟顯示」錯誤?
    如何在Xvfb 中運行Selenium:克服“無法打開顯示”錯誤Xvfb(X Virtual Framebuffer)提供了一個虛擬顯示,允許在無頭環境中執行圖形應用程序,例如缺少GUI 的EC2 實例。這對於在沒有圖形使用者介面的伺服器上執行 Selenium 測試至關重要。 但是,即使安裝 Se...
    程式設計 發佈於2024-11-19
  • 如何將 C++ 介面公開給 Python 來實作?
    如何將 C++ 介面公開給 Python 來實作?
    向Python 公開C 介面以進行實作目標將C 介面的Python 實作整合到現有C 程式中,讓Python 實作在更大的程式中無縫使用。 介面定義考慮以下 C 介面定義:class myif { public: virtual float myfunc(float a) = 0; };在Pyt...
    程式設計 發佈於2024-11-19

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3