简介
常用命令:hget;hset;hgetall等
我们可以将Redis中的Hashes类型看成具有String Key和String Value的map容器。所以该类型非常适合于存储值对象的信息。如Username、Password和Age等。如果Hash中包含很少的字段,那么该类型的数据也将仅占用很少的磁盘空间。每一个Hash可以存储4294967295个键值对。
应用场景
同样是缓存,在Memcached中,我们经常将一些结构化的信息打包成HashMap,在客户端序列化后存储为一个字符串的值,比如用户的昵称、年龄、性别、积分等,这时候在需要修改其中某一项时,通常需要将所有值取出反序列化后,修改某一项的值,再序列化存储回去。这样不仅增大了开销,也不适用于一些可能并发操作的场合(比如两个并发的操作都需要修改积分)。而Redis的Hash结构可以使你像在数据库中Update一个属性一样只修改某一项属性值。
实例介绍
key value
userID username;age;birthday
普通存储方式:
第一种:key:userID; value:username;age;birthday
第二种:key:userID+name value:name
key:userID+age value:age
key:userID+birthday value:birthday;
第一种缺点:当需要修改其中某一项,如生日时,需要把整个对象取出来,更新值之后,再放进去。同时在修改时还要保护并发,避免产生脏数据等;
第二种缺点:用户ID一直在重复的存储,浪费内存;
如果用redis的hash类型,会是这样存放的,如下图:
key依旧是userID,但是value值却是一个map,map中依旧存在key和value;key是姓名标签,对应的value是具体的姓名;如果需要修改姓名值时,只加用userID+field(姓名)就可以修改姓名值了。这样操作不需要重复存储数据,也不需要想第一种那样担心,取出来之后,有并发操作。
相关命令列表
这里只介绍常用的几个
(这里关于redis的每一篇文章,都是初稿,因为小编还在研究中,会不断更新的)