写点什么

缓存的世界 Redis(一)

用户头像
卢卡多多
关注
发布于: 2021 年 06 月 15 日
缓存的世界Redis(一)

缓存

缓存的速度比数据库的快多了


缓存是我们进阶高手成长的必经的一段路,其实在业务系统中的表现就是快,体验相当 nice,反馈很及时,比如我们每次搜索后,再次搜索的时间会快捷很多,实际上是去查询数据库然后加入缓存的操作实现的, 然后每次需要相同的数据时候,会先去缓存中;也是一个双写的一个过程,写数据库和缓存。

Redis

Redis 是一款高性能的缓存数据库,主要特点是单线程,IO 多路复用,多种数据类型去做不同场景下的存储,redis6.0 是目前比较稳定的版本,支持九种的数据类型,(之前是五种数据类型);

redis的官方网站:

这次我们就以 Redis6.0 的版本为例子,对于 Redis 的配置以及结构为目标,开始学习啦。

Redis 的业务场景

Redis 是一款 NOSQL 数据库,泛指非关系型数据库的应用,其中对于 Redis 的键值对存储,和高性能的读写尤其重要,主要的使用场景与并发高,业务环境单一,(扛起主要功能点),比如电商的节日秒杀,抢优惠券等情况,

本质

同一时间,众多用户抢夺同一资源,必须要有序,符合规律和市场,完成具体的操作。

其实现在有的企业后台的功能点,直接是用 SSR 来做,保证高并发的访问量,而且兼容性很好。

Redis 默认有 16 个库;0-15 号库,默认写入数据库的是 0 号库,当然你也可以具体制定;

我们这一期主要来解决一下,关于 Redis 下载后配置,以及配置文件中参数的解读,

Redis 下载完成之后:

1.配置 redis

现在最稳定的版本是 6.0,然后我们可以将 redis 直接配置一下,

其中比较好的就是对 redis.conf 中部分为生产环境

-  Demonize    no----> yes    为后台守护进程-  Pidfile     /var/run/redis_6379.pid    设置redis的pid文件位置-  port        6379                设置redis的监听端口号-  dir      /var/redis/6379  设置持久化文件的存储位置
复制代码

2.启动 redis :

1.设置默认 Linux,自启动 Redis(跟随系统自启动)

因为 redis 的解压缩之后, redis utils/redis_init_script 的脚本文件

但是对于 Linux 系统,启动的文件都放在 etc/init.d 目录下

所以启动 Linux,在自启动 redis

1.2 启动 redis 的命令

cd /etc/init.d,        进入Linux  chmod 777 redis_6379  ./redis_6379 start      启动redis server  //判断redis是否启动成功 ps -ef |grep redis
复制代码

1.3 设置 redis 跟随系统启动而启动:

Redis_6379 的脚本中, /etc/init.d

首行加入以下命令

 #chkconfig:    #description   Redis is a persistent  key-value database    chkconfig  redis_6379  on
复制代码

3.redis 中 cli 命令的使用

Redis clic --基础操作 redis 的命令

cd redis-6.0/
redis-cli SHUTDOWN    关闭redis的进程
复制代码

Redis 要连接固定 IP 地址和端口的机器:

redis-cli -h  127.0.0.1 -p 6379
复制代码

redis 可以 ping 一下,是否端口正常

redis-cli  ping返回pong

复制代码

直接使用 redis-cli 就是直接进入缓存,可以交互

redis-cli
//可以set key value
复制代码

4.redis 中在职业发展中用法

  1. Redis 的各种数据结构和简单命令,以及 java API 的使用

  2. Reids 对于一些项目的解决方案的使用,例如 pub/sub 消息系统,分布式锁,输入的自动完成等

  3. Redis 在日常管理中的命令

  4. Redis 在企业集群部署下的架构(高并发和高可用)--最常用的分布式的缓存系统


面试侧重的点:

  • Redis 的持久化

  • 主从架构

  • 复制原理

  • 淘汰策略

  • 缓存的穿透,雪崩,

  • 数据分布式存储原理

  • 哨兵原理

