Redis Hash 类型操作及常用命令
七個原則
hashes 類型及操作
Redis hash 是一個 String 類型的 field 和 value 的映射表。它的添加、刪除操作都是 O(1) (平均)。hash 特別適合用于存儲對象。相較于將對象的每個字段存成單個 string 類型。將一個對象存儲在 hash 類型中會占用更少的內存,并且可以更方便的存取整個對象。省內存的原因是新建一個 hash 對象時開始是用 zipmap(又稱為 small hash)來存儲的。這個 zipmap 其實并不是 hash table,但是 zipmap 相比正常的 hash 實現可以節省不少 hash 本身需要的一些元數據存儲開銷。盡管 zipmap 的添加,刪除,查找都是 O(n),但是由于一般對象的 field 數量都不太多。所以使用 zipmap 也是很快的,也就是說添加、刪除平均還是 O(1)。如果 field 或者 value的大小超出一定限制后, Redis 會在內部自動將 zipmap 替換成正常的 hash 實現. 這個限制可以在配置文件中指定。
hash-max-zipmap-entries 64 #配置字段最多 64 個。
hash-max-zipmap-value 512 #配置 value 最大為 512 字節。
常用命令及操作
hset
設置 hash field 為指定值,如果 key 不存在,則先創建。
127.0.0.1:6379> hset myhash name Jacob (integer) 1hsetnx
設置 hash field 為指定值,如果 key 不存在,則先創建。 如果 field 已經存在,返回 0, nx 是not exist 的意思。
127.0.0.1:6379> hsetnx myhash age 18 (integer) 1 127.0.0.1:6379> hsetnx myhash age 18 (integer) 0第一次執行是成功的,但第二次執行相同的命令失敗,原因是 field 已經存在了。
hmset
同時設置 hash 的多個 field。
127.0.0.1:6379> hmset myhash name2 Jacob2 name3 Jacob3 OKhget
獲取指定的 hash field。
127.0.0.1:6379> hget myhash name "Jacob" 127.0.0.1:6379> hget myhash name2 "Jacob2" 127.0.0.1:6379> hget myhash name3 "Jacob3" 127.0.0.1:6379> hget myhash name4 (nil)由于數據庫沒有 field3,所以取到的是一個空值 nil
hmget
獲取全部指定的 hash filed。
127.0.0.1:6379> hmget myhash name name2 name3 1) "Jacob" 2) "Jacob2" 3) "Jacob3"hincrby
指定的 hash filed 加上給定值。
127.0.0.1:6379> hget myhash age "18" 127.0.0.1:6379> hincrby myhash age 6 (integer) 24 127.0.0.1:6379> hget myhash age "24"hexists
測試指定 field 是否存在。 1表示存在,0表示不存在。
127.0.0.1:6379> hexists myhash name3 (integer) 1 127.0.0.1:6379> hexists myhash name4 (integer) 0hlen
返回指定 hash 的 field 數量。
127.0.0.1:6379> hlen myhash (integer) 4myhash 中有 4 個 field(name,name2,name3,age)。
hkeys
返回 hash 的所有 field。
127.0.0.1:6379> hkeys myhash 1) "name" 2) "age" 3) "nane2" 4) "name3"hdel
返回指定 hash 的 field 數量。
127.0.0.1:6379> hkeys myhash 1) "name" 2) "age" 3) "nane2" 4) "name3" 127.0.0.1:6379> hdel myhash name3 (integer) 1 127.0.0.1:6379> hkeys myhash 1) "name" 2) "age" 3) "nane2"hvals
返回 hash 的所有 value。
127.0.0.1:6379> hvals myhash 1) "Jacob" 2) "24" 3) "Jacob2"hgetall
獲取某個 hash 中全部的 filed 及 value。
127.0.0.1:6379> hgetall myhash 1) "name" 2) "Jacob" 3) "age" 4) "24" 5) "nane2" 6) "Jacob2"可見,一下子將 myhash 中所有的 field 及對應的 value 都取出來了。
總結
以上是生活随笔為你收集整理的Redis Hash 类型操作及常用命令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spring mvc学习(7):spri
- 下一篇: uniGUI session超时时间设置