为了账号安全,请及时绑定邮箱和手机立即绑定

从 Mysql 表中查询所有行并存储为缓存

从 Mysql 表中查询所有行并存储为缓存

Go
慕标5832272 2022-06-06 16:44:32
我有一张桌子需要在我的应用程序中进行一些收费。我正在尝试将此表加载到 JSON 结构中并将其用作缓存。这是我的方法:桌子:CREATE TABLE `lwratecarddefinition` (  `RATECARDID` int(10) DEFAULT NULL AUTO_INCREMENT,  `RATECARDGROUPID`   int(10)  DEFAULT NULL,  `SERVICEID` varchar(10) DEFAULT NULL,  `USAGETYPEID` varchar(10) DEFAULT NULL,  `CURRENCYCODE` varchar(4) DEFAULT NULL,  `LEDGERID` varchar(15) DEFAULT NULL,  `PULSE` varchar(10) DEFAULT NULL,  `SPECIALPULSE` varchar(10) DEFAULT NULL,  `NORMALRATE` varchar(10) DEFAULT NULL,  `OFFPEAKSET` varchar(2) DEFAULT NULL,  `OFFPEAKRATE` varchar(10) DEFAULT NULL,  `PEAKRATE` varchar(10) DEFAULT NULL,  `ONDEMANDSET` varchar(2) DEFAULT NULL,  `ONDEMANDRATE` varchar(2) DEFAULT NULL,   KEY `idx_lwratecarddefinition_RATECARDID` (`RATECARDID`),   KEY `idx_lwratecarddefinition_RATECARDGROUPID` (`RATECARDGROUPID`),   KEY `idx_lwratecarddefinition_USAGETYPEID` (`USAGETYPEID`),   KEY `idx_lwratecarddefinition_SERVICEID` (`SERVICEID`)   ) ENGINE=InnoDB DEFAULT CHARSET=utf8main.go 代码片段 - (我的目标是每 1 分钟使用 go 例程获取记录)    // load the ratecard first    lwratecardefinition = getRatecard()    // update data every 1 second    go func() {        for {            time.Sleep(time.Second)            lwratecardefinition = getRatecard()            fmt.Println(lwratecardefinition)            }    }()dbfunction.gopackage mainimport (    "database/sql"  _ "github.com/go-sql-driver/mysql")type Lwratecardefinition struct {        Ratecardid        int    `json:"ratecardid"`        Ratecardgroupid   int    `json:"ratecardgroupid"`        Serviceid         int    `json:"serviceid"`        Usagetypeid       int    `json:"usagetypeid"`        Currencycode      int    `json:"currencycode"`        Ledgerid          string `json:"ledgerid"`}return lwratecardefinition}但是当我执行程序时,我只从 mysql 表中获取一行而不是所有行。我需要所有行将其用作缓存。输出:{4 508 1 201 1 DATA 60 30 2 1 3 1 1 5}我的最终目标也是使用这些值来查找速率和脉冲。如果 Ratecardgroupid = X 值和 Serviceid = Y 值,我想使用同一行的脉冲值。请提出这里有什么问题以及该方法是否可以减少数据库调用以及逻辑。
查看完整描述

1 回答

?
30秒到达战场

TA贡献1828条经验 获得超6个赞

但是当我执行程序时,我只从 mysql 表中获取一行而不是所有行


因为您的函数仅返回单个Lwratecardefinition结构,您在循环的每次迭代中覆盖其值。您想返回它们的一部分,例如:


func getRatecard() []Lwratecardefinition {

   ...

   var result []Lwratecardefinition

   for results.Next() {

     err = results.Scan(&ratecardid,&ratecardgroupid,&serviceid,&usagetypeid,&currencycode,&ledgerid,&pulse,&specialpulse,&normalrate,&offpeakset,&offpeakrate,&peakrate,&ondemandset,&ondemandrate)

     result = append(result, Lwratecardefinition{Ratecardid: ratecardid, Ratecardgroupid: ratecardgroupid, Serviceid: serviceid, Usagetypeid: usagetypeid, Currencycode: currencycode, Ledgerid: ledgerid, Pulse: pulse, Specialpulse: specialpulse, Normalrate: normalrate, Offpeakset: offpeakset, Offpeakrate: offpeakrate, Peakrate: peakrate, Ondemandset: ondemandset, Ondemandrate: ondemandrate})

   }


   if (results.Err() != nil) {

      // something went wrong while reading records

      ...

   }

   return result

}


查看完整回答
反对 回复 2022-06-06
  • 1 回答
  • 0 关注
  • 1402 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信