当前位置: 首页 > Linux

Redis应用场景

时间:2023-04-06 23:35:08 Linux

redis介绍REmoteDIctionaryServer(Redis)是由SalvatoreSanfilippo编写的一个键值存储系统。Redis是开源的,用ANSIC语言编写,遵守BSD协议,支持网络,可以是基于内存的也可以是持久化的,日志型,Key-Value数据库,提供多种语言的API。它常被称为数据结构服务器,因为值(value)可以是字符串(String)、散列(Hash)、列表(list)、集合(sets)和有序集合(sortedsets)等类型。Redis采用基于内存的KV数据库,采用单进程单线程模型,用C语言编写。官方提供的数据是10万+qps的单线程优势。代码更清晰,处理逻辑更简单。不需要考虑各种锁。没有释放锁的操作,不存在可能死锁带来的性能消耗。没有消耗CPU的多进程或多线程切换。Redis线程是安全的。单线程的劣势无法充分发挥多核CPU的性能。但是可以通过在单机上开启多个Redis实例来改善redis的应用场景。令牌(Token)生成短信验证码。排行榜消息队列Redis中list的数据结构实现是一个双向链表,所以可以很方便的应用到消息队列中(生产者/消费者模型)。消息的生产者只需要通过lpush将消息放入链表,消费者通过rpop取出消息即可,可以保证消息的顺序。如果需要实现一个有优先级的消息队列,也可以选择sortedset。并且发布/订阅功能也可以用作消息的发布者/订阅者模型。无论采用哪种方式,由于Redis具有持久化功能,无需担心服务器故障导致消息丢失。如果你对数据的一致性要求高,你应该使用专业的系统,比如RocketMQ。由于redis向队列中添加数据,返回的是添加元素在队列中的个数,因此可以判断用户访问的是第几个数。这种业务队列不仅可以将并发请求变成串行,还可以作为队列或者栈分布式锁验证前端重复请求,可以通过redis过滤。秒杀系统基于redis的单线程特性,防止数据库“爆破”生成全局增量ID,类似于统计点击等应用的“秒杀”计数器。由于是单线程,可以避免并发问题,保证不出错,100%毫秒级性能!计数功能应该是Redis最适合的使用场景之一,因为其高频读写的特性可以充分发挥Redis作为内存数据库的效率。Redis数据结构中,string、hash、sortedset都提供了incr方法进行原子自增操作。示例:如果应用需要显示每天的注册用户数,可以使用string作为计数器,设置一个名为REGISTERED_COUNT_TODAY的key,并在初始化时为其设置一个过期时间为0:00am,每次用户注册成功使用incr命令将key加1,同时,每天0:00后,由于key过期,计数器会将值清零。每条微博都有四个属性:点赞数、评论数、转发数、浏览数。这个时候用hash来计数比较好。计数器的key设置为weibo:weibo_id,hash的字段有like_number、comment_number、Forward_number和view_number,经过相应的操作后,hash中的字段通过hincrby自增。如果应用有发布排行榜的功能,选择sortedset,设置set的key为POST_RANK。当用户发帖时,使用zincrby将用户id的分值加1,sortedset会重新排序,实时更新用户在排行榜上的位置。缓存参考:1)https://www.scienjus.com/redi...2)https://segmentfault.com/a/11...