Storage 示例教程
Storage 示例教程
3分钟用云函数搞定抽卡服务器
1. 准备工作
请确保您已经 创建 UOS APP 并开启 Storage 服务,进入 「CRUD Storage -> 数据库管理」 页面。
2. 创建数据库
点击「创建数据库」,填写实例名称(仅支持数字、字母和下划线的组合,不能为空),依次选择“所在地域”、“数据库类型”、“数据库实例”、“数据库版本”、输入或者拖动选择数据库磁盘大小、 按要求填写用户名和密码,并点击「创建」。
需要注意的是,创建数据库时默认需要自行保存密码,后续将不再显示。如果勾选「是否允许UOS保存密码」,则UOS将加密后存储您的密码,可在后续查看。
3. 开启临时公网访问
UOS Storage 默认不开放公网访问权限,如需临时从公网连接到该数据库 点击右上角选择「开启临时公网访问」,可以根据获取到的临时公网地址连接到该数据库,临时访问有效时限为1小时。
可以在本地通过 Docker/命令行 工具进行远程连接,公网地址有使用时间的限制,临时访问有效时限为1小时。
4. 连接示例(Golang)
Postgresql
Postgresql 连接示例
package main
import (
"database/sql"
"fmt"
_ "github.com/lib/pq"
)
const (
Host = "*.*.*.*" //替换成内网IP地址
Port = 5432
Username = "[USERNAME]"
Password = "[PASSWORD]"
DatabaseName = "postgres"
)
func main() {
psqlInfo := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable",
Host, Port, Username, Password, DatabaseName)
db, err := sql.Open("postgres", psqlInfo)
if err != nil {
panic(err.Error())
}
defer db.Close()
fmt.Println("Connect Success!")
res, err := db.Query("SELECT schemaname, tablename FROM pg_catalog.pg_tables")
if err != nil {
panic(err.Error())
}
fmt.Println("postgres tables: ")
fmt.Printf("schema name table name")
for res.Next() {
var schemaName, tableName string
err = res.Scan(&schemaName, &tableName)
fmt.Printf("%s %s", schemaName, tableName)
}
}Mysql
Mysql 连接示例
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
const (
Host = "*.*.*.*" //替换成内网IP地址
Port = 3306
Username = "[USERNAME]"
Password = "[PASSWORD]"
)
func main() {
dataSourceName := fmt.Sprintf("%s:%s@tcp(%s:%d)/", Username, Password, Host, Port)
db, err := sql.Open("mysql", dataSourceName)
if err != nil {
panic(err.Error())
}
defer db.Close()
fmt.Println("Connect Success!")
res, err := db.Query("SHOW DATABASES")
if err != nil {
panic(err.Error())
}
fmt.Println("mysql databases: ")
for res.Next() {
var name string
err = res.Scan(&name)
fmt.Printf("%s", name)
}
}Mongo
Mongo 连接示例
package main
import (
"context"
"fmt"
"github.com/qiniu/qmgo"
)
const (
Host = "*.*.*.*" //替换成内网IP地址
Port = 27017 //替换成内网端口
Username = "[USERNAME]"
Password = "[PASSWORD]"
AuthSource = "admin"
Database = "local"
Collection = "user"
)
type UserInfo struct {
Name string `bson:"name"`
Age uint16 `bson:"age"`
Weight uint32 `bson:"weight"`
}
func main() {
client, err := qmgo.Open(context.Background(), &qmgo.Config{
Uri: fmt.Sprintf("mongodb://%s:%d", Host, Port),
Database: Database,
Auth: &qmgo.Credential{
Username: Username,
Password: Password,
AuthSource: AuthSource,
},
Coll: Collection,
})
if err != nil {
panic(err)
}
var userInfo = UserInfo{
Name: "xm",
Age: 7,
Weight: 40,
}
result, err := client.InsertOne(context.Background(), userInfo)
if err != nil {
panic(err)
}
fmt.Println(result.InsertedID)
}Redis
Redis 连接示例
package main
import (
"fmt"
"log"
"os"
"github.com/gomodule/redigo/redis"
)
const (
Host = "*.*.*.*" //替换成内网IP地址
Port = 6379
Password = "[PASSWORD]"
)
func main() {
address := fmt.Sprintf("%s:%d", Host, Port)
pool := &redis.Pool{
Dial: func() (redis.Conn, error) {
conn, err := redis.Dial("tcp", address, redis.DialPassword(Password))
if err != nil {
log.Printf("ERROR: fail init redis pool: %s", err.Error())
os.Exit(1)
}
return conn, err
},
}
conn := pool.Get()
_, err := conn.Do("SET", "key", "value")
if err != nil {
panic(err)
}
res, err := redis.String(conn.Do("GET", "key"))
if err != nil {
panic(err)
}
fmt.Println(res)
}