(四)redis常用命令之hash
-
概述
hash这种数据结构也是非常常见的,在redis中,表示的是key仍然是string,value是hash类型的;redis中这种结构形如:key ->value={{filed1 value1},{filed2,filed2}…} -
hset命令(创建hash,并且填充filed)
格式:hset key filed value -
hget命令(获取某个hash的filed值)
格式: hget key filed -
hdel命令(删除hash一个或者多个filed)
格式:hdel key filed1 filed2… -
hlen命令(计算hash的filed个数)
格式: hlen key -
hmset命令(批量设置hash的filed)
格式: hmset key filed1 value filed2 value … -
hmget命令(批量获取hash的filed值)
格式: hmget key filed1 filed2 … -
hexists命令(判断hash的filed是否存在)
格式: hexists key filed -
hkeys命令(获取所有的fileds—>准确来说这个命令最好用hfileds)
格式: hkeys key -
hvals命令(获取hash所有的filed的value)
格式: hvals key -
hgetall命令(获取hash的所有键值对)
格式:hgeetall key
注意:如果hash中的 filed比较多时,可能会导致redis阻塞,慎用,还是推荐使用hmget,获取部分 -
hstrlen命令(计算hash某个filed的值的length)
格式:hstrlen key filed
注意:可能是版本太低,不支持 -
内部编码
ziplist(压缩列表): 当hash元素个数小于hash-max-ziplist-entries并且每个元素值都小于hash-max-ziplist-value字节数
hashtable(hashtable):当不满足上面条件的时候自动转换内部编码格式为hashtable
注意:hash-max-ziplist-entries默认512;hash-max-ziplist-value默认64字节;可在配置文件中自己配置,最好还是使用默认值,默认值可能就是ziplist性能下降的临界点 -
使用场景
1.缓存功能(缓存记录信息,不需要序列化和反序列化,效率相对较高,比较直观)
a.如果从redis可以获取,那么直接返回
b.如果从redis获取不到,那么查询mysql ,再将查询结果放入redis,返回结果
注意:目前我们可以通过两种方式来缓存用户信息 ①使用string,对用户信息进行序列化和反序列化,存储比较紧凑,节省内存开销,但是反序列化和序列化要消耗一定时间②使用hash,对用户信息直接键值对映射存取,比较消耗内存,但是不需要序列化和反序列化,效率较高