引言

在上篇文章中,我们讲述了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的安装和基本操作。

Redis入门(二)-Redis能够做什么的更多相关文章

  1. redis入门(二)

    目录 redis入门(二) 前言 持久化 RDB AOF 持久化文件加载 高可用 哨兵 流程 安装部署 配置技巧 集群 原理 集群搭建 参考文档 redis入门(二) 前言 在redis入门(一)简单 ...

  2. Redis系列(二):Redis的数据类型及命令操作

    原文链接(转载请注明出处):Redis系列(二):Redis的数据类型及命令操作 Redis 中常用命令 Redis 官方的文档是英文版的,当然网上也有大量的中文翻译版,例如:Redis 命令参考.这 ...

  3. Redis入门实例(Redis+Sprint+maven创建工程)

    一.>创建一个maven工程应用和相关配置:Redis_study,创建工程应用过程略 1.>配置pom.xml:文件内容如下 <project xmlns="http:/ ...

  4. <Redis> 入门二 五种数据类型的操作、通用key的操作、发布订阅

    文档参考:http://www.redis.net.cn/ string - > key value 简单的keyvalue,常规计数:例如微博数,粉丝数 set     -> key v ...

  5. Redis 入门之Redis简介

    Reids 是一个开源的高性能键值对数据库.它通过多种键值数据类型来适应不同场景下的存储需求,并借助许多高层级的接口使其可以胜任如缓存.队列系统等不同的角色. 1.Reids的诞生 Redis到底是在 ...

  6. Redis(十二):redis两种持久化方法对比分析

    前言 最近在项目中使用到Redis做缓存,方便多个业务进程之间共享数据.由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能,将数 ...

  7. Redis入门笔记-redis内部数据结构(01)

    redis是一个轻量级的Nodsql数据库,使用kev-value的形式存储数据,在redis的世界里,没有整数.浮点数等概念,大多数情况下数据以字符串形式展现,偶尔会出现Long类型数据的场景. 一 ...

  8. redis教程(二)-----redis事务、记录日志到redis、分布式锁

    redis事务 Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证: 批量操作在发送 EXEC 命令前被放入队列缓存. 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余 ...

  9. Redis系列二 Redis数据库介绍

    1.SELECT命令 通过查看配置文件可以知道Redis默认有17个库,从0-16. 默认是在0号库.选择库使用SELECT <dbid>命令.例如选择0号库  SELECT 0 2.DB ...

  10. redis入门(一)

    目录 redis入门(一) 前言 特性 速度快 简单稳定 丰富的功能 历史 历史版本 安装与启动 安装 数据类型与内部编码 数据结构 内部编码 常用API与使用场景 常用命令 字符串 列表 哈希 集合 ...

随机推荐

  1. Redis数据类型和操作

    <"Java技术员"成长手册>,包含框架.存储.搜索.优化.分布式等必备知识,都收集在GitHub JavaEgg ,N线互联网开发必备技能兵器谱,欢迎指导 Redis ...

  2. poj 2823 Sliding Windows (单调队列+输入输出挂)

    Sliding Window Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 73426   Accepted: 20849 ...

  3. 自制导纳信号发生器 [原创cnblogs.com/helesheng]

    最近正在研制一种通过测量人体导纳,估算体内血液变化率,进而评估心血管系统泵血功能的医疗仪器.为测量人体导纳,我们设计了一套巧妙的激励信号幅度反馈电路,该电路由于涉及商业机密就不在这里讨论了.这里主要分 ...

  4. 新手Linux之路之Deepin

    用了很久的Window,心血来潮想换个系统,于是就开始踩坑Linux之路. 系统为deepin 首先基本的 设置root密码 $:sudo passwd root [sudo] password fo ...

  5. Linux’s init system & systemd

    一.init system 1.计算机是如何启动的 以早期 Fedora 系统为例. 1.开机 2.BIOS 和 GRUB(引导加载程序) 3.Linux 内核启动后,init 进程 是在 Fedor ...

  6. 操作MyBatis引发Error setting null for parameter #X with JdbcType OTHER .无效的列类型

    再用MyBatis操作Oracle的时候,传入null值而引发的错误 异常信息: org.springframework.jdbc.UncategorizedSQLException: Error s ...

  7. Add a Preview to a List View将预览添加到列表视图

    In this lesson, you will learn how to show a preview section in a List View's grid. For this purpose ...

  8. .netcore2.1 ef 使用外键关联查询

    //实体类 [Table("invoiceinfo", Schema = "obs")] public class invoice { [Key] public ...

  9. 当Python遇上AI(一)

    Infi-chu: http://www.cnblogs.com/Infi-chu/ 一.什么是学习 如果要给学习下一个定义,那么根据某百科给出的定义是——学习,是指通过阅读.听讲.思考和实践等途径获 ...

  10. Electron npm install 常见错误(Linux)

    Linux版本 Ubuntu 12.04 (32bit) 安装Git sudo apt-get install git 生成ssh key #查看有没有sshkey cd ~/.ssh #生成 ssh ...