Loading...
墨滴

故事与你

2021/06/09  阅读:44  主题:科技蓝

缓存行业的扛把子-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/09  阅读:44  主题:科技蓝

作者介绍

故事与你