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)获取所有的键对应的值: