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上面存儲一組鍵值對。這些值提供了一...