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表
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- hash 类型 hash 是一个 string 类型的 field 和 value 的映射表。添加,删除操作都是 ...
- 讲解分布式数据存储的核心算法,数据分布的算法 hash算法 -> 一致性hash算法(memcached) -> ...
- Redis哈希表hash 通过使用Hash,你可以一个高级别的Redis key上面存储一组键值对。这些值提供了一...