go redis的使用

  1. 安装redis数据库
    默认安装位置 /usr/local/etc
brew install redis  //( mac使用brew安装redis)
  1. 启动redis
// 进入安装目录文件    cd /usr/local/etc
redis-serve
  1. 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()
}
  1. 企业级项目使用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
		}
	}
}
``

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值