美文网首页
【Redis】简单使用

【Redis】简单使用

作者: 冉小妹Ran | 来源:发表于2020-03-18 14:56 被阅读0次

    一个练手的小项目用到了redis数据库,以前没有接触过,大概看了一下教程,在这里做个简单的使用笔记。

    文章目录

    • Redis相关简介
      1.Redis是什么
      2.安装Redis
      3.启动Redis
      4.Redis数据类型
    • Go操作redis

    Redis相关简介

    Redis是什么

    一个高性能的key-value数据库。

    • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
    • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
    • Redis支持数据的备份,即master-slave模式的数据备份。

    安装Redis

    官网下载msi文件安装,一直下一步直至安装成功。

    启动Redis

    Redis安装路径下,redis-server.exe是Redis的服务端,redis-cli.exe是Redis的客户端,双击启动即可。


    服务端启动

    Redis数据类型

    5种:string(字符串), hash(哈希), list(列表), set(集合), zset(sorted set,有序集合)

    String

    SET key value  //设置指定 key 的值 
    GET key  //获取指定 key 的值。 
    
    image.png

    Hash

    HGET key field  //获取存储在哈希表中指定字段的值。
    HGETALL key  //获取在哈希表中指定 key 的所有字段和值 
    HMSET key field1 value1 [field2 value2 ]  //同时将多个 field-value (域-值)对设置到哈希表 key 中。
    
    image.png

    List

    一个简单列表,按照插入顺序排序。

    LPUSH key value1 [value2] //将一个或多个值插入到列表头部
    LRANGE key start stop //获取列表指定范围内的元素
    
    image.png

    Set

    set和list的区别,list有序,set无序。
    即Set是个无序集合,且成员唯一。

    SADD key member1 [member2] //向集合添加一个或多个成员
    SMEMBERS key //返回集合中的所有成员
    
    image.png

    Zset

    Zset和Set类似,只是比set多了一个score字段,score字段可以重复,member不可以重复。

    ZADD key score1 member1 [score2 member2] //向有序集合添加一个或多个成员,或者更新已存在成员的分数
    ZRANGE key start stop [WITHSCORES] //通过索引区间返回有序集合指定区间内的成员
    
    image.png

    Go操作Redis

    Golang操作Redis有两种方式。

    • 方式一:使用conn.Do(commandName string, args ...interface{})方法,执行相应的操作。
      代码如下:
    package main
    
    import (
        "fmt"
        "log"
    
        "github.com/gomodule/redigo/redis"
    )
    
    func GetConn() redis.Conn {
        conn, err := redis.Dial("tcp", fmt.Sprintf("%s:%d", "127.0.0.1", 6379))
    
        if err != nil {
            log.Println("connect redis error", err)
            return nil
        }
    
        return conn
    }
    
    func main() {
        conn := GetConn()
        if conn == nil {
            log.Println("conn is nil")
        }
        defer conn.Close()
    
        _, err := conn.Do("SET", "a", "b")
        if err != nil {
            log.Println("set error")
        }
        result, err := redis.String(conn.Do("GET", "a"))
        if err != nil {
            log.Println("get error")
        }
        fmt.Println(result)
    }
    
    • 方式二:使用pipeline。pipeline可以一次性发送多条执行命令,并批量返回结果。pipeline底层实现方式是队列,FIFO(First in first out,先进先出)可以保证执行的顺序。
    // 往队列中添加指令
    Send(commandName string, args ...interface{}) error
    // 一次性发送指令到服务端
    Flush() error
    // 接收服务端返回的数据
    Receive() (reply interface{}, err error)
    

    代码如下:

    package main
    
    import (
        "fmt"
        "log"
    
        "github.com/gomodule/redigo/redis"
    )
    
    func GetConn() redis.Conn {
        conn, err := redis.Dial("tcp", fmt.Sprintf("%s:%d", "127.0.0.1", 6379))
    
        if err != nil {
            log.Println("connect redis error", err)
            return nil
        }
    
        return conn
    }
    
    func main() {
        conn := GetConn()
        if conn == nil {
            log.Println("conn is nil")
        }
        defer conn.Close()
    
        conn.Send("SET", "fruit", "apple")
        conn.Send("SET", "animal", "dog")
        conn.Send("GET", "fruit")
        conn.Flush()
        for i := 0; i < 3; i++ {
            result, err := conn.Receive()
            if err != nil {
                log.Println("pipeline error")
            }
            fmt.Println(redis.String(result, err))
        }
    }
    

    相关文章

      网友评论

          本文标题:【Redis】简单使用

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