Redis入门(二)-Redis能够做什么
引言
在上篇文章中,我们讲述了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能够做什么的更多相关文章
- redis入门(二)
目录 redis入门(二) 前言 持久化 RDB AOF 持久化文件加载 高可用 哨兵 流程 安装部署 配置技巧 集群 原理 集群搭建 参考文档 redis入门(二) 前言 在redis入门(一)简单 ...
- Redis系列(二):Redis的数据类型及命令操作
原文链接(转载请注明出处):Redis系列(二):Redis的数据类型及命令操作 Redis 中常用命令 Redis 官方的文档是英文版的,当然网上也有大量的中文翻译版,例如:Redis 命令参考.这 ...
- Redis入门实例(Redis+Sprint+maven创建工程)
一.>创建一个maven工程应用和相关配置:Redis_study,创建工程应用过程略 1.>配置pom.xml:文件内容如下 <project xmlns="http:/ ...
- <Redis> 入门二 五种数据类型的操作、通用key的操作、发布订阅
文档参考:http://www.redis.net.cn/ string - > key value 简单的keyvalue,常规计数:例如微博数,粉丝数 set -> key v ...
- Redis 入门之Redis简介
Reids 是一个开源的高性能键值对数据库.它通过多种键值数据类型来适应不同场景下的存储需求,并借助许多高层级的接口使其可以胜任如缓存.队列系统等不同的角色. 1.Reids的诞生 Redis到底是在 ...
- Redis(十二):redis两种持久化方法对比分析
前言 最近在项目中使用到Redis做缓存,方便多个业务进程之间共享数据.由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能,将数 ...
- Redis入门笔记-redis内部数据结构(01)
redis是一个轻量级的Nodsql数据库,使用kev-value的形式存储数据,在redis的世界里,没有整数.浮点数等概念,大多数情况下数据以字符串形式展现,偶尔会出现Long类型数据的场景. 一 ...
- redis教程(二)-----redis事务、记录日志到redis、分布式锁
redis事务 Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证: 批量操作在发送 EXEC 命令前被放入队列缓存. 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余 ...
- Redis系列二 Redis数据库介绍
1.SELECT命令 通过查看配置文件可以知道Redis默认有17个库,从0-16. 默认是在0号库.选择库使用SELECT <dbid>命令.例如选择0号库 SELECT 0 2.DB ...
- redis入门(一)
目录 redis入门(一) 前言 特性 速度快 简单稳定 丰富的功能 历史 历史版本 安装与启动 安装 数据类型与内部编码 数据结构 内部编码 常用API与使用场景 常用命令 字符串 列表 哈希 集合 ...
随机推荐
- 3步轻松搞定Spring Boot缓存
作者:谭朝红 前言 本次内容主要介绍基于Ehcache 3.0来快速实现Spring Boot应用程序的数据缓存功能.在Spring Boot应用程序中,我们可以通过Spring Caching来快速 ...
- Linux sudo用户提权与日志审计
一.格式说明及常用配置选项 格式: 用户或组 主机=授权可以使用哪个用户的权限 可以执行的命令 User_Alias 用户定义别名(别名可以是用户,用户组(用户组前面要加%))例:User_Alias ...
- .net下DllImport的一个小问题
最近搞几个PInvoke几个DLL, 在.net 2.0下木有问题, 跑的很好 如下: [DllImport( "tjo.dll" )] private static extern ...
- 《Java基础知识》Java常量的申明和使用
常量就是从程序开始运行到结束都不变的量.在 Java 程序设计中,使用关键字“final”来声明一个常量,例如下面的程序代码. 这里的 x 是一个常量,但是是在某个方法内的常量,也可以称为成员常量(作 ...
- Android获取ROOT权限的通用方法
背景 自从Android问世以后,给手机获取ROOT权限变成了玩机爱好者老生常谈的话题.拥有手机,却不能拥有操作手机的最高权限,这对于手机爱好者而言,这怎么可以忍?所以无论Android升到什么什么版 ...
- C#总结(七)动态加载C++动态链接库
C#调用C++ 链接库的方式分为静态调用和动态调用这两种方式.静态调用之前的文章里面都有介绍,使用.net 提供的DllImport 导入相关的C++ 库即可.请看之前的文章,https://www. ...
- Winform项目常用配置方法
在我们做项目的时候经常遇到需要动态配置系统的情况,比如说10台电脑装了同一个软件,需要识别唯一码,这时候我们会用到配置方法. 具体方法如下: 1) Config文件 里面增加你需要的变量,具体用法如下 ...
- Python、 Pycharm、Django安装详细教程(图文)
前言 这篇文章主要介绍了Python. Pycharm.Django安装详细教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧. ...
- 在Join中使用FIND_IN_SET
$d['a.cold'] = 2; $d['b.PostId'] = $up_id['PostId']; $d['b.F_Id'] = $up_id['Id']; $d['WorkinTime'] = ...
- Springboot 项目源码 Activiti6 工作流 vue.js html 跨域 前后分离 websocket即时通讯
特别注意: Springboot 工作流 前后分离 + 跨域 版本 (权限控制到菜单和按钮) 后台框架:springboot2.1.2+ activiti6.0.0+ mybaits+maven+接 ...