`

Go操作MySql Memache Mongodb

 
阅读更多

http://blog.woshifengzi.com/2014/12/12/go%E6%93%8D%E4%BD%9Cmysql-memcache-mongodb.html#mysql

操作mysql

go-sql-driver/mysql Example 上提供了用go操作mysql的两个例子。 例子中关于查询,一个是一次只取一个结果,一个是一次去多个结果,而且使用了prepare的方法,防止sql注入攻击。
此文中是参考上面例子,做的测试。

只取一个数据的例子

  1. import(
  2. "database/sql"
  3. _ "github.com/go-sql-driver/mysql"
  4. )
  5. func main(){
  6. db, err := sql.Open("mysql","user:passwd@tcp(host:port)/db_name")
  7. if err !=nil{
  8. panic(err.Error())
  9. }
  10. defer db.Close()
  11. stmtOut, err := db.Prepare("SELECT uid FROM mj_table limit 1")
  12. if err !=nil{
  13. panic(err.Error())
  14. }
  15. var uid string
  16. err = stmtOut.QueryRow().Scan(&uid)
  17. if err !=nil{
  18. Log.Info("err to Scan: %s", err)
  19. return
  20. }
  21. Log.Info("uid: %s", uid)
  22. }

取多个数据的例子

  1. ...
  2. rows, err := db.Query("select appid from mj_table limit 1")
  3. if err !=nil{
  4. Log.Info("No Err in select msyql: %s", err)
  5. return
  6. }
  7. // Get column names
  8. columns, err := rows.Columns()
  9. if err !=nil{
  10. panic(err.Error())
  11. }
  12. // Make a slice for the values
  13. values := make([]sql.RawBytes, len(columns))
  14. scanArgs := make([]interface{}, len(values))// 必须要有此类型
  15. for i := range values {
  16. scanArgs[i]=&values[i]
  17. }
  18. // Fetch rows
  19. for rows.Next(){
  20. // get RawBytes from data
  21. err = rows.Scan(scanArgs...)
  22. if err !=nil{
  23. panic(err.Error())
  24. }
  25. var value string
  26. for i, col := range values {
  27. if col ==nil{
  28. value ="NULL"
  29. }else{
  30. value =string(col)
  31. }
  32. Log.Info("name: %s, value: %s ", columns[i], value)
  33. }
  34. Log.Info("-----------------------------------")
  35. }
  36. ...

操作mongodb

mgo是go语言操作MongoDb的驱动,因为接口比较丰富,官方文档看着也就比较长。

下面代码提供了建立连接、插入数据、查询、删除的操作

  1. import(
  2. "time"
  3. "gopkg.in/mgo.v2"// mgo的包
  4. "gopkg.in/mgo.v2/bson"
  5. )
  6. func main(){
  7. var(
  8. err error
  9. )
  10. //建立连接
  11. mongoURL :="192.168.1.140,192.168.1.141:20001,192.168.1.141:20002"//可在配置文件中设置
  12. maxWait := time.Duration(10* time.Second)
  13. sess, err = mgo.DialWithTimeout(mongoURL, maxWait)
  14. if err !=nil{
  15. Log.Error("mgo.Dial err:%s", err)
  16. panic(err)
  17. }
  18. sess.SetMode(mgo.Monotonic,true)
  19. defer sess.Close()
  20. //插入数据
  21. //...构造要插入数据
  22. db_name :="db"
  23. table_name :="table"// 即mongodb中的Collection
  24. dataBytes :=[]byte("{\"name\":\"jgj\"}")
  25. var intf map[string]interface{}
  26. err = json.Unmarshal(dataBytes,&intf)
  27. //...执行入库操作
  28. // new_sess := sess.Copy() // 可以复制一份回话,用新回话做操作
  29. col := sess.DB(appid).C(classname)
  30. err = col.Insert(intf)
  31. if err !=nil{
  32. Log.Error("db POST, db insert error, appid:%s, class:%s, data:%s, err:%s", appid, classname,string(dataBytes), err)
  33. return
  34. }
  35. // 获取数据
  36. var objectid interface{}
  37. objectid =string("5486b4e08bb3c2659c000001")
  38. err = col.FindId(objectid).One(&intf)
  39. this.Data["json"]= intf
  40. // this.ServeJson() // 显示
  41. // 更新某个对象
  42. err = col.Update(bson.M{"_id": objectid,"updatedAt": oldUpdatedAt}, intf)
  43. // 删除某个对象
  44. err = col.RemoveId(objectid)
  45. // 查询
  46. selectParam :="{\"name\":true, \"age\":true}"
  47. var selectIntf map[string]bool
  48. err = json.Unmarshal([]byte(selectParam),&selectIntf)
  49. whereParam :="{\"or\":[{\"name\":\"jgj\"},{\"age\":\"29\"}]}"
  50. var whereIntf := map[string]interface{}{}
  51. err = json.Unmarshal([]byte(whereParam),&whereIntf)
  52. //...json to bson. 代码未提供
  53. ConvertBSON(whereIntf)
  54. sortParam ="name,-age"
  55. offset =1
  56. limit =10
  57. //...TODO 此处要有错误的判断
  58. query := col.Find(whereIntf)
  59. query = query.Sort(sortParam)
  60. query = query.Select(selectIntf)
  61. query = query.Skip(offset)
  62. query = query.Limit(limit)
  63. iter := query.Iter()
  64. var result []bson.M = make([]bson.M,0)
  65. intf := bson.M{}
  66. for iter.Next(&intf){
  67. result = append(result, intf)
  68. intf = bson.M{}
  69. }
  70. iter.Close()
  71. this.Data["json"]= result
  72. this.ServeJson()
  73. }

操作memcache

GoDoc中memcache的说明提供了操作的一些函数,没有给出实际的例子。

下面是测试的小例子:

import "github.com/bradfitz/gomemcache/memcache" (附件中已提供此包源代码)

  1. con := memcache.New("ip:host")
  2. if con ==nil{
  3. Log.Info("Failed to connect Memcache")
  4. }
  5. item :=&memcache.Item{Key:"jgj",Value:[]byte("test_value"),Expiration:0}
  6. err := con.Set(item)
  7. if err !=nil{
  8. Log.Info("failed to set item: %s", err)
  9. }
  10. item1, err := con.Get("jgj")
  11. if err !=nil{
  12. Log.Info("Failed to get item %s ", err)
  13. return
  14. }
  15. Log.Info("get value: %s", item1.Value)
分享到:
评论

相关推荐

    php apache mysql memcache redis mongodb

    【标题】:“php apache mysql memcache redis mongodb”指的是在服务器端构建一套常见的Web开发环境,包括PHP编程语言、Apache HTTP服务器、MySQL数据库管理系统,以及两种内存缓存技术:Memcached和Redis,还有...

    centos傻瓜式安装nginx+php+mysql+memcache+mongodb

    Centos傻瓜式安装nginx+php+mysql+memcache+mongodb 本文档将指导您在CentOS系统上安装nginx、php、mysql、memcache和mongodb五个软件包的傻瓜式安装方法。 Nginx安装 Nginx是一款轻量级的Web服务器软件,常用于...

    Redis、Memcache、MongoDB区别

    1、里面包含Redis、MongoDB、Memcache相关的学习文档 2、对这三者有比较详细的应用场景告之,并描述出了三者之间区别 3、提供JAVA连接Redis常见问题的解决方案 4、对MongoDB的特性有专门文档作描述 5、对于新手而言...

    php apache mysql memcache redis mongodb2

    在IT行业中,构建高效、可扩展的Web应用是至关重要的,而`PHP`、`Apache`、`MySQL`、`Memcached`、`Redis`以及`MongoDB`这些技术是实现这一目标的关键组件。让我们逐一深入理解它们的核心知识点。 首先,`PHP`是一...

    Memcache&Mongodb;

    - **强大的查询语言:** 尽管Mongodb不支持传统的SQL查询语言,但它提供了一种类似于SQL的强大查询语言,使得复杂查询变得简单易行。 - **良好的性能表现:** 与传统的关系型数据库如MSSQL相比,Mongodb在处理大数据...

    php5.3.* memcache-mongodb-redis dll扩展

    标题中的“php5.3.* memcache-mongodb-redis dll扩展”表明了这是一个关于PHP5.3版本的扩展包,其中包含了对memcache、mongodb和redis数据库的支持。这些DLL文件是Windows平台上PHP运行时需要的动态链接库,用于增强...

    为什么使用 Redis,不用 Memcache 和 MongoDB?.md

    为什么使用 Redis,不用 Memcache 和 MongoDB?

    win nginx php mysql memcache集成环境

    标题中的"win nginx php mysql memcache集成环境"指的是在Windows操作系统上搭建的一个包含Nginx、PHP、MySQL和Memcached的服务器环境。这样的集成环境通常用于高效地运行Web应用程序,尤其是那些基于PHP语言并需要...

    memcache安装与基本操作详解

    ### Memcache安装与基本操作详解 #### 一、前言 Memcache是一种高性能的分布式内存对象缓存系统,用于加速动态Web应用,减轻数据库负担。本文将详细介绍如何安装配置Memcache,并提供基本的操作示例。 #### 二、...

    distributeTemplate 可以进行所有mysql mongodb file rab分布式上的SQL语法进行 增删改查

    它允许开发者执行SQL操作,包括增、删、改、查(CRUD),不仅限于单一的数据库系统,而是扩展到多种数据库环境,如MySQL、MongoDB、File、RabbitMQ、Redis、Memcache以及Hadoop。这个工具的出现极大地简化了在分布式...

    python连接MySQL、MongoDB、Redis、memcache等数据库的方法

    用Python写脚本也有一段时间了,经常操作数据库(MySQL),现在就整理下对各类数据库的操作,如后面有新的参数会补进来,慢慢完善。 一,python 操作 MySQL:详情见:【apt-get install python-mysqldb】 复制代码 ...

    Memcache缓存与Mongodb数据库的优势和应用.docx

    Memcache和MongoDB是两种在IT行业中广泛使用的数据存储技术,它们各有特色,适用于不同的场景。Memcache是一种分布式内存缓存系统,主要用于缓解数据库的读取压力,提高Web服务的响应速度;而MongoDB是一款非关系型...

    PHP+MYSQL+Memcache网站访问量统计插件

    【PHP+MYSQL+Memcache网站访问量统计插件】是一个集成PHP、MySQL和Memcache技术的网站统计解决方案,主要用于高效地记录和展示网站的访问量。这个插件通过使用Memcache作为缓存系统,有效解决了高并发环境下数据存储...

    mongoDB6.0.5

    mongodb是一个介于nosql数据库和mysql数据库之间的一个数据存储系统,它没有严格的数据格式,但同时支持复杂查询,而且自带sharding模式和Replica Set模式,支持分片模式,复制模式,自动故障处理,自动故障转移,...

    64位apache+mysql+php5.5.10+memcache

    标题 "64位apache+mysql+php5.5.10+memcache" 提供了我们正在处理一个针对64位Windows操作系统的软件套装,它包括Apache web服务器、MySQL数据库服务器、PHP 5.5.10脚本语言解释器以及Memcached缓存系统。...

    分布式数据库面试专题系列:Memcached+Redis+MongoDB-06.rar

    对比MySQL,MongoDB在哪些场景下更有优势? 这三者在面试中经常被问到的问题还包括它们的性能优化策略、数据模型设计、分布式一致性方案、容错机制等。例如,Redis的Redis Cluster是如何实现分布式存储的,MongoDB...

    redis-mongodb-zookeeper-memcache安装

    注意,这是对字符串的操作,因为 Redis 中所有数据都以字符串形式存储。 - **INFO KeySpace:** 查看存储数据的相关信息。 - **KEYS *:** 查看所有的 key。 - **TYPE key:** 查看 key 的类型。 #### 四、最佳...

    构架Nginx+PHP(Fastcgi)+MySQL+Memcache高性能web服务器

    ### 构建Nginx+PHP(Fastcgi)+MySQL+Memcache高性能Web服务器 #### 一、概述 本文档旨在详细介绍如何构建一个基于Nginx、PHP(Fastcgi)、MySQL以及Memcache的高性能Web服务器架构(简称LEMP+Memcache)。此架构充分...

Global site tag (gtag.js) - Google Analytics