Замените значения из подключения к базе данных на свои.
#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
Создайте файл 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 }
Создайте структуру для управления соединением 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() }
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 для тестирования
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3