一、redis数据类型
1、String
字符串类型是redis最基础的数据库结构,其他几种都是建立在字符串类型基础上。字符串类型可以是(简单的字符串、复杂的字符串(xml、json)、数字(整数、浮点数)、二进制(图片、音频、视频),但是最大不能超过512M。
场景:缓存功能:redis 作为缓存层,mysql作为存储层,大部分请求数据从redis中获取,redis支持高并发特性,因此缓存通常可以起到加速读写和降低后端压力的作用。
计数器:redis作为计数的工具,可以快速计数及查询缓存的功能,同时数据可以一步落地到其他数据源。比如:视频播放数
共享session:出于负载均衡的考虑,分布式服务会将用户信息的访问均衡到不同服务器上,用户刷新一次访问可能会需要重新登录,为了避免这个问题,使用redis将 用户session集中管理,在这种模式下只要保证redis的高可用和扩展性,每次用户刷新或查询登录信息都从redis中集中获取。
限速:出于安全考虑,用户进行登录时让用户输入手机验证码,为了保证短信接口不被频繁访问,限制用户每分钟获取验证码的频率。
2、Hash
在redis中哈希类型,如 value={{field1,value1},......{fieldN,valueN}} ,hash数据类型在存储上述类型数据时具有比string类型更灵活、更快的优势,具体的说,使用string类型存储,必然需要转换和解析json格式的字符串,即便不需要转换,在内存开销方面,hash占优势。
场景:hash类型适合存储对象类数据,相对于string中介绍的把对象转化为json字符串存储,hash的结构可以任意添加或者删除字段名,更高效灵活。
3、List
list是按照插入顺序排序的字符串链表,可以在头部和尾部插入新的元素(双向链表的实现,两端添加元素的时间复杂度为O(1))。插入元素时,如果key不存在,redis会为该key创建一个新的链表,如果链表中所有的元素都被移除,该key也会被从redis中移除。在redis命令中用lpush在list头部插入元素,用rpop命令在list尾取出数据。
场景:消息队列
4、Set
集合类型用来保存多个字符串的元素,但是和列表不同的是集合不允许有重复的元素,并且集合中的元素是无序的,不能通过索引下标获取元素,redis除了支持集合内增删改查,同时还支持多个集合交集、并集、差集,并合理的使用好集合类型,能在实际开发中解决很多实际问题。
场景:集合类型比较典型的使用场景,就是用户同一类感兴趣的标签,这些标签可以得到同一标签的用户。
5、zset
有序集合保留了集合不能有重复元素的特性,不同的是,有序集合的元素是可以排序的,但是它和列表的使用索引下标作为排序不同的是,它给每个元素设置一个分数,作为排序的依据。(有序集合中的元素不可以重复,但是score可以重复)
场景:有序集合经典使用场景,如视频网站对视频做排行榜,榜单根据多维度:时间,播放量,收藏等等。