redis 应用场景

redis简介

REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。
Redis是一个开源的使用ANSI C语言编写、遵照BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
它一般被称为数据结构服务器,由于值(value)能够是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
Redis采用的是基于内存的采用的是单进程单线程模型的KV数据库,由C语言编写。官方提供的数据是能够达到100000+的qps前端

单线程优势

  • 代码更清晰,处理逻辑更简单
  • 不用去考虑各类锁的问题,不存在加锁释放锁操做,没有由于可能出现死锁而致使的性能消耗
  • 不存在多进程或者多线程致使的切换而消耗CPU
  • redis线程是安全的

单线程缺点

  • 没法发挥多核CPU性能,不过能够经过在单机开多个Redis实例来完善

redis应用场景

  • 令牌(Token)生成
  • 短信验证码
  • 排行榜
  • 消息队列
    Redis 中list的数据结构实现是双向链表,因此能够很是便捷的应用于消息队列(生产者 / 消费者模型)。消息的生产者只须要经过lpush将消息放入 list,消费者即可以经过rpop取出该消息,而且能够保证消息的有序性。若是须要实现带有优先级的消息队列也能够选择sorted set。而pub/sub功能也能够用做发布者 / 订阅者模型的消息。不管使用何种方式,因为 Redis 拥有持久化功能,也不须要担忧因为服务器故障致使消息丢失的状况。
    若是对于数据一致性要求高的话仍是用RocketMQ等专业系统。
    因为redis把数据添加到队列是返回添加元素在队列的第几位,因此能够作判断用户是第几个访问这种业务
    队列不只能够把并发请求变成串行,而且还能够作队列或者栈使用
  • 分布式锁
    验证前端的重复请求,能够经过redis进行过滤
    秒杀系统,基于redis是单线程特征,防止出现数据库“爆破”
    全局增量ID生成,相似“秒杀”
  • 计数器
    诸如统计点击数等应用。因为单线程,能够避免并发问题,保证不会出错,并且100%毫秒级性能!
    计数功能应该是最适合 Redis 的使用场景之一了,由于它高频率读写的特征能够彻底发挥 Redis 做为内存数据库的高效。在 Redis 的数据结构中,string、hash和sorted set都提供了incr方法用于原子性的自增操做。
    例子:redis

    • 若是应用须要显示天天的注册用户数,即可以使用string做为计数器,设定一个名为REGISTERED_COUNT_TODAY的 key,并在初始化时给它设置一个到凌晨 0 点的过时时间,每当用户注册成功后便使用incr命令使该 key 增加 1,同时当天天凌晨 0 点后,这个计数器都会由于 key 过时使值清零。
    • 每条微博都有点赞数、评论数、转发数和浏览数四条属性,这时用hash进行计数会更好,将该计数器的 key 设为weibo:weibo_id,hash的 field 为like_number、comment_number、forward_number和view_number,在对应操做后经过hincrby使hash 中的 field 自增。
    • 若是应用有一个发帖排行榜的功能,便选择sorted set吧,将集合的 key 设为POST_RANK。当用户发帖后,使用zincrby将该用户 id 的 score 增加 1。sorted set会从新进行排序,用户所在排行榜的位置也就会获得实时的更新。
  • 缓存

参考:
1) https://www.scienjus.com/redi...
2) https://segmentfault.com/a/11...数据库

相关文章
相关标签/搜索