- 安装redis数据库 默认安装位置 /usr/local/etc
brew install redis //( mac使用brew安装redis)
复制代码
- 启动redis
// 进入安装目录文件 cd /usr/local/etc
redis-serve
复制代码
- redis简单使用
package main
import (
"fmt"
"github.com/garyburd/redigo/redis"
_ "github.com/lib/pq"
)
func main(){
// 连接redis数据库
c, err := redis.Dial("tcp", "127.0.0.1:6379")
if err != nil {
fmt.Println("Connect 1 to redis error", err)
return
}
_, err = c.Do("SET", "task:task_id", "张", "EX", "5")
// ------------------------------
// 写入单个key 值(mykey) 过时时间5秒
_, err = c.Do("SET", "mykey", "张", "EX", "5")
if err != nil {
fmt.Println("redis 2 set failed:", err)
return
}
// 获取单个key值 (mykey)
username, err := redis.String(c.Do("GET", "mykey"))
if err != nil {
fmt.Println("redis 3 get failed:", err)
return
}
fmt.Printf("Get 4 mykey: %v \n", username)
// 等待时间设置
time.Sleep(8 * time.Second)
// 第二次获取key值(过时后的)
username, err = redis.String(c.Do("GET", "mykey"))
if err != nil {
fmt.Println("redis 5 get failed:", err)
} else {
fmt.Printf("Get过时 6 mykey: %v \n", username)
}
// ---------------批量操做
// 批量添加
_, err = c.Do("MSET","abc",10,"egf",90)
if err != nil {
fmt.Println("redis 7 Mset failed:", err)
return
}
//time.Sleep(5 * time.Second)
// 批量获取a
r, err := redis.Strings(c.Do("MGET", "abc", "efg"))
if err != nil {
fmt.Println("MGet 8 abc failed,", err)
}
for k, v := range r {
fmt.Println(k, v)
}
// -------------------- 写入json数据
// 写入数据
imap := map[string]string{"name":"zhang","sex": "男"}
// 序列化json数据
value, _ := json.Marshal(imap)
_, err = c.Do("SETNX", "jsonkey", value)
if err != nil {
fmt.Println("redis 8 SETNX jsonkey failed:", err)
}
// 读取数据
var imapGet map[string]string
valueGet, err := redis.Bytes(c.Do("GET", "jsonkey"))
if err != nil {
fmt.Println(err)
}
errShal := json.Unmarshal(valueGet, &imapGet)
if errShal != nil {
fmt.Println(err)
}
fmt.Println("imapGet", imapGet)
fmt.Println("imapGet", imapGet["name"])
fmt.Println("imapGet", imapGet["sex"])
// -------------------------列数据 处理
// 存入列数据
_, err = c.Do("lpush", "runoobkey", "redis")
if err != nil {
fmt.Println("redis set failed:", err)
}
_, err = c.Do("lpush", "runoobkey", "mongodb")
if err != nil {
fmt.Println("redis set failed:", err)
}
_, err = c.Do("lpush", "runoobkey", "mysql")
if err != nil {
fmt.Println("redis set failed:", err)
}
values, _ := redis.Values(c.Do("lrange", "runoobkey", "0", "100"))
for _, v := range values {
fmt.Println(string(v.([]byte)))
}
// ------------------ 判断key 是否存在
is_key_exit, err := redis.Bool(c.Do("EXISTS", "runoobkey"))
if err != nil {
fmt.Println("error:", err)
} else {
fmt.Printf("exists or not: %v \n", is_key_exit)
}
// ---------------- 删除key
// 增长key
_, err = c.Do("SET", "delkey", "张")
if err != nil {
fmt.Println("增长key:", err)
}
// 获取key
delkey, err := redis.String(c.Do("GET", "delkey"))
if err != nil {
fmt.Println("获取key error:", err)
} else {
fmt.Printf(" 获取key delkey 存在: %v \n", delkey)
}
// 删除key
_, err = c.Do("DEL", "delkey")
if err != nil {
fmt.Println("删除key failed:", err)
}
j, err := redis.Bool(c.Do("EXISTS", "delkey"))
if err != nil {
fmt.Println("查询是否存在 error:", err)
} else {
fmt.Printf("查询是否存在 不存在: %v \n", j)
}
// hset key value redis 表数据 hget 获取表数据 数据格式 以索引的形式存储数据
//1
//value1
//2
//value2
//3
//value3
// 。。。。。。
defer c.Close()
}
复制代码
- 企业级项目使用redis 通常采用中间件的形式模块化引用redis配置
var redisservers = map[string]{
Addr : "127.0.0.1:6379",
Password : "",
DB: 0
}
func main() {
router := gin.New()
// 使用连接数据库
pool := Redis(redisservers)
}
// Redis 数据库连接 // 此函数可用在以后须要使用redis 地方进行单独引用 只须要传入 redis配置便可
func Redis(redisservers map[string]string) gin.HandlerFunc {
// 连接数据库
return pool := thisPool(redisservers.Addr, redisservers.Password, redisservers.DB)
}
// 配置redis连接
func thisPool(server, password string, db int) *redis.Pool {
return &redis.Pool{
MaxIdle: 3, // 设置连接数
IdleTimeout: 120 * time.Second, // 设置超时
Dial: func() (redis.Conn, error) {
c, err := redis.Dial("tcp", server, redis.DialDatabase(db))
if err != nil {
return err
}
}
}
``复制代码