加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959
Reids 安装导入go get github.com/garyburd/redigo/redis import
链接
github:https://github.com/antirez/redis
Doc:
Redis全套使用:
使用 连接import func main() { c, err := redis.Dial(, ) if err != nil { fmt.Println(, err) return } defer c.Close() }
set & get
_, err = c.Do(, , ) if err != nil { fmt.Println(err) return } r, err := redis.String(c.Do(, )) if err != nil { fmt.Println(err) return } fmt.Println(r)
mset & mget
批量设置
_, err = c.Do(, , , , ) if err != nil { fmt.Println(, err) return } r2, err := redis.Strings(c.Do(, , )) if err != nil { fmt.Println(, err) return } fmt.Println(r2)
hset & hget
hash操作
_, err = c.Do(, , , ) if err != nil { fmt.Println(, err) return } r, err = redis.String(c.Do(, , )) if err != nil { fmt.Println(, err) return } fmt.Println(r)
expire
设置过期时间
_, err = c.Do(, , 5) if err != nil { fmt.Println(, err) return }
lpush & lpop & llen
队列
// 队列 _, err = c.Do(, , , , 9) if err != nil { fmt.Println(, err) return } for { r, err = redis.String(c.Do(, )) if err != nil { fmt.Println(, err) break } fmt.Println(r) } r3, err := redis.Int(c.Do(, )) if err != nil { fmt.Println(, err) return }
连接池
各参数的解释如下:
MaxIdle:最大的空闲连接数,表示即使没有redis连接时依然可以保持N个空闲的连接,而不被清除,随时处于待命状态。
MaxActive:最大的激活连接数,表示同时最多有N个连接
IdleTimeout:最大的空闲连接等待时间,超过此时间后,空闲连接将被关闭
pool := &redis.Pool{ MaxIdle: 16, MaxActive: 1024, IdleTimeout: 300, Dial: func() (redis.Conn, error) { , ) }, }
连接池栗子
package main import ( ) var pool *redis.Pool func init() { pool = &redis.Pool{ MaxIdle: 16, MaxActive: 1024, IdleTimeout: 300, Dial: func() (redis.Conn, error) { , ) }, } } func main() { c := pool.Get() defer c.Close() _, err := c.Do(, , ) if err != nil { fmt.Println(err) return } r, err := redis.String(c.Do(, )) if err != nil { fmt.Println(err) return } fmt.Println(r) }
管道操作
请求/响应服务可以实现持续处理新请求,客户端可以发送多个命令到服务器而无需等待响应,最后在一次读取多个响应。
使用Send(),Flush(),Receive()方法支持管道化操作
Send向连接的输出缓冲中写入命令。
Flush将连接的输出缓冲清空并写入服务器端。
Recevie按照FIFO顺序依次读取服务器的响应。
func main() { c, err := redis.Dial(, ) if err != nil { fmt.Println(, err) return } defer c.Close() c.Send(, , ) c.Send(, , ) c.Flush() v, err := c.Receive() fmt.Printf(, v, err) v, err = c.Receive() fmt.Printf(, v, err) v, err = c.Receive() // 夯住,一直等待 fmt.Printf(, v, err) }
Mysql 安装导入
go go import ( _ )
链接:
github:
https://github.com/go-sql-driver/mysql
https://github.com/jmoiron/sqlx
Doc:
Mysql全套使用:
连接
import ( _ ) var Db *sqlx.DB func init() { database, err := sqlx.Open(, ) if err != nil { fmt.Println(, err) return } Db = database }
栗子建表