内容简介:本次分享下 -- NoSQL数据库 - Redis数据库驱动程序NoSQL数据库提供了一种存储和检索数据的机制,该机制使用比典型的关系数据库更松散的一致性模型,以实现水平扩展和更高的可用性。一些作者将它们称为“不仅仅是SQL”,以强调某些NoSQL系统确实允许使用类似SQL的查询语言。
本次分享下 -- NoSQL数据库 - Redis数据库驱动程序
NoSQL数据库
NoSQL数据库提供了一种存储和检索数据的机制,该机制使用比典型的关系数据库更松散的一致性模型,以实现水平扩展和更高的可用性。
一些作者将它们称为“不仅仅是SQL”,以强调某些NoSQL系统确实允许使用类似 SQL 的查询语言。
作为21世纪的C语言,Go对NoSQL数据库提供了很好的支持,包括流行的redis,mongoDB,Cassandra和Membase NoSQL数据库。
Redis
redis是一个像 Memcached 这样的键值存储系统,它支持string,list,set和zset(有序集)值类型。
redis有一些 Go 数据库驱动程序:
- https://github.com/gomodule/r...
- https://github.com/go-redis/r...
- https://github.com/hoisie/redis
- https://github.com/alphazero/...
- https://github.com/simonz05/g...
让我们看看如何使用redigo驱动程序在数据库上运行:
安装redigo:
go get github.com/gomodule/redigo
使用方式如下
package main
import (
"fmt"
"github.com/gomodule/redigo"
"os"
"os/signal"
"syscall"
"time"
)
var (
Pool *redis.Pool
)
func init() {
redisHost := ":6379"
Pool = newPool(redisHost)
close()
}
func newPool(server string) *redis.Pool {
return &redis.Pool{
MaxIdle: 3,
IdleTimeout: 240 * time.Second,
Dial: func() (redis.Conn, error) {
c, err := redis.Dial("tcp", server)
if err != nil {
return nil, err
}
return c, err
},
TestOnBorrow: func(c redis.Conn, t time.Time) error {
_, err := c.Do("PING")
return err
},
}
}
func close() {
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt)
signal.Notify(c, syscall.SIGTERM)
signal.Notify(c, syscall.SIGKILL)
go func() {
<-c
Pool.Close()
os.Exit(0)
}()
}
func Get(key string) ([]byte, error) {
conn := Pool.Get()
defer conn.Close()
var data []byte
data, err := redis.Bytes(conn.Do("GET", key))
if err != nil {
return data, fmt.Errorf("error get key %s: %v", key, err)
}
return data, err
}
func main() {
test, err := Get("test")
fmt.Println(test, err)
}
我们可以看到在Go中操作 redis 非常容易,并且它具有很高的性能。
它的客户端命令几乎与redis的内置命令相同。
MongoDB
MongoDB(来自“humongous”)是一个由10gen开发和支持的面向文档的开源数据库系统。
它是NoSQL系列数据库系统的一部分。MongoDB不是像在“经典”关系数据库中那样在表中存储数据,而是将结构化数据存储为具有动态模式的类似JSON的文档(MongoDB调用BSON格式),使得在某些类型的应用程序中的数据集成更容易,更快捷。
MongoDB的最佳驱动程序称为mgo,将来它可能会包含在标准库中。
安装mgo:
go get gopkg.in/mgo.v2
使用方式如下
package main
import (
"fmt"
"gopkg.in/mgo.v2"
"gopkg.in/mgo.v2/bson"
"log"
)
type Person struct {
Name string
Phone string
}
func main() {
session, err := mgo.Dial("server1.example.com,server2.example.com")
if err != nil {
panic(err)
}
defer session.Close()
// Optional. Switch the session to a monotonic behavior.
session.SetMode(mgo.Monotonic, true)
c := session.DB("test").C("people")
err = c.Insert(&Person{"Ale", "+55 53 8116 9639"},
&Person{"Cla", "+55 53 8402 8510"})
if err != nil {
log.Fatal(err)
}
result := Person{}
err = c.Find(bson.M{"name": "Ale"}).One(&result)
if err != nil {
log.Fatal(err)
}
fmt.Println("Phone:", result.Phone)
}
我们可以看到,在mgo数据库上运行时没有太大的区别;它们都是基于结构的。这是Go的做事方式。
今天就分享到这里,如果你有其他疑问请在下方留言或者加群交流
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 编写数据库:第2部分-预写日志
- Go基础学习记录 - 编写Web应用程 - 数据库(四)
- NutsDB:纯 Go 编写的高性能内嵌型 KV 数据库
- BadgerDB v2.0 发布,纯 Go 编写的快速键值数据库
- 开源 | GateKeeper:滴滴开源的使用 Go 编写的不依赖分布式数据库的 API 网关
- 基于顺丰同城接口编写sdk,java三方sdk编写思路
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
编程珠玑(续)(修订版)
【美】Jon Bentley 乔恩•本特利 / 钱丽艳、刘田 / 人民邮电出版社 / 2015-2 / CNY 35.00
历史上最伟大的计算机科学著作之一 融深邃思想、实战技术与趣味轶事于一炉的奇书 带你真正领略计算机科学之美 多年以来,当程序员们推选出最心爱的计算机图书时,《编程珠玑》总是位于前列。正如自然界里珍珠出自细沙对牡蛎的磨砺,计算机科学大师Jon Bentley以其独有的洞察力和创造力,从磨砺程序员的实际问题中凝结出一篇篇不朽的编程“珠玑”,成为世界计算机界名刊《ACM通讯》历史上最受欢......一起来看看 《编程珠玑(续)(修订版)》 这本书的介绍吧!