目录
一、Hash和String的区别
二、常用命令与演示
三、Redis中Hash类型应用场景
一、Hash和String的区别
这是String,
key | value |
name | Trxcx |
这是Hash,
key | value | |
studentTrxcx | name | Trxcx |
age | 21 | |
sex | male |
可以明显的看出,String的value就是一条数据,而Hash的value是由多个“key-value”组成的。
因此,很容易发现,Hash的value适用于存储对象。
为了明确地区分,我们把Hash的value部分的“key”称为field,value部分的“value”称为value。
例如,上面的例子中,studentTrxcx是key,name是field,Trxcx是value。
总结:
关于String,每一条数据(value)由一个索引(key)获得;
关于Hash,每一条数据(value)由两个索引(key和field)获得。
格式 | 含义 | 例子 |
hset key field value | 缓存key下的field-value | hset studentTrxcx name Trxcx |
hget key field | 获取key下的field对应的value值 | hget studentTrxcx name |
hexists key field | 判断key下的field是否存在 | hexists studentTrxcx name |
hdel key field | 删除key下的field字段 | hdel studentTrxcx age |
hincrby key field increment | key下field字段对应value值加上increment | hincrby studentTrxcx age 1 |
hlen key | 获取key下的field字段数量 | hlen studentTrxcx |
hkeys key | 获取key下所有field字段 | hkeys studentTrxcx |
hvals key | 获取key下所有field字段对应的value值 | hvals studentTrxcx |
hgetall key | 获取每一组field-value值 | hgetall studentTrxcx |
127.0.0.1:6379> hset studentTrxcx name Trxcx
(integer) 1
127.0.0.1:6379> hget studentTrxcx name
"Trxcx"
127.0.0.1:6379> hset studentTrxcx age 21
(integer) 1
127.0.0.1:6379> hget studentTrxcx age
"21"
127.0.0.1:6379> hget studentTrxcx // 无法直接hget到key下的所有数据
(error) ERR wrong number of arguments for 'hget' command
127.0.0.1:6379> hexists studentTrxcx name // key对应的field存在,则返回1,否则返回0
(integer) 1
127.0.0.1:6379> hexists studentTrxcx sex
(integer) 0
127.0.0.1:6379> hdel studentTrxcx age
(integer) 1
127.0.0.1:6379> hget studentTrxcx age
(nil)
127.0.0.1:6379> hset studentTrxcx age 21
(integer) 1
127.0.0.1:6379> hincrby studentTrxcx age 1
(integer) 22
127.0.0.1:6379> hget studentTrxcx age
"22"
127.0.0.1:6379> hlen studentTrxcx
(integer) 2
127.0.0.1:6379> hkeys studentTrxcx
1) "name"
2) "age"
127.0.0.1:6379> hvals studentTrxcx
1) "Trxcx"
2) "22"
127.0.0.1:6379> hgetall studentTrxcx
1) "name"
2) "Trxcx"
3) "age"
4) "22"
三、Redis中Hash类型应用场景
共享session,和使用string的区别是:
如果把user对象转换为json字符串存redis,此时使用string类型来实现共享session,方便查找但不利于修改(要改动某个字段需要获取整个对象)【实际中常用】
如果把user对象转换为hash对象存redis,此时使用hash类型来实现共享session,方便修改但不利于查找(查找的时候获取到的是map,要再次转换为对象)