zoukankan      html  css  js  c++  java
  • Redigo--Go连接Redis

    本文来自:CSDN博客

    感谢作者:wkyb608

    查看原文:Redigo--Go连接Redis

    本文主要介绍go Web开发中操作redis。

    Redigo是go连接Redis的扩展包,用此包时需先执行:

    go get github.com/garyburd/redigo/redis

    安装完后,在文件中导入redigo即可。

    连接redis

    连接redis的样例如下:

    import (  
        "fmt"  
        // 导入redigo扩展包  
        "github.com/garyburd/redigo/redis"  
    )  
    // 从配置文件获取redis配置并连接  
    host := beego.AppConfig.String("redis_host")  
    db, _ := beego.AppConfig.Int("redis_db")  
    // tcp连接redis  
    rs, err := redis.Dial("tcp", host)  
    // 操作完后自动关闭  
    defer rs.Close()  
    // 若连接出错,则打印错误信息,返回  
    if err != nil {  
        fmt.Println(err)  
        fmt.Println("redis connect error")  
        return  
    }  
    // 选择db  
    rs.Do("SELECT", db)   

    写入数据

    往redis里存取数据的样例如下:

    key := "aaa"  
    value := "bbb"  
    // 操作redis时调用Do方法,第一个参数传入操作名称(字符串),然后根据不同操作传入key、value、数字等  
    // 返回2个参数,第一个为操作标识,成功则为1,失败则为0;第二个为错误信息  
    n, err := rs.Do("SETNX", key, value)  
    // 若操作失败则返回  
    if err != nil {  
        fmt.Println(err)  
        return  
    }  
    // 返回的n的类型是int64的,所以得将1或0转换成为int64类型的再比较  
    if n == int64(1) {  
        // 设置过期时间为24小时  
        n, _ := rs.Do("EXPIRE", key, 24*3600)  
        if n == int64(1) {  
            fmt.Println("success")  
        }  
    } else if n == int64(0) {  
        fmt.Println("the key has already existed")  
    }  

    读数据

    从redis里取数据的样例如下:

    key := "aaa"  
    // 调用Do后,还得调用相应的方法才能取得数据  
    // 由于之前存的value是string类型,所以用redis.String将数据转换成string类型  
    value, err := redis.String(rs.Do("GET", key))  
    if err != nil {  
        fmt.Println("fail")  
    }  
    fmt.Println(value)  

    此时若不出错便会输出我们前面存的value:“bbb”

     数据转换

    若value的类型为int,则用redis.Int转换

    若value的类型为string,则用redis.String转换

    若value的类型为json,则用redis.Byte转换

    redis里存取json数据的样例如下:

    import "encoding/json"  
    import "fmt"  
      
    // 存json数据  
    key := "aaa"  
    imap := map[string]string{"key1": "111", "key2": "222"}  
    // 将map转换成json数据  
    value, _ := json.Marshal(imap)  
    // 存入redis  
    n, err := rs.Do("SETNX", key, value)  
    if err != nil {  
        fmt.Println(err)  
    }  
    if n == int64(1) {  
        fmt.Println("success")  
    }  
      
      
    // 取json数据  
    // 先声明imap用来装数据  
    var imap map[string]string  
    key := "aaa"  
    // json数据在go中是[]byte类型,所以此处用redis.Bytes转换  
    value, err := redis.Bytes(rs.Do("GET", key))  
    if err != nil {  
        fmt.Println(err)  
    }  
    // 将json解析成map类型  
    errShal := json.Unmarshal(value, &imap)  
    if errShal != nil {  
        fmt.Println(err)  
    }  
    fmt.Println(imap["key1"])  
    fmt.Println(imap["key2"])  

    此时若不出错便会输出我们前面存的“111” “222”

    看了上面的例子,应该对操作redis有所了解了吧。

    Redis设置密码,如何登陆

    进入Dial函数,设置dialOptions字段,password为密码。

    func Dial(network, address string, options ...DialOption) (Conn, error) {
    	do := dialOptions{
    		dialer: &net.Dialer{
    			KeepAlive: time.Minute * 5,
    		},
    		password:"密码",
    	}
    }
    

    dialOptions结构体全部字段:

    type dialOptions struct {
    	readTimeout  time.Duration
    	writeTimeout time.Duration
    	dialer       *net.Dialer
    	dial         func(network, addr string) (net.Conn, error)
    	db           int
    	password     string
    	useTLS       bool
    	skipVerify   bool
    	tlsConfig    *tls.Config
    }
    

      

  • 相关阅读:
    一个简单的禁止鼠标滚轮事件处理
    模仿抽奖转盘,并且用cookie记录历史次数
    学习jquery
    使用var提升变量声明
    Django 自带密码加密,自定密码加密方式 及自定义验证方式
    kindEditor使用并防止xss攻击(day88)
    python二维码生成库(qrcode)简介和实例
    js原型的区别
    js中 this与that
    python单元测试之unittest框架使用总结
  • 原文地址:https://www.cnblogs.com/-wenli/p/12221495.html
Copyright © 2011-2022 走看看