本文最后更新于1 分钟前,文中所描述的信息可能已发生改变。
Redis 存储类型共五种:
1.String类型
String是最简单的类型,一个key对应一个valueString类型的数据最大512MB。String类型的值可以被视作integer,从而可以让“INCR”命令族操作(incrby、decr、decrby),这种情况下,该integer的值限制在64位有符号数。在list、set和zset中包含的独立的元素类型都是Redis String类型。
2.List类型
链表类型,主要功能是push、pop、获取一个范围的所有值等。其中的key可以理解为链表的名字。在Redis中,list就是Redis String的列表,按照插入顺序排序。比如使用LPUSH命令在list头插入一个元素,使用RPUSH命令在list的尾插入一个元素。当这两个命令之一作用于一个空的key时,一个新的list就创建出来了。一个List的最大长度是2^32-1个元素 (4294967295, 每个列表超过40亿个元素)。
3.Set类型
集合,和数学中的集合概念相似。操作中的key理解为集合的名字。在Redis中,set就是Redis String的无序集合,不允许有重复元素。Set的最大元素数是2^32-1。Redis中对set的操作还有交集、并集、差集等。
4.ZSet类型
Zset是set的一个升级版本,在set的基础上增加了一个顺序属性,这一属性在添加修改元素时可以指定,每次指定后zset会自动安装指定值重新调整顺序。可以理解为一张表,一列存value,一列存顺序。操作中的key理解为zset的名字。Zset的最大元素数是2^32-1。对于已经有序的zset,仍然可以使用SORT命令,通过指定ASC|DESC参数对其进行排序。
5.hash类型
hash是最接近关系数据库结构的数据类型,可以将数据库一条记录或程序中一个对象转换成hashmap存放在redis中。
Hash的应用场景:(存储一个用户信息对象数据)
常用于存储一个对象;为什么不用String存储一个对象呢?Hash 是最接近关系型数据结构的数据类型。 可以将数据库一条记录或程序中一个对象序列化为 hashMap 存放在redis中;用户ID为查找的key,存储的value用户对象包含姓名,年龄,生日等信息,如果用普通的key / value结构来存储,主要有以下2中存储方式:第一种方式将用户ID作为查找key,把其他信息封装成一个对象以序列化的方式存储,这种方式的缺点是,增加了序列化 / 反序列化的开销,并且在需要修改其中一项信息时,需要把整个对象取回,并且修改操作需要对并发进行保护,引入CAS等复杂问题;第二种方式是这个用户信息对象有多少成员就存多少个key-value对,用户ID对应属性的名称作为唯一标识来取得属性的值,虽然省去了序列化开销和并发问题,但是用户ID为重复存储,如果存在大量这样的数据,内存浪费还是非常可怕的;总结:Redis 提供的Hash很好的解决了这个问题,Redis的Hash实际是内部存储的Value为一个HashMap,并提供直接存取这个Map的接口;