全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

深入解析Redis中常见的应用场景

前言

Redis是一个key-value存储系统,现在在各种系统中的使用越来越多,大部分情况下是因为其高性能的特性,被当做缓存使用,这里介绍下Redis经常遇到的使用场景。下面话不多说了,来一起看看详细的介绍吧。

Redis特性

一个产品的使用场景肯定是需要根据产品的特性,先列举一下Redis的特点:

  • 读写性能优异
  • 持久化
  • 数据类型丰富
  • 单线程
  • 数据自动过期
  • 发布订阅
  • 分布式

这里我们通过几个场景,不同维度说下Redis的应用。

高性能适合当做缓存

缓存是Redis最常见的应用场景,之所有这么使用,主要是因为Redis读写性能优异。而且逐渐有取代memcached,成为首选服务端缓存的组件。而且,Redis内部是支持事务的,在使用时候能有效保证数据的一致性。
作为缓存使用时,一般有两种方式保存数据:

      1、读取前,先去读Redis,如果没有数据,读取数据库,将数据拉入Redis。

      2、插入数据时,同时写入Redis。

方案一:实施起来简单,但是有两个需要注意的地方:

     1、避免缓存击穿。(数据库没有就需要命中的数据,导致Redis一直没有数据,而一直命中数据库。)

     2、数据的实时性相对会差一点。

方案二:数据实时性强,但是开发时不便于统一处理。

当然,两种方式根据实际情况来适用。如:方案一适用于对于数据实时性要求不是特别高的场景。方案二适用于字典表、数据量不大的数据存储。

丰富的数据格式性能更高,应用场景丰富

Redis相比其他缓存,有一个非常大的优势,就是支持多种数据类型。

数据类型 说明
string 字符串,最简单的k-v存储
hash hash格式,value为field和value,适合ID-Detail这样的场景。
list 简单的list,顺序列表,支持首位或者末尾插入数据
set 无序list,查找速度快,适合交集、并集、差集处理
sorted set 有序的set

其实,通过上面的数据类型的特性,基本就能想到合适的应用场景了。

  • string——适合最简单的k-v存储,类似于memcached的存储结构,短信验证码,配置信息等,就用这种类型来存储。
  • hash——一般key为ID或者唯一标示,value对应的就是详情了。如商品详情,个人信息详情,新闻详情等。
  • list——因为list是有序的,比较适合存储一些有序且数据相对固定的数据。如省市区表、字典表等。因为list是有序的,适合根据写入的时间来排序,如:最新的***,消息队列等。
  • set——可以简单的理解为ID-List的模式,如微博中一个人有哪些好友,set最牛的地方在于,可以对两个set提供交集、并集、差集操作。例如:查找两个人共同的好友等。
  • Sorted Set——是set的增强版本,增加了一个score参数,自动会根据score的值进行排序。比较适合类似于top 10等不根据插入的时间来排序的数据。

如上所述,虽然Redis不像关系数据库那么复杂的数据结构,但是,也能适合很多场景,比一般的缓存数据结构要多。了解每种数据结构适合的业务场景,不仅有利于提升开发效率,也能有效利用Redis的性能。

单线程可以作为分布式锁

谈到Redis和Memcached 的区别,大家更多的是谈到数据结构和持久化这两个特性,其实还有一个比较大的区别就是:

  • Redis 是单线程,多路复用方式提高处理效率。
  • Memcached 是多线程的,通过CPU线程切换来提高处理效率。

所以Redis单线程的这个特性,其实也是很重要的应用场景,最常用的就是分布式锁。

应对高并发的系统,都是用多服务器部署,每个技术框架针对数据锁都有很好的处理方式,如 .net 的lock,java 的synchronized,都能通过锁住某个对象来应对线程导致的数据污染问题。但是毕竟,只能控制本服务器的线程,分布式部署

以后数据污染问题,就比较难处理了。Redis的单线程这个特性,就非常符合这个需求,伪代码如下:

//产生锁
while lock!=1
 //过期时间是为了避免死锁
 now = int(time.time())
 lock_timeout = now + LOCK_TIMEOUT + 1
 lock = redis_client.setnx(lock_key, lock_timeout)

//真正要处理的业务
doing()

//释放锁
now = int(time.time())
if now < lock_timeout:
 redis_client.delete(lock_key)

以上是一个只说明流程的伪代码,其实整体的逻辑是很简单的,只要考虑到死锁时的情况,就比较好处理了。Redis作为分布式锁,因为其性能的优势,不会成为瓶颈,一般会产生瓶颈的是真正的业务处理内容,还是尽量缩小锁的范围来确保系统性能。

自动过期能有效提升开发效率

Redis针对数据都可以设置过期时间,这个特点也是大家应用比较多的,过期的数据清理无需使用方去关注,所以开发效率也比较高,当然,性能也比较高。最常见的就是:短信验证码、具有时间性的商品展示等。无需像数据库还要去查时间进行对比。因为使用比较简单,就不赘述了。

分布式和持久化有效应对海量数据和高并发

