引言

在上篇文章中,我们讲述了Redis的基本知识让读者对Redis有了基本的了解。那么这一节我们就来看一下Redis究竟能做什么。

上一节我们提到了Redis可用作数据库,高速缓存和消息队列代理。这句话不错,Redis确实可以做这些事情,但是不够具体,下面我们就从这三点展开来看一下具体怎么使用,用在哪些场景。

数据库

说Redis可以做数据库,那一点也不假具体怎么做呢?不是说Redis没有表结构吗,它不是存在内存吗,断电或宕机不就没了吗?

是的,Redis是nosql的,没有数据库表结构,但这不影响它来存数据,没有了数据库表结构的约束,它的存取会更加灵活。另外别忘了,Redis是可以持久化到磁盘的,具体怎么持久化的我们在以后的章节在详细介绍。Redis通过key-value进行存储,并且支持AOF和RDB两种方式的持久化。

为什么有了关系型数据库还要Redis做数据库呢?原因很简单,就是因为Redis没有复杂的数据库表结构的约束,所以他的存储更加方便灵活。例如我们想做个歌曲播放量排行榜,假如用关系型数据库的话,怎么实现呢?无非就是设计一个排行榜表,记录每个歌曲的播放量,需要展示时,从数据库排序查找播放量最多的前十个。但是这样做是不是很麻烦,如果我们只是临时上一下这个功能,过不了多久就下线的话,那我们的表以后是不是就作废了。

但是如果我们用Redis来记录这些数据的话,那将是非常的方便。我们只需使用Redis提供的zset数据结构即可。zset是一个有序集合,我们使用歌曲名作为key,点击量作为zset的score 值(会根据score值排序)。歌曲被播放时只需修改对应key的score 值就可以了,需要展示前十名时只需要使用redis提供的操作命令,传相应的参数即可的到想要的数据,同时也支持持久化,是不是非常的方便。

所以Redis可以配合关系型数据库弥补其不足,做一些关系型数据库做起来比较麻烦的事。Redis做为数据库的用法的例子非常多,用的也非常的巧妙,这里就不在过多的介绍,感兴趣的可以自行查找。

高速缓存

对于互联网公司和一些较大的公司来说,是非常注重用户体验的,软件响应速度的快慢那是相当重要的,能提高1毫米都至关重要。可能仅仅因为这1毫米就输给对手。所以尽可能提高软件的响应速度就变得异常迫切。而Redis作为高速缓存再合适不过了,上节我们介绍了redis的优点优势和它的强大之处,现在我们就说一写Redis如何做缓存。

首先明确我们做缓存的目的就是,提高效率,提升用户体验。那么无非就是查询的快一点,让用户等的时间更短一些。既然是查询,就要读取数据,我们是读数据库快还是读Redis快?看了上篇文章的肯定知道读Redis快,因为Redis使用的是内存。其次,我们要明确的一点就是,什么样的数据放到缓存里呢?Redis之所以做为缓存,就是对关系型数据库的辅助,显然并不是所有的数据都要放到Redis。那存在Redis的数据遵循什么原则呢?那就是,不经常变更的,查询频繁的数据。如,一些系统级的配置,系统参数,公共数据。不经常变动的又查询的比较频繁的,我没必要每次有人来请求时都去数据库查,况且从数据库查又比较耗时,放到Redis查的又快还能减轻数据库的访问压力,何乐而不为呢?

缓存的读取逻辑是什么样的呢?我们每次读数据的时候,先从Redis读,如果Redis有的话就直接返回,没有的话就去查数据库,然后放到Redis里缓存起来。一定要设置超时时间,让Redis的缓存在一定时间后自动过期删除。然后下次再从数据库读放到缓存里。生产环境切记要设置超时时间,除非明确有一些数据永不超时的可以不设。

消息队列代理

在一些要求不高的场景下,Redis可以充当消息队列。具体怎么实现消息队列,网上一搜一大把,不再讲述。但是如果要求可靠性高的话建议使用专业的消息中间件,ActiveMQ,Kafka,RocketMQ,RabbitMQ等。

Redis的作用就讲到这里,下一节将讲述Redis的安装和基本操作。

最新文章

  1. JavaScript学习笔记1之基础知识点
  2. 第一、初识C语言
  3. nyoj 171 聪明的kk
  4. Awk by Example--转载
  5. 最新中国IP段获取办法与转成ROS导入格式
  6. [Redux] Filtering Redux State with React Router Params
  7. cassandra简单介绍与基本操作
  8. WPF之DataGrid应用
  9. SecureCRT永久设置保护眼睛配色方案
  10. [django]urls.py 中重定向
  11. MulticastSocket 使用
  12. 爬虫解析之css,xpath语法
  13. 连接oracle数据库
  14. Javascript高级编程学习笔记(30)—— BOM(4)navigator对象
  15. Mobius反演的套路
  16. js变量以及其作用域
  17. Linux下部署SSH登录时的二次身份验证环境记录(利用Google Authenticator)
  18. AngularJS 启程三
  19. Go语言之进阶篇请求报文格式分析
  20. jQuery上传插件uploadify 3.2.1

热门文章

  1. Dapr 运用之集成 Asp.Net Core Grpc 调用篇
  2. PDF提取表格的网页工具——Excalibur
  3. Python 库打包分发、setup.py 编写、混合 C 扩展打包的简易指南(转载)
  4. 升级sharepoint2013遇到的坑
  5. Vue.js实现大文件分片md5断点续传
  6. Fragment中不能使用自定义带参构造函数
  7. PMBOK 指南 第三章 项目经理的角色
  8. 林克的小本本之——HCL网络知识随笔
  9. 监听属性watch
  10. Vue-cli项目部署到Nginx