Redis 简介

1、数据库架构发展

随着互联网+和大数据时代的来临,传统的关系型数据库已经不能满足中大型网站日益增长的访问量和数据量,这个时候就需要一种能够快速存取数据的组件来缓解数据库服务 I/O 的压力 ,来解决系统性能上的瓶颈。

数据库应用的发展历史:

|--------------------------------|-------------------------------------------------|
| 架构 | 描述 |
| 单数据库实例 | 在互联网大数据时代来临前,企业的一些内部信息管理系统,一个单个数据库实例就可以应付系统的需求。 |
| 缓存+数据库实例 | 随着系统访问量用户的增多,数据量的增大 ,单个数据库实例已经满足不了系统读取数据的需求 。 |
| 缓存+主从数据库+读写分离 | 缓存可以缓解数据库的读取压力,但是数据量的写入压力持续增大,可以采取数据库主从进行读写分离 |
| 缓存+主从数据库集群 +读写分离+分库分表 | 数据量再次增大,读写分离以后 ,主数据库的写库压力出现瓶颈。 |
| NoSql 数据库 +主从数据库集群 +读写分离 +分库分表 | 互联网+大数据时代来临,关系型数据库不能很好的存取一些并发性大,实时性高而且格式不固定的数据。 |

2、Redis 介绍

Redis 是当前比较热门的 NOSQL 数据库系统之一,它是一个开源的使用 C 语言编写的键值对(key-value)数据存储系统(区别于 MySQL 的二维表格的形式存储。)

  • 关系型数据库:Oracle/ Mysql/ SqlServer
  • NoSql数据库:Redis / MongoDB/Hbase

Redis 默认端口是 6379

Redis 和 Memcache 类似,但很大程度补偿了 Memcache 的不足,Redis 数据都是缓存在计算机内存中,不同的是,Memcache 只能将数据缓存到内存中,无法自动定期写入硬盘,这就表示,一断电或重启,内存清空,数据丢失。所以 Memcache 的应用场景适用于缓存无需持久化的数据。而 Redis 不同的是它会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,实现数据的持久化。

a. redis 特点

① Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

② Redis 不仅仅支持简单的 key-value 类型的数据,同时还提供字符串(strings)、lists(列表)、sets(集合)和 zsets(有序集合)、散列(hash)等数据结构的存储。

③ Redis 支持数据的备份,即 master-slave 模式的数据备份。

④ 性能极高:Redis 能读的速度是 110000 次/s,写的速度是 81000 次/s 。

⑤ 原子性:Redis 的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过 MULTI 和 EXEC 指令包起来。

⑥ 丰富的特性:Redis 还支持 publish(发布)/subscribe(订阅), 通知, key 过期等特性。

b. reids 持久化方式

由于 Redis 的数据都存放在内存中,如果没有配置持久化,redis 重启后数据就全丢失了,于是需要开启 redis 的持久化功能,将数据保存到磁盘上,当 redis 重启后,可以从磁盘中恢复数据。redis 提供两种方式进行持久化:

  • RDB 持久化:原理是将 Reids 在内存中的数据定时 dump 到磁盘上。性能高,但可能会引起一定程度的数据丢失。
  • AOF(append only file)持久化:原理是将 Reids 的操作日志以追加的方式写入文件,类似 mysql 的 binlog,记录每次更新的日志。
c. redis 应用场景

单点登陆/直播平台里面在线好友列表/抢购、秒杀/商品的排行榜/点赞/数据过期

① 缓存(热点数据的缓存)

热点数据(经常会被查询,但是不经常被修改或者删除的数据),由于 redis 访问速度块、支持的数据类型比较丰富,首选是使用 redis 缓存。

Select 数据库前查询 redis,有的话使用 redis 数据,放弃 select 数据库,没有的话,select 数据库,然后将数据插入 redis。

update 或者 delete 数据前,查询 redis 是否存在该数据,存在的话先删除 redis 中数据,然后再 update 或者 delete 数据库中的数据 。

缓存现在几乎是所有中大型网站都在用的,合理的利用缓存不仅能够提升网站访 问速度,还能大大降低数据库的压力。另外结合 expire,我们可以设置过期时间然后再进行缓存更新操作。所以,现在 Redis 用在缓存的场合非常多。

② 排行榜

很多网站都有排行榜应用的,如京东的月度销量榜单、商品按时间的上新排行榜等。Redis 提供的有序集合数据结构能实现各种复杂的排行榜应用。

③ 计数器

计数器,如电商网站商品的浏览量、视频网站视频的播放数等。为了保证数据实时效,每次浏览都得给+1,并发量高时如果每次都请求数据库操作无疑是种挑战和压力。

Redis 提供的 incr 命令来实现计数器功能,内存操作,性能非常好, 非常适用于这些计数场景。

④ 消息系统

消息队列是大型网站必用中间件,如 ActiveMQ、RabbitMQ、Kafka 等流行的消息队列中间件,主要用于业务解耦、流量削峰及异步处理实时性低的业务。Redis 提供了发布/订阅及阻塞队列功能,能实现一个简单的消息队列系统。另外,这个不能和专业的消息中间件相比。

相关推荐
Hello.Reader26 分钟前
Redis热点数据管理全解析:从MySQL同步到高效缓存的完整解决方案
redis·mysql·缓存
指尖上跳动的旋律1 小时前
shell脚本定义特殊字符导致执行mysql文件错误的问题
数据库·mysql
一勺菠萝丶1 小时前
MongoDB 常用操作指南(Docker 环境下)
数据库·mongodb·docker
麦香--老农2 小时前
windows 钉钉缓存路径不能修改 默认C盘解决方案
缓存·钉钉
m0_748244832 小时前
StarRocks 排查单副本表
大数据·数据库·python
C++忠实粉丝2 小时前
Redis 介绍和安装
数据库·redis·缓存
wmd131643067122 小时前
将微信配置信息存到数据库并进行调用
数据库·微信
丰云3 小时前
一个简单封装的的nodejs缓存对象
缓存·node.js
Oneforlove_twoforjob3 小时前
【Java基础面试题025】什么是Java的Integer缓存池?
java·开发语言·缓存
泰伦闲鱼3 小时前
nestjs:GET REQUEST 缓存问题
服务器·前端·缓存·node.js·nestjs