Redis初期的版本官方只是支持单机或者简单的主从,大多应用则都是自己去开发集群的中间件,但是随着应用越来越广泛,用户关于分布式的呼声越来越高,所以Redis 3.0版本时候官方加入了分布式的支持,主要是两个方面:

  • Redis服务器主从热备,确保系统稳定性
  • Redis分片应对海量数据和高并发

而且Redis虽然是一个内存缓存,数据存在内存,但是Redis支持多种方式将数据持久化,写入硬盘,所有,Redis数据的稳定性也是非常有保障的,结合Redis的集群方案,有的系统已经将Redis当做一种NoSql数据存储来适用。

示例:秒杀和Redis的结合

秒杀是现在互联网系统中常见的营销模式,作为开发者,其实最不愿意这样的活动,因为非技术人员无法理解到其中的技术难度,导致在资源协调上总是有些偏差。秒杀其实经常会出现的问题包括:

  1. 并发太高导致程序阻塞。
  2. 库存无法有效控制,出现超卖的情况。

其实解决这些问题基本就两个方案:

  • 数据尽量缓存,阻断用户和数据库的直接交互。
  • 通过锁来控制避免超卖现象。

现在说明一下,如果现在做一个秒杀,那么,Redis应该如何结合进行使用?

  • 提前预热数据,放入Redis
  • 商品列表放入Redis List
  • 商品的详情数据 Redis hash保存,设置过期时间
  • 商品的库存数据Redis sorted set保存
  • 用户的地址信息Redis set保存
  • 订单产生扣库存通过Redis制造分布式锁,库存同步扣除
  • 订单产生后发货的数据,产生Redis list,通过消息队列处理
  • 秒杀结束后,再把Redis数据和数据库进行同步

以上是一个简略的秒杀系统和Redis结合的方案,当然实际可能还会引入http缓存,或者将消息对接用MQ代替等方案,也会出现业务遗漏的情况,这个只是希望能抛砖引玉。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者使用工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。


# redis  # 应用场景  # redis的应用场景  # redis应用场景及实例  # redis数据类型及应用场景知识点总结  # 浅谈Redis在微服务架构中的几种应用场景  # Redis的11种Web应用场景简介  # Redis数据库的应用场景介绍  # 浅谈Redis在直播场景的实践方案  # 浅谈redis五大数据结构和使用场景  # Redis数据库的使用场景介绍(避免误用Redis)  # Redis中5种数据结构的使用场景介绍  # 了解Redis常见应用场景  # 是一个  # 数据结构  # 死锁  # 单线程  # 秒杀  # 的是  # 都是  # 是因为  # 也能  # 适用于  # 较高  # 高性能  # 验证码  # 最简单  # 类似于  # 也比  # 最常见  # 就比  # 数据存储  # 污染问题 


相关文章: c# Task.ConfigureAwait(true) 在什么场景下是必须的  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  海南网站制作公司有哪些,海口网是哪家的?  已有域名建站全流程解析:网站搭建步骤与建站工具选择  如何在Golang中使用encoding/gob序列化对象_存储和传输数据  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  如何确保FTP站点访问权限与数据传输安全?  如何在阿里云域名上完成建站全流程?  网站制作难吗安全吗,做一个网站需要多久时间?  Bpmn 2.0的XML文件怎么画流程图  教学论文网站制作软件有哪些,写论文用什么软件 ?  建站之星如何开启自定义404页面避免用户流失?  网站制作价目表怎么做,珍爱网婚介费用多少?  如何在VPS电脑上快速搭建网站?  建站之星安装失败:服务器环境不兼容?  如何高效利用200m空间完成建站?  如何在云指建站中生成FTP站点?  如何在万网自助建站平台快速创建网站?  阿里云网站制作公司,阿里云快速搭建网站好用吗?  网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?  如何选择高效稳定的ISP建站解决方案?  公司网站设计制作厂家,怎么创建自己的一个网站?  动图在线制作网站有哪些,滑动动图图集怎么做?  沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?  广州网站建站公司选择指南:建站流程与SEO优化关键词解析  建站VPS配置与SEO优化指南:关键词排名提升策略  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  C++中引用和指针有什么区别?(代码说明)  nginx修改上传文件大小限制的方法  建站中国官网:模板定制+SEO优化+建站流程一站式指南  如何快速搭建安全的FTP站点?  创业网站制作流程,创业网站可靠吗?  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  打鱼网站制作软件,波克捕鱼官方号怎么注册?  Android滚轮选择时间控件使用详解  如何安全更换建站之星模板并保留数据?  建站之星如何实现PC+手机+微信网站五合一建站?  如何在阿里云香港服务器快速搭建网站?  如何在万网ECS上快速搭建专属网站?  北京网站制作的公司有哪些,北京白云观官方网站?  较简单的网站制作软件有哪些,手机版网页制作用什么软件?  Android使用GridView实现日历的简单功能  网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?  独立制作一个网站多少钱,建立网站需要花多少钱?  青岛网站建设如何选择本地服务器?  湖北网站制作公司有哪些,湖北清能集团官网?  如何选择建站程序?包含哪些必备功能与类型?  如何用VPS主机快速搭建个人网站?  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  如何用狗爹虚拟主机快速搭建网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。