缓存

缓存是我们进阶高手成长的必经的一段路,其实在业务系统中的表现就是快,体验相当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中在职业发展中用法
-
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的分布式锁的原理,集群化环境下的搭建等,
我是卢卡,今天分享一句话,有些事情可能就是没有答案的,既然寻找答案的结果很迷茫,那就先动手做起来。
明天再见,大家晚安了,好梦。
原文始发于微信公众号(卢卡多多):带你悄悄走进缓存redis的世界(一)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/23488.html