注意
这里只是介绍这五大数据类型的一些理论知识,他们的常见的指令在Redis的基础命令这里
String
- String是Redis最基本的类型,你可以理解成与Memcached一模一样的类型,也就是一个key对应一个value
- String类型是二进制安全的,也就是说Redis的String可以包含任何数据。比如JPG图片和序列化的兑现(Json类型)等等
- String是Redis最基本的数据类型,也是我们在日常中使用最多的类型,一个Redis的字符串value可以存储512M的数据,相当于半个G。
List
- List是单建多值类型,简单来说就是一个键能存放多个值
- Redis列表是简单的
字符串
列表,按照插入顺序排序,你可以添加一个元素导列的头部(左)或尾部(右)
简单来说就是Redis的LIst虽然可以存放多个值,但是这些值只能是String类型哪怕是set,hashzset这些同样只能存储字符串,而且你添加值得时候只能添加在开头或结尾 - 它的底层实际上是一个双向链表,和java的双线链表基本一致,通过索引下标的操作,中间的节点新能比较差,两边的性能非常好
set
- set和list所提供的功能非常类似,但是set能够自动排重,也就是说set不支持存储重复的数据
- set提供了判断存储value的某个值是否存在的接口,这个是list没有的
- Redis的set同样是String类型的无序集合,底层是一个value为null的hash表,所以CRUD的复杂度都是O(1)
举个例子
在一个set类型中存储了key=a value=1 2 3
,实际上在底层是(a,1)(a,2)(a,3)
这样存储的,如果只是创建一个set类型并没有赋值的话就是(a,null)(a,null)(a,null)
这种类型,所以在set里面无法通过索引获取元素
hash
- Redis的hash是一个键值对集合
- Redis的hash是一个String类型的field和value的映射表
- hash特别适合用于存储对象(可以理解为类似JSON数据格式)
- hash有点类似于java的
Map<String,String>
- hash时候用于存储对象数据,详情可看这一篇
zset(sorted set)
- 称为Redis中最复杂的数据类型
- Redis的有序集合zset和普通集合set非常相似,是一个没有重复元素的字符串集合。不同之处是有序集合的每个成员都关联了一个
评分(score)
,这个评分用来按照从最低分到最高分的方式排序集合中的成员。 - 集合的成员是唯一的,但是评分(score)是可重复的
- 值为键(key),分数为值(value)
- 因为元素是有序的,所以我们可以很快的根据评分(score)或者次序(position)来获取一个范围的元素。
- 访问有序集合的中间元素也是非常快的,因此你能使用有序集合作为一个没有重复成员的智能列表