5.redis 持久化(🀄️)

5.1 redis 的为什么会有持久化

Redis 持久化在企业级的意义---->故障恢复

很多系统中出现 redis,用于独当并发数据请求,但是数据丢失,以及数据错误,以及断电等等,redis 内部是怎么做容灾的;

Redis 如果发生宕机, 要恢复数据怎么来解决?(机房停电,支付宝,工人维修电缆被挖断,然后宕机,大中型的 case)

国内的阿里云的 0dps, redis 的数据--从内存写入磁盘中, 磁盘中的数据直接放入阿里云 ODPS,

如果说 Redis 宕机, 就可以云服务找到,下载磁盘-加载到内存

5.2redis 的持久化方式

(1)AOF:Append Only File (写操作热备份导出文件)

对于 AOF,默认是不开启的,开启之后会记录下,存放每次的写操作,放入一个磁盘具体的文件中

Redis 需要重启的时候,大多数需要 AOF 来重新构建数据,因为 AOF 数据更为完整

每次持久化操作,AOF 会将内存数据写入一个文件中,(内存文件-->os cache ,操作系统的缓存, 利用每秒的 fsync,可以得出具体数据,写入磁盘)

但是随之这个 AOF 文件的增加到一个阈值, 会采用 LRU,淘汰策略,删除数据,

存放的是指令日志,做数据恢复的时候,其实是要回放和执行所有的指令日志,来恢复所有的所有,

当内存中的 AOF 文件一直增加,reweite 操作,就会机遇当时的 Redis 内存中的数据,来重新创建一个更小的 AOF 的文件, 然后将旧的数据删除了

优点:​ (1)没有磁盘寻址的耗损,每秒进行 fsync,可以保证数据最大的完整性,

​ (2)利用 append-only 模式写入数据,文件不易破损

​ (3)rewrite 的操作,可以拷贝,然后重新清理之后形成数据

(2)RDB:定时生成全量-快照(冷备份)

redis 会将当前内存中的数据,快照一份,比如 5 分钟,10 分钟,每个文件代表某一个时刻的完成数据快照

RDB 可以手动触发,也可以自动触发,

save() 和 bgsave()

冷备份, fork 一个子进程,开始快照,

恢复比较快

优点:(1)当前一段时间的,快照信息,可生成多个文件,

​ (2)Redis 控制固定时常,生成固定的快照文件

​ (3)每次写操作都是 Redis 内存的,速度比较快,

​ (4)RDB 内部是回放和执行日志指令,加载冷备份数据很便利

缺点:

(1)RDB 容易丢失时间节点的数据,要是随之进程挂掉;

(2)不建议做第一优先的恢复方案,

他会 FORK 一个子进程来执行 RDB 的快照文件,Redis 会有数据延迟,所亿

(3)避免 RDB 生成的文件太大

redis 持久化方式的总结:

关于 Redis 的持久化数据,本质就会说用于数据容灾备份的,保证数据不丢失的情况下,优先使用 AOF 来构建数据,根据 fsync 只能是保证数据存储的中丢失少于一秒钟,(因为 fsync 就是每次就是一秒钟),然后第二使用 RDB 做冷备份恢复具体的数据,这样一来就可以直接生成;

卢卡寄语

本期的分享就到这里了, 主要是关于 Redis 的启动,命令,具体业务场景分析,以及比较重要的 Redis 持久化的分享,后期还会接着更新关于 Redis 的分布式锁的原理,集群化环境下的搭建等,

我是卢卡,今天分享一句话,有些事情可能就是没有答案的,既然寻找答案的结果很迷茫,那就先动手做起来。

明天再见,大家晚安了,好梦。

发布于: 2021 年 06 月 15 日阅读数: 13
用户头像

卢卡多多

关注

还未添加个人签名 2020.04.12 加入

还未添加个人简介

评论

发布
暂无评论
缓存的世界Redis(一)