golang之redis入门: hash表

五知小白羊 · · 1489 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

import (
    "fmt"
    "github.com/garyburd/redigo/redis"
)

/*  
    hash的一些基本操作: 
    hset hash field value 将哈希表hash中域 field 的值设置为 value
    如果哈希表不存在, 那么将创建并写入, 如果存在则更新hash表中的数据
    eg:
        127.0.0.1:6379> hset website google www.g.cn
        (integer) 1
        127.0.0.1:6379> hget website google
        "www.g.cn"

    hsetnx hash field value  当且仅当域field不存在于哈希表中的时候,将值设置为value
    如果表不存在 则创建并执行写入field value
    eg:
        127.0.0.1:6379> hsetnx database nosql redis
        (integer) 1
        127.0.0.1:6379> hsetnx database nosql mongo
        (integer) 0
        127.0.0.1:6379> hget database nosql
        "redis"
    hget hash field  返回哈希表中给定的域值
    eg:
        127.0.0.1:6379> hget database nosql
        "redis"
        127.0.0.1:6379> hget data redis
        (nil)

    hexists hash field 检查field是否在hash表中
    eg:
        127.0.0.1:6379> hexists database nosql
        (integer) 1
        127.0.0.1:6379> hexists database redis
        (integer) 0

    hdel hash field ... 删除哈希表hash中的一个或多个指定区域,不存在的域将被忽略。
    eg:
        127.0.0.1:6379> hset database sql  mysql
        (integer) 1
        127.0.0.1:6379> hdel database sql
        (integer) 1
        127.0.0.1:6379> hdel database sql nosql
        (integer) 1
    hlen key 返回哈希表key中域的数量
    eg:
        127.0.0.1:6379> hlen database
        (integer) 0

    hstrlen key field  返回哈希表key中制定field的字符串长度
    eg:
        127.0.0.1:6379> hset database sql mysql
        (integer) 1
        127.0.0.1:6379> hstrlen database sql
        (integer) 5

    hincrby key field increment  为哈希表 key 中的域 field 的值加上增量 increment
    不能对字符串域field执行hincrby命令
    eg:
        127.0.0.1:6379> hset add one 1
        (integer) 1
        127.0.0.1:6379> hincrby add one 1000
        (integer) 1001

    hincrbyfloat key field increment 为哈希表key中的域field加上浮点数增量increment
    eg:
        127.0.0.1:6379> hincrby add one 1000
        (integer) 1001
        127.0.0.1:6379> hincrbyfloat add one 99.555555
        "1100.55555500000000002"

    hmset  key field value [field value …] 同时将多个field-value(域-值)对设置到哈希表 key 中。
    eg:
        127.0.0.1:6379> hmset fruit key1 apple  key2 banana key3 orange
        OK

    hmget key field [field …] 返回哈希表 key 中,一个或多个给定域的值。
    eg:
        127.0.0.1:6379> hmget fruit key1 key2 key3
        1) "apple"
        2) "banana"
        3) "orange"
    hkeys key   返回哈希表 key 中的所有域。
    eg:
        127.0.0.1:6379> hkeys fruit
        1) "key1"
        2) "key2"
        3) "key3"

    hvals key  返回哈希表key中所有域的值
    eg:
        127.0.0.1:6379> hvals fruit
        1) "apple"
        2) "banana"
        3) "orange"
    hgetall key 返回哈希表 key 中,所有的域和值。
    eg:
        127.0.0.1:6379> hgetall fruit
        1) "key1"
        2) "apple"
        3) "key2"
        4) "banana"
        5) "key3"
        6) "orange"
*/

func main() {
    conn, err := redis.Dial("tcp", "127.0.0.1:6379")
    if err != nil {
        fmt.Println("conn error: ", err)
    }

    defer conn.Close()

    // hset
    _, err = conn.Do("hset", "website", "google", "www.google.com")
    if err != nil {
        fmt.Println("hset error : ", err)
    }
    // hmset
    _, err = conn.Do("hmset", "website", "baidu", "www.baidu.com", "qq", "www.qq.com")
    if err != nil {
        fmt.Println("hmset error:", err)
    }

    // hgetall
    res, err := redis.StringMap(conn.Do("hgetall", "website"))
    if err == nil {
        fmt.Println(res)
    }else {
        fmt.Println("hgetall error: ", err)
    }

    // hvals
    rs, err := redis.Strings(conn.Do("hvals", "website"))
    if err == nil {
        fmt.Println(rs)
    }else {
        fmt.Println(err)
    }

    // hkeys
    rk, err := redis.Strings(conn.Do("hkeys", "website"))
    if err == nil {
        fmt.Println(rk)
    }else {
        fmt.Println(err)
    }

    // hstrlen
    l, err := redis.Int(conn.Do("hstrlen", "website", "google"))
    if err == nil {
        fmt.Println(l)
    }else {
        fmt.Println(err)
    }
    // hlen
    l, err = redis.Int(conn.Do("hlen", "website"))
    if err == nil {
        fmt.Println(l)
    }else {
        fmt.Println(err)
    }
}
  

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:五知小白羊

查看原文:golang之redis入门: hash表

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1489 次点击  
加入收藏 微博
下一篇:2019-06-27
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传