缓存的世界 Redis(一)
缓存
缓存的速度比数据库的快多了
缓存是我们进阶高手成长的必经的一段路,其实在业务系统中的表现就是快,体验相当 nice,反馈很及时,比如我们每次搜索后,再次搜索的时间会快捷很多,实际上是去查询数据库然后加入缓存的操作实现的, 然后每次需要相同的数据时候,会先去缓存中;也是一个双写的一个过程,写数据库和缓存。
Redis
Redis 是一款高性能的缓存数据库,主要特点是单线程,IO 多路复用,多种数据类型去做不同场景下的存储,redis6.0 是目前比较稳定的版本,支持九种的数据类型,(之前是五种数据类型);
这次我们就以 Redis6.0 的版本为例子,对于 Redis 的配置以及结构为目标,开始学习啦。
Redis 的业务场景
Redis 是一款 NOSQL 数据库,泛指非关系型数据库的应用,其中对于 Redis 的键值对存储,和高性能的读写尤其重要,主要的使用场景与并发高,业务环境单一,(扛起主要功能点),比如电商的节日秒杀,抢优惠券等情况,
本质
同一时间,众多用户抢夺同一资源,必须要有序,符合规律和市场,完成具体的操作。
其实现在有的企业后台的功能点,直接是用 SSR 来做,保证高并发的访问量,而且兼容性很好。
Redis 默认有 16 个库;0-15 号库,默认写入数据库的是 0 号库,当然你也可以具体制定;
我们这一期主要来解决一下,关于 Redis 下载后配置,以及配置文件中参数的解读,
Redis 下载完成之后:
1.配置 redis
现在最稳定的版本是 6.0,然后我们可以将 redis 直接配置一下,
其中比较好的就是对 redis.conf 中部分为生产环境
2.启动 redis :
1.设置默认 Linux,自启动 Redis(跟随系统自启动)
因为 redis 的解压缩之后, redis utils/redis_init_script 的脚本文件
但是对于 Linux 系统,启动的文件都放在 etc/init.d 目录下
所以启动 Linux,在自启动 redis
1.2 启动 redis 的命令
1.3 设置 redis 跟随系统启动而启动:
Redis_6379 的脚本中, /etc/init.d
首行加入以下命令
3.redis 中 cli 命令的使用
Redis clic --基础操作 redis 的命令
Redis 要连接固定 IP 地址和端口的机器:
redis 可以 ping 一下,是否端口正常
直接使用 redis-cli 就是直接进入缓存,可以交互
4.redis 中在职业发展中用法
Redis 的各种数据结构和简单命令,以及 java API 的使用
Reids 对于一些项目的解决方案的使用,例如 pub/sub 消息系统,分布式锁,输入的自动完成等
Redis 在日常管理中的命令
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 的分布式锁的原理,集群化环境下的搭建等,
我是卢卡,今天分享一句话,有些事情可能就是没有答案的,既然寻找答案的结果很迷茫,那就先动手做起来。
明天再见,大家晚安了,好梦。
版权声明: 本文为 InfoQ 作者【卢卡多多】的原创文章。
原文链接:【http://xie.infoq.cn/article/061404eec440aa18385e77673】。文章转载请联系作者。
评论