Redis数据模型

1)String类型

  常用命令:见http://doc.redisfans.com/

  应用场景:.

    统计相关业务,例如朋友圈点赞 

    解决多线程的线程安全问题   

    缓存功能:字符串最经典的使用场景,redis最为缓存层,Mysql作为储存层,绝大部分请求数据都是redis中获取,由于redis具有支撑高并发特性,所以缓存通常能起到加速读写和降低 后端压力的作用。
(redis为何具备支撑高并发的特性,下次文章讲解)。
    计数器:许多运用都会使用redis作为计数的基础工具,他可以实现快速计数、查询缓存的功能,同时数据可以一步落地到其他的数据源。如:视频播放数系统就是使用redis作为视频播放数计数的基础组件。
    共享session:出于负载均衡的考虑,分布式服务会将用户信息的访问均衡到不同服务器上,用户刷新一次访问可能会需要重新登录,为避免这个问题可以用redis将用户session集中管理,在这种模式下只要保证redis的高可用和扩展性的,每次获取用户更新或查询登录信息都直接从redis中集中获取。
    限速:处于安全考虑,每次进行登录时让用户输入手机验证码,为了短信接口不被频繁访问,会限制用户每分钟获取验证码的频率。

2)List类型(列表)

  基于Linked List(双向链表)实现,元素是字符串类型

  特点:列表头尾增删快,中间增删慢(主要是由于两条记录顺序的链的增删效率)元素可重复出现,最多包含2^32-1个元素

  应用场景:

    处理排名类业务以及论坛回帖楼层

    消息队列: redis的lpush+brpop命令组合即可实现阻塞队列,生产者客户端是用lupsh从列表左侧插入元素, 多个消费者客户端使用brpop命令阻塞时的“抢”列表尾部的元素,多个客户端保证了消费的负载均衡 和高可用性;

  使用列表技巧:
    lpush+lpop=Stack(栈)
    lpush+rpop=Queue(队列)
    lpush+ltrim=Capped Collection(有限集合)
    lpush+brpop=Message Queue(消息队列)

3)Hash类型(散列)

  特点:由Field和与之关联的value组成的map键值对,Field和value是字符串类型,1个hash最多包含2^32-1个键值对

  应用场景:在Redis存储中,能用hash尽量用hash,因为由于Key值的减少可以节约内存空间,不适用的场景是需要设置键过期功能的key,Redis的key的过期功能只能对键操作,而Hash结构不能单独对某一个filed设置过期功能。

4)Set类型(集合)

  特点:无序的、去重的,元素是字符串类型,最多包含2^32-1个元素,不能通过索引下标获取元素,redis除了支持集合内的增删改查,同时还支持多个集合取交集、并集、 差集,

  应用场景:新浪微博中的共同关注功能,通过取用户关注中的交集实现

 5)Zset(sorted set)类型(Redis3.x以后支持的数据类型)

  特点:类似Set集合,有序的、去重的,元素是字符串类型,每一个元素都关联着一个浮点数分值(Score),并按照分值从小到大的顺序排列集合中的元素。分值可以相同,最多包含2^32-1个元素

  应用场景:需要有序且唯一的业务或操作,例:网易云音乐的排行榜功能

猜你喜欢

转载自www.cnblogs.com/lzghyh/p/12599393.html