美文网首页
redis数据库与go中的使用

redis数据库与go中的使用

作者: blossom_绽放 | 来源:发表于2017-12-21 19:06 被阅读728次

    对于redis的学习,感谢菜鸟教程提供的优秀资料
    随着学习的深入,此文章持续更新...

    Redis 是 key - value 型数据库,有以下三个特点:

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

    基本

    通过homebrew安装

    brew install redis
    

    通过homebrew安装Redis Desktop Manager 是一个redis桌面管理工具

    brew cask install rdm
    

    启动redis / 关闭redis

    redis-server
    
    redis-cli shutdown
    

    进入redis命令界面 --raw 解决乱码问题

    redis-cli --raw
    

    选择数据库 默认数据库为0

    SELECT 0   # ok
    

    通过 config 命令查看或设置配置项

    config get config_setting_name
    # 查看所有配置
    config get * 
    # 设置配置
    config set config_setting_name new_config_value
    config set loglevel "notice"
    
    config get loglevel 
    # "notice"
    

    命令

    Keys

    命令 描述 返回
    Del key key 存在时删除 key 删除的数量
    Exists key 检查key值是否存在 存在1否则0
    Expire key 已秒设置过期时间 成功1否则0
    Expireat key unix时间戳设置过去时间 成功1否则0
    PEXPIRE key 以毫秒设置过期时间 成功1否则0
    KEYS * 查找所有符合给定模式的 key 符合查询要求的数组
    Move key database 移动key值到其他数据库 成功1否则0
    PERSIST key 移除key的过期时间 成功1否则0
    Pttl key 以毫秒为单位返回过期时间 无key:-2 无过期时间: -1 否则返回时间
    TTL key 以秒为单位返回key的过期时间 无key:-2 无过期时间: -1 否则返回时间
    RANDOMKEY 从当前数据库中随机返回一个 key 无key返回nil
    RENAME oldkey newkey 修改 key 的名称 成功:ok 失败返回错误 新key存在覆盖新key
    Renamenx oldkey newkey 仅当 newkey 不存在时,将 key 改名为 newkey 成功1否则0
    TYPE key 返回 key 所储存的值的类型 无key返回none

    String(字符串)

    • string可以包含任何数据。比如jpg图片或者序列化的对象
    • 一个键最大能存储512MB
    命令 描述 返回
    SET key value 设置key value 成功后返回ok
    Get key 获取指定 key 的值 无key返回nil
    Getrange key start end 返回 key 中字符串值的子字符 截取的子字符串
    GETSET key value 将给定 key 的值设为 value 返回 key 的旧值(old value) 无key返回nil
    MGET key1 key2 获取所有(一个或多个)给定 key 的值 一个包含所有给定 key 的值的列表
    SETEX key time(s) value 重设key与过期时间 成功ok
    SETNX key value key不存在时设置value 成功1失败0
    STRLEN key 返回 key的长度 无key返回0
    MSET key1 value1 key2 value2 同时设置多个key与value 总是ok
    MSETNX key1 value1 key2 value2 同时设置多个不存在的key与value 全部成功返回1否则0
    PSETEX key time(s) value 毫秒为单位设置过期时间 成功ok
    INCR key 使key值加一 newkey,无key初始化为0再加1否则返回错误
    Incrby key int64 使key值加num newkey,无key初始化为0再加num否则返回错误
    Incrbyfloat key float 同上 浮点数类型 同上
    Decr key 使key值减一 同上
    Decrby key int64 使key值减去num 同上
    Append key value 给key追加value newkey的长度 无key等于set

    Hash(哈希)

    • hash 是一个键值(key=>value)对集合。
    • hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
    • 每个 hash 可以存储 232 -1 键值对(40多亿)
    命令 描述 返回
    Hdel key field1 删除一个或多个哈希表字段 成功删除的数量
    Hexists key field1 查看指定字段是否存在 存在1 否则0
    HGET key field1 返回指定字段的值 不存在返回nil
    Hgetall key field1 返回整个key 不存在返回空列表
    HINCRBY key field1 int64 为key 中的指定字段的整数值加上指定增量 此字段的新值
    HINCRBYFLOAT key field1 float 浮点数版本 同上
    Hkeys key 获取所有哈希表中的字段 不存在返回空列表
    Hlen key 获取哈希表中字段的数量 不存在返回0
    Hmget key field1 field2 获取所有给定字段的值 不存在返回nil
    Hmset key field1 value1 field2 value2 同时将多个 field-value (域-值)对设置到 key 中 成功返回ok
    Hset key field value key 中的字段 field 的值设为 value 新建字段返回1覆盖返回0
    Hsetnx key field value 字段 field 不存在时设置哈希表字段的值 成功1失败0
    Hvals key 获取哈希表中所有值 不存在返回空列表

    List(列表)

    • Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
    • 列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)。

    Set(集合)

    • 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
    • 集合中最大的成员数为 232 - 1(4294967295, 每个集合可存储40多亿个成员)。

    Zset(有序集合)

    • string类型元素的集合,且不允许重复的成员
    • 每个元素都会关联一个double类型的分数,通过分数来为集合中的成员进行从小到大的排序。
    • 成员是唯一的,但分数(score)却可以重复

    Golang redis 操作

    golang操作redis,使用redis.v6的一些简单说明

    使用

    go get gopkg.in/redis.v6
    import "gopkg.in/redis.v6"
    

    创建客户端

    通过 redis.NewClient 函数即可创建一个 redis 客户端, 这个方法接收一个 redis.Options 对象参数, 通过这个参数, 我们可以配置 redis 相关的属性, 例如 redis 服务器地址, 数据库名, 数据库密码等.

    func createClient() *redis.Client {
        client := redis.NewClient(&redis.Options{
            Addr:     "localhost:6379",
            Password: "",
            DB:       0,
        })
    
        // 通过 cient.Ping() 来检查是否成功连接到了 redis 服务器
        pong, err := client.Ping().Result()
        fmt.Println(pong, err)
    
        return client
    }
    

    string

    set get操作,第三个参数是过期时间, 如果是0, 则表示没有过期时间.

    err := client.Set("name", "xys", 0).Err()
    
    val, err := client.Get("name").Result()
    

    这里设置过期时间.

    err = client.Set("age", "20", 1 * time.Second).Err()
    

    list

    在名称为 fruit 的list尾添加一个值为value的元素

    client.RPush("fruit", "apple")
    

    在名称为 fruit 的list头添加一个值为value的 元素

    client.LPush("fruit", "banana") 
    

    返回名称为 fruit 的list的长度

    length, err := client.LLen("fruit").Result() 
    

    返回并删除名称为 fruit 的list中的首元素

    value, err := client.LPop("fruit").Result() 
    

    返回并删除名称为 fruit 的list中的尾元素

    value, err = client.RPop("fruit").Result() 
    

    set

    向 blacklist 中添加元素

    client.SAdd("blacklist", "Obama")
    

    向 whitelist 添加元素

    client.SAdd("whitelist", "the Elder")
    

    判断元素是否在集合中

    isMember, err := client.SIsMember("blacklist", "Bush").Result()
    

    求交集, 即既在黑名单中, 又在白名单中的元素

    names, err := client.SInter("blacklist", "whitelist").Result()
    

    获取指定集合的所有元素

    all, err := client.SMembers("blacklist").Result()
    

    hash

    向名称为 user_xys 的 hash 中添加元素 name

    client.HSet("user_xys", "name", "xys")
    

    批量地向名称为 user_test 的 hash 中添加元素 name 和 age

    client.HMSet("user_test", map[string]string{"name": "test", "age":"20"})
    

    单独获取名为 user_test 的 age 字段

    age, err := client.HGet("user_test", "age").Result()
    

    批量获取名为 user_test 的 hash 中的指定字段的值.

    fields, err := client.HMGet("user_test", "name", "age").Result()
    

    获取名为 user_xys 的 hash 中的字段个数

    length, err := client.HLen("user_xys").Result()
    

    删除名为 user_test 的 age 字段

     client.HDel("user_test", "age")
    

    相关文章

      网友评论

          本文标题:redis数据库与go中的使用

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