redis五中基本数据类型
String
- String是redis最基本的类型,可以理解为与memcached一模一样的类型,一个key对应一个value。value不仅是string,也可以是数字。string类型是二进制安全的,意思是redis的string类型可以包含任何数据,比如jpg或者序列化的对象。string类型的值最大能存储512M
Hash
- Hash是一个(key-value)的集合。redis的hash是一个string的key和value的映射表,hash特别适合存储对象。
List
- list列表是简单的字符串列表,按照插入顺序排序。可以添加一个元素到列表的头部(左边)或者尾部(右边)。
- 应用场景非常多,比如:微博的关注列表,粉丝列表都可以使用list结构来实现。
- 数据结构:list就是列表,可以用来当消息队列用。redis提供了list的push和pop操作,还提供了操作某一段的API,可以直接查询或者删除某一段的元素。实现方式:redis list的实现是一个双向链表,支持反向查找和遍历,更方便操作,不过带来了二额外的内存开销。
set
- set 是string类型的无序集合。set中的元素是没有顺序的,而且是没有重复的。
- 应用场景:redis set对外提供的功能和list一样是一个列表,特殊之处在于set 是自动去重的,而且set提供了判断 某个成员是否在集合中。
zset
*zset和set一样是string类型的集合,且不允许重复的元素。
*使用场景,zset可以通过用户额外提供一个优先级(score)的参数来为成员排序,而且是插入有序的,即自动排序。当你需要一个有序并且不重复的集合列表,那么可以选择zset结构。
- 和set相比,zset关联了一个double类型权重的参数score,使得集合中的元素能够按照score进行有序排列,redis正式通过分数来为集合中的成员进行从小到大的排序。
- 实现方式:redis zset的内部使用HashMap和跳表(skipList)来保证数据的存储和有序,HashMap里面放的是成员到score的映射,而跳跃表里面存放的是所有的成员,排序依据是HashMap上的score,使用跳跃表的结构可以获得比较高的查找效率,并且在实现上比较简单。
类型 | 简介 | 特性 | 场景 |
---|---|---|---|
String | 二进制安全 | 可以包含任何数据,比如jpg或者序列化对象 | |
Hash | 键值对集合,即Java中的map集合 | 适合存储对象,并且可以像数据库中的update一个字段一样,只修改某一项属性值 | 存储、读取、修改用户属性 |
list | 链表(双向链表) | 增删快,提供了操作某一个元素的api | 最新消息排行;消息队列 |
set | hash表实现,元素不重复 | 添加、删除、查找的复杂度都是O(1),提供求交集、并集、差集的操作 | 共同好友、利用唯一性,统计访问网站的所有ip |
zset | 将set中的元素增加一个权重参数score,元素按照score排序 | 数据插入集合时,已经进行了天然的排序 | 排行榜;带权重的消息队列 |