美文网首页
GO 语言操作 redis 数据库

GO 语言操作 redis 数据库

作者: 51reboot | 来源:发表于2020-03-27 17:51 被阅读0次

    redis数据库

    是一种高性能的Key-Value数据库 NoSQL数据库 缓存型数据库 key-value型数据库 错误的说法非关系型数据库

    1.redis介绍

    1.1NoSQL:一类新出现的数据库(not only sql)

    • 泛指缓存型的数据库
    • 不支持SQL语法
    • 存储结构跟传统关系型数据库中的那种关系表完全不同,nosql中存储的数据都是KV形式
    • NoSQL的世界中没有一种通用的语言,每种nosql数据库都有自己的api和语法,以及擅长的业务场景
    • NoSQL中的产品种类相当多:
      • Redis
      • Mongodb
      • Hbase hadoop
      • Cassandra hadoop

    1.2 NoSQL和SQL数据库的比较:

    • 适用场景不同:sql数据库适合用于关系特别复杂的数据查询场景,nosql反之
    • 事务 特性的支持:sql对事务的支持非常完善,而nosql基本不支持事务
    • 两者在不断地取长补短,呈现融合趋势

    1.3 Redis简介

    • Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。
    • Redis是 NoSQL技术阵营中的一员,它通过多种键值数据类型来适应不同场景下的存储需求,借助一些高层级的接口使用其可以胜任,如缓存、队列系统的不同角色

    1.4 Redis特性

    • Redis 与其他 key - value 缓存产品有以下三个特点:
    • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
    • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。 五大类型:string,hash,list(链表),set(无序集合),zset(有序集合)
    • Redis支持数据的备份,即master-slave模式的数据备份。

    1.5 Redis 优势

    • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
    • 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
    • 原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
    • 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

    1.6 Redis应用场景

    • 用来做缓存(ehcache/memcached)——redis的所有数据是放在内存中的(内存数据库,cookie和session)
    • 可以在某些特定应用场景下替代传统数据库——比如社交类的应用
    • 在一些大型系统中,巧妙地实现一些特定的功能:session共享、购物车
    • 只要你有丰富的想象力,redis可以用在可以给你无限的惊喜…….

    1.7 推荐阅读

    2.与go语言交互

    2.1安装测试

    安装go操作redis的包,命令如下:

    go get -u -v github.com/gomodule/redigo/redis
    

    安装完成后,回到家目录创建test.go,把下面代码复制到test.go里面,编译执行test.go,之后在redis中查找到键c1值为hello,说明安装成功

    package main
    import ( "github.com/gomodule/redigo/redis")
    func main(){
            conn,_ := redis.Dial("tcp", ":6379")
            defer conn.Close()
            conn.Do("set", "c1", "hello")
    }
    

    2.2操作方法

    redigo包的使用文档https://godoc.org/github.com/gomodule/redigo/redis

    连接数据库

    Dial(network, address string)(conn,err)
    

    执行数据库的命令

    Send(commandName string, args ...interface{}) error
    Flush() error
    Receive() (reply interface{}, err error)
    

    Send函数发出指令,flush将连接的输出缓冲区刷新到服务器,Receive接收服务器返回的数据

    示例:

    c.Send("SET", "foo", "bar")
    c.Flush()//把缓冲区命令发到服务器
    v, err = c.Receive() // 接收set请求传输的数据
    

    另一种执行数据库操作命令(常用)

    Do(commandName string, args ...interface{}) (reply interface{}, err error)
    

    reply helper functions(回复助手函数)

    Bool,Int,Bytes,map,String,Strings和Values函数将回复转换为特定类型的值。为了方便地包含对连接Do和Receive方法的调用,这些函数采用了类型为error的第二个参数。如果错误是非nil,则辅助函数返回错误。如果错误为nil,则该函数将回复转换为指定的类型:

    exists, err := redis.Bool(c.Do("EXISTS", "foo"))
    if err != nil {
    //处理错误代码
    }
    reflect.TypeOf(exists)//打印exists类型
    

    Scan函数

    func Scan(src [] interface {},dest ... interface {})([] interface {},error)
    

    Scan函数从src复制到dest指向的值。

    Dest参数的值必须是整数,浮点数,布尔值,字符串,[]byte,interface{}或这些类型的切片。Scan使用标准的strconv包将批量字符串转换为数字和布尔类型。

    示例:

    var value1 int
    var value2 string
    reply, err := redis.Values(c.Do("MGET", "key1", "key2"))
    if err != nil {
        //处理错误代码
    }
     if _, err := redis.Scan(reply, &value1, &value2); err != nil {
        // 处理错误代码
    }
    

    2.3与struct结合

    序列化与反序列化

    序列化

    var buffer bytes.Buffer//容器
    enc :=gob.NewEncoder(&buffer)//编码器
    err:=enc.Encode(dest)//编码
    

    反序列化

    dec := gob.NewDecoder(bytes.NewReader(buffer.bytes()))//解码器
    dec.Decode(src)//解码
    

    视频+资料评论获取

    相关文章

      网友评论

          本文标题:GO 语言操作 redis 数据库

          本文链接:https://www.haomeiwen.com/subject/fwlruhtx.html