1、Hash類型
(1)概念
將一個對象類型存儲在Hash類型要比存儲在Stringt類型占用更少的內存空間(相比於JSON,json是以字符串的形式存儲的),可以實現對整個對象的存取。因此,hash更適合存儲對象
對象以字符串的形式存儲會增加序列化與反序列化的開銷,對對象的值進行修改的時候需要對並發進行控制,會降低程序的效率,而redis沒有這些缺陷。但是,當redis的多個屬性以鍵值對的形式存儲的時候,hash的名字是重復存儲的,會造成內存的浪費
student:1 name zhai
student:1 age 12
而以字符串的形式存儲就不存在重復存儲的現象,一個對象只存儲一個名稱即可
student{
"name":"zhai",
"age":"12"
}
(2)結構
(3)應用
2、命令
(1)單個存取
方式一:此種方式不利於管理
127.0.0.1:6379> hset myhash zhai 1997
(integer) 1
127.0.0.1:6379> hset myhash zhang 123
(integer) 1
所有的數據都存儲在一起,不方便查看
方式二:
127.0.0.1:6379> hset student:1 name zhai
(integer) 1
127.0.0.1:6379> hset student:2 name zhang
(integer) 1
此種方式結構更清晰,利於對數據的管理
127.0.0.1:6379> hget student:1 name
"zhai"
127.0.0.1:6379> hget student:2 name
"zhang"
(2)存取多個數據
方式一:
一次存儲多個,單個取出
一次取出多個·:
方式二:
127.0.0.1:6379> hmset student:3 name tom age 12
OK
127.0.0.1:6379> hget student:3 name
"tom"
127.0.0.1:6379> hmget student:3 name age
1) "tom"
2) "12"
(3)取出所有的數據
127.0.0.1:6379> hgetall student:3
1) "name"
2) "tom"
3) "age"
4) "12"
(4)刪除
刪除單個鍵值對
127.0.0.1:6379> hgetall student:3
1) "name"
2) "tom"
3) "age"
4) "12"
127.0.0.1:6379> hdel student:3 age
(integer) 1
127.0.0.1:6379> hgetall student:3
1) "name"
2) "tom"
刪除所有鍵值對
127.0.0.1:6379> keys *
1) "student:3"
2) "student:1"
3) "student:2"
4) "myhash"
127.0.0.1:6379> del myhash
(integer) 1
127.0.0.1:6379> keys *
1) "student:3"
2) "student:1"
3) "student:2"
(5)字段的數量
127.0.0.1:6379> hmset student:4 name lll age 12
OK
127.0.0.1:6379> hlen student:4
(integer) 2
(6)增加字段
127.0.0.1:6379> hmset student:4 name lll age 12
OK
127.0.0.1:6379> hlen student:4
(integer) 2
127.0.0.1:6379> hset student:4 score 123
(integer) 1
127.0.0.1:6379> hgetall student:4
1) "name"
2) "lll"
3) "age"
4) "12"
5) "score"
6) "123"
(7)減小數值
(8)判定指定的鍵是否存在:返回1代表有,0沒有。
(9)獲取所有的鍵:
(10)獲取所有的鍵對應的值: