前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis(五)---应用场景

Redis(五)---应用场景

作者头像
Autooooooo
发布2020-11-09 10:24:55
6190
发布2020-11-09 10:24:55
举报
文章被收录于专栏:Coxhuang

Redis(一)-----主从复制 : https://cloud.tencent.com/developer/article/1744810

Redis(二)-----数据分区 : https://cloud.tencent.com/developer/article/1744809

Redis(三)-----集群方案 : https://cloud.tencent.com/developer/article/1744811

Redis(四)-----持久化 : https://cloud.tencent.com/developer/article/1744791

Redis(五)-----应用场景 : https://cloud.tencent.com/developer/article/1744816

Redis(六)-----缓存穿透/缓存雪崩/缓存击穿 : https://cloud.tencent.com/developer/article/1744796

Redis(七)—淘汰删除策略 : https://cloud.tencent.com/developer/article/1744827

Redis应用场景

#1 Redis应用场景

  • 缓存
  • 排行榜
  • 计数器
  • 队列
  • 最新列表
  • 分布式锁

#2 缓存

Redis的字符串、哈希表两种数据结构适合用来储存大量的键值对信息,从而实现高速缓存。合理的利用缓存不仅能够提升网站访问速度,还能大大降低数据库的压力。Redis提供了键过期功能,也提供了灵活的键淘汰策略,所以,现在Redis用在缓存的场合非常多。

#3 排行榜

很多网站都有排行榜应用的,如淘宝的月度销量榜单、商品按时间的上新排行榜等。Redis提供的有序集合数据类构能实现各种复杂的排行榜应用。Redis sorted set的使用场景与set类似,区别是set不是自动有序的,而sorted set可以通过用户额外提供一个优先级(score)的参数来为成员排序,并且是插入有序的,即自动排序。当你需要一个有序的并且不重复的集合列表,那么可以选择sorted set数据结构

  • zset可以用来存储粉丝列表,value值是粉丝的ID,score是关注的时间,我们乐意对粉丝列表按关注时间进行排序
  • zse还可以用来存储学生的成绩,value值是学生的ID,score是他的成绩,我们可以对成绩按分数进行排序就可以得到他的名次
代码语言:javascript
复制
127.0.0.1:6379> zadd books 9.0 "Python"
(integer) 1
127.0.0.1:6379> zadd books 8.8 "JavaScript"
(integer) 1
127.0.0.1:6379> zadd books 8.1 "Golang"
(integer) 1
127.0.0.1:6379> zadd books 8.0 "Golang"
(integer) 0
(integer) 0
127.0.0.1:6379> zrange books 0 -1 # 0 表示有序集第一个成员, -1 表示最后一个成员
1) "Golang"
2) "JavaScript"
3) "Python"
127.0.0.1:6379> zrange books 0 10
1) "Golang"
2) "JavaScript"
3) "Python"
127.0.0.1:6379> zrevrange books 0 10 # 倒序
1) "Python"
2) "JavaScript"
3) "Golang"

#4 计数器

什么是计数器,如电商网站商品的浏览量、视频网站视频的播放数等。为了保证数据实时效,每次浏览都得给+1,并发量高时如果每次都请求数据库操作无疑是种挑战和压力。Redis提供的incr命令来实现计数器功能,内存操作,性能非常好,非常适用于这些计数场景。

代码语言:javascript
复制
127.0.0.1:6379> SET rank 50
OK
127.0.0.1:6379> INCRBY rank 20
(integer) 70
127.0.0.1:6379> GET rank
"70"

#5 队列

  • 使用"列表"数据结构,可以实现普通级和优先级队列的功能
  • 使用"有序集合"数据结构,可以实现优先级队列
  • 使用"哈希表"数据结构,可以实现延时队列

#5.1 Redis和RabbitMQ区别

  1. 可靠性
  2. Redis :没有相应的机制保证消息的可靠消费,如果发布者发布一条消息,而没有对应的订阅者的话,这条消息将丢失,不会存在内存中;
  3. RabbitMQ:具有消息消费确认机制,如果发布一条消息,还没有消费者消费该队列,那么这条消息将一直存放在队列中,直到有消费者消费了该条消息,以此可以保证消息的可靠消费
  4. 实时性
  5. Redis : 实时性高,redis作为高效的缓存服务器,所有数据都存在内存中,所以它具有更高的实时性
  6. 消费者负载均衡
  7. Redis : 发布订阅模式,一个队列可以被多个消费者同时订阅,当有消息到达时,会将该消息依次发送给每个订阅者,她是一种消息的广播形式,redis本身不做消费者的负载均衡,因此消费效率存在瓶颈;
  8. RabbitMQ 队列可以被多个消费者同时监控消费,但是每一条消息只能被消费一次,由于rabbitmq的消费确认机制,因此它能够根据消费者的消费能力而调整它的负载;
  9. 持久性
  10. Redis : redis的持久化是针对于整个redis缓存的内容,它有RDB和AOF两种持久化方式(redis持久化方式,后续更新),可以将整个redis实例持久化到磁盘,以此来做数据备份,防止异常情况下导致数据丢失。
  11. RabbitMQ : 队列,每条消息都可以选择性持久化,持久化粒度更小,更灵活;
  12. 队列监控
  13. Redis : 没有所谓的监控平台。
  14. RabbitMQ : 实现了后台监控平台,可以在该平台上看到所有创建的队列的详细情况,良好的后台管理平台可以方面我们更好的使用;

总结

  • Redis : 轻量级,低延迟,高并发,低可靠性;
  • RabbitMQ : 重量级,高可靠,异步,不保证实时;
  • RabbitMQ 是一个专门的AMQP协议队列,他的优势就在于提供可靠的队列服务,并且可做到异步,而redis主要是用于缓存的,redis的发布订阅模块,可用于实现及时性,且可靠性低的功能。

#6 最新列表

Redis列表结构,RPUSH/LPUSH可以在列表插入一个内容ID作为关键字,LTRIM可用来截取列表的数量,每插入一条数据就调用一次LTRIM(这也是官方给的方法),就可以获取最近的数据。

代码语言:javascript
复制
127.0.0.1:6379> RPUSH mylist "hello"
(integer) 1
127.0.0.1:6379> RPUSH mylist "hello"
(integer) 2
127.0.0.1:6379> RPUSH mylist "foo"
(integer) 3
127.0.0.1:6379> RPUSH mylist "bar"
(integer) 4
127.0.0.1:6379> LTRIM mylist 1 -1
OK
127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello"
2) "foo"
3) "bar"
127.0.0.1:6379> RPUSH mylist "haha"
(integer) 4
127.0.0.1:6379> RPUSH mylist "xoxo"
(integer) 5
127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello"
2) "foo"
3) "bar"
4) "haha"
5) "xoxo"

#7 分布式锁

分布式技术带来的技术挑战是对同一个资源的并发访问,如全局ID、减库存、秒杀等场景,并发量不大的场景可以使用数据库的悲观锁、乐观锁来实现,但在并发量高的场合中,利用数据库锁来控制资源的并发访问是不太理想的,大大影响了数据库的性能。可以利用Redis的setnx功能来编写分布式的锁,如果设置返回1说明获取锁成功,否则获取锁失败,实际应用中要考虑的细节要更多

  • 秒杀系统,基于redis是单线程特征,防止出现数据库“爆破”
  • 全局增量ID生成,类似“秒杀”
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/03/06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Redis(一)-----主从复制 : https://cloud.tencent.com/developer/article/1744810
  • Redis应用场景
    • #1 Redis应用场景
      • #2 缓存
        • #3 排行榜
          • #4 计数器
            • #5 队列
              • #5.1 Redis和RabbitMQ区别
            • #6 最新列表
              • #7 分布式锁
              相关产品与服务
              云数据库 Redis
              腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档