首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在戈朗贝戈框架下将MySQL数据库中的数据保存到redis中?

如何在戈朗贝戈框架下将MySQL数据库中的数据保存到redis中?
EN

Stack Overflow用户
提问于 2021-11-21 16:55:11
回答 3查看 955关注 0票数 0

我正在尝试从MySQL数据库中获取数据,并每隔6小时将其存储在redis上。我在红系是全新的。我希望使用来自MySQL 的Select*从table_name DB获取数据。然后将这些数据存储到redis中。在Golang框架中有存储数据和从redis获取数据的例子吗?

EN

回答 3

Stack Overflow用户

发布于 2021-11-29 06:00:19

  1. 您可以使用go-redis和redi-go作为连接redis的工具,然后选择所需的数据类型。

例子:去红葡萄酒:

https://github.com/go-redis/redis

代码语言:javascript
复制
var ctx = context.Background()

func ExampleClient() {
    //01 connect
    rdb := redis.NewClient(&redis.Options{
        Addr:     "localhost:6379",
        Password: "", // no password set
        DB:       0,  // use default DB
    })
    err := rdb.Set(ctx, "key", "value", 0).Err()
    if err != nil {
        panic(err)
    }
    val, err := rdb.Get(ctx, "key").Result()
    if err != nil {
        panic(err)
    }
    fmt.Println("key", val)
}
  1. 结构为红

键入User struct { UserID uint32 UserName string } var ctx = context.Background()

代码语言:javascript
复制
// Set set to redis as string
func Set() {
    var u User
    marshal, err := json.Marshal(&u)
    if err != nil {
        log.Println(err)
    }
    rdb.Set(ctx,"user",string(marshal),-1)
    //-1 means no expiration time
}

// Get get from redis
func Get() {
    var u User
    bytes, err := rdb.Get(ctx, "user").Bytes()
    if err != nil {
        log.Println(err)
    }
    err = json.Unmarshal(bytes, &u)
    if err != nil {
        log.Println(err)
    }
}
票数 0
EN

Stack Overflow用户

发布于 2022-01-11 10:18:48

您应该同时使用雷迪斯克伦工作。因为,您希望每6小时以redis格式存储数据。

我为您的场景创建了一个示例示例,如下所示:

代码语言:javascript
复制
func SetData(c *RedisClient, key string, value interface{}){
 
        //-1 means no expiration time
        err := c.Set(ctx,key,value,-1).Err()
   
       if err != nil{
         panic(err)
       }

}

func GetData() {

    //fetch your table data from database
    //take instance of redis client
    //call SetData()
        //var user_val model.User{}
    //assuming you have fetched data in user_val

    SetData(redis_client_instance, "user", user_val)
}

现在,打电话给GetData()内部的cron-作业,从中午12点开始,并在红区的每6次添加数据。

代码语言:javascript
复制
 //pick the start time inside NewScheduler
 //if you want you can load your zone time.
    s := gocron.NewScheduler(time.UTC)
    
    s.Every(6).Hours().Do(GetData)
票数 0
EN

Stack Overflow用户

发布于 2022-01-12 11:33:07

我不确定你是在用Beego来要求密码。或者你只是需要指导你的问题。做这件事有几种方法,它们都有自己的缺点。

  1. 使用票证或短期作业来加载最近的6小时数据。在下一个代码运行之前,您无法从缓存中读取最多的租金更新或插入。
  2. 在MYSQL和REDIS中双写。REDIS缓存可以为加载最近6小时的数据进行一次热身。当您成功地编写MYSQL但REDIS失败时,您可能会发现REDIS和MYSQL之间的数据不一致。
  3. 订阅MYSQL的bin日志并在REDIS上重播所有bin日志。您可能会发现一些开源项目可以在Github上完成。对于这个问题,它是一个复杂的解决方案,但它在It公司中很常见。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70056690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档