大佬教程收集整理的这篇文章主要介绍了Redis进阶知识一览,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
什么是RDB RDB∶每隔一段时间,把内存中的数据写入磁盘的临时文件,作为快照,恢复的时候把快照文件读进内存。如果宕机重启,那么内存里的数据肯定会没有的,那么再次启动redis后,则会恢复。
备份与恢复 内存备份-->磁盘临时文件 临时文件-->恢复到内存
RDB优劣势
RDB的配置
save 900 1 # 如果1个缓存更新,则15分钟后备份
save 300 10 # 如果10个缓存更新,则5分钟后备份
save 60 10000 # 如果10000个缓存更新,则1分钟后备份
总结 RDB适合大量数据的恢复,但是数据的完整性和一致性可能会不足
RDB会丢失最后一次备份的rdb文件,但是其实也无所谓,其实也可以忽略不计,毕竟是缓存,丢了就丢了,但是如果追求数据的完整性,那就的考虑使用AOF了。 AOF特点
优势
劣势
AOF的配置
# AOF 默认关闭,yes可以开启
appendonly no
# A0F 的文件名
appendfilename "appendonly.aof"
# no∶不同步
# everySec∶每秒备份,推荐使用
# always∶每次操作都会备份,安全并且数据完整,但是慢性能差
appendfsync everysec
# 重写的时候是否要同步,no可以保证数据安全
no-appendfsync-on-rewrite no
# 重写机制∶避免文件越来越大,自动优化压缩指令,会fork一个新的进程去完成重写动作,新进程里的内存数据会被重写,此时旧的aof文件不会被读取使用,类似rdb
# 当前A0F文件的大小是上次AOF大小的100% 并且文件体积达到64m,满足两者则触发重写
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
到底采用RDB还是AOF呢?
计算机内存有限,越大越贵,redis的高并发高性能都是基于内存的,用硬盘的话GG。
已过期的key如何处理? 设置了expire的key缓存过期了,但是服务器的内存还是会被占用,这是因为redis所基于的两种删除策略。 redis有两种策略∶
所以,虽然key过期了,但是只要没有被redis清理,那么其实内存还是会被占用着的。
那么如果内存被redis缓存占用满了咋办? 内存占满了,可以使用硬盘,来保存,但是没意义,因为硬盘没有内存快,会影响redis性能。所以,当内存占用满了以后,redis提供了一套缓存淘汰机制∶ ME MORY MANAGEMENT。 @H_27_46@maxmemory ∶当内存已使用率到达,则开始清理缓存
* noeviction∶旧缓存永不过期,新缓存设置不了,返回错误
* allkeys-lru∶清除最少用的旧缓存,然后保存新的缓存(推荐使用)
* allkeys-random∶在所有的缓存中随机删除(不推荐)
* volatie-lru∶在那些设置了expire过期时间的缓存中,清除最少用的旧缓存,然后保存新的缓存
* volatile-random∶在那些设置了expire过期时间的缓存中,随机删除缓存
* volatile-ttl∶在那些设置了expire过期时间的缓存中,删除即将过期的
配置哨兵监控master 创建并且配置senTinel.conf∶
port 26379
pidfile "/usr/local/redis/senTinel/redis-senTinel.pid"
dir "/usr/local/redis/senTinel"
daemonize yes
protected-mode no
logfile "/usr/local/redis/senTinel/redis-senTinel.1og"
# 配置哨兵
senTinel monitor mymaster 127.0.0.1 6379 2
#密码
senTinel auth-pass <master-name> <password>
# master被senTinel认定为失效的间隔时间
senTinel down-after-milliseconds mymaster 30000
# 剩余的slaves重新和新的master做同步的并行个数
senTinel parallel-syncs mymaster 1
# 主备切换的超时时间,哨兵要去做@R_690_10772@,这个时候哨兵也是一个进程,如果他没有去执行,超过这个时间后,会由其他的哨兵来处理
senTinel failover-timeout mymaster 180000
启动哨兵x3
redis-senTinel senTinel.conf
测试
结论:master挂了以后,由于哨兵监控,剩余slave会进行选举,选举后其中一个成为master,当原来的master恢复后,他会成为slave。
一般master数据无法同步给slave的方案检查为如下∶
查看相关信息
# 查看reminis-master下的master节点信息
senTinel master reminis-master
# 查看reminis-master下的slaves节点信息
senTinel slaves reminis-master
# 查看reminis-master下的哨兵节点信息
senTinel senTinels reminis-master
配置如下:
spring:
redis:
database: 1
password: reminis
senTinel:
master: reminis-master
nodes: 192.168.32.10:26379,192.168.32.12:26379,192.168.32.13:26379
前面我们一起学习了主从复制以及哨兵,他们可以提高读的并发,但是单个master容量有限,数据达到一定程度会有瓶颈,这个时候可以通过水平扩展为多master-slave成为集群。那么这一节开始我们就一起来学习redis-cluster∶他可以支撑多个master-slave,支持海量数据,实现高可用与高并发。
哨兵模式其实也是一种集群,他能够提高读请求的并发,但是容错方面可能会有一些问题,比如master同步数据给slave的时候,这其实是异步复制吧,这个时候master挂了,那么slave上的数据就没有master新,数据同步需要时间的,1-2秒的数据会丢失。master恢复并转换成slave后,新数据则丢失。
特点:
构建redis集群,需要至少3个节点作为master,以此组成一个高可用的集群,此外每个master都需要配备一个slave,所以整个集群需要6个节点,这也是最经典的redis集群,也可以称之为三主三从,容错性更佳。所以在搭建的时候需要有6台虚拟机。请各自准备6台虚拟机,可以通过克隆去构建,使用单实例的redis 去克隆即可。
redis.conf 配置
# 开启集群模式
cluster-enabled yes
# 每一个节点需要有一个配置文件,需要6份。每个节点处于集群的角色都需要告知其他所有节点,彼此知道,这个文件用于存储集群模式下的集群状态等信息,这个文件是由redis自己维护,我们不用管。如果你要重新创建集群,那么把这个文件删了就行
cluster-config-file nodes-201.conf
# 超时时间,超时则认为master宕机,随后主备切换
cluster-node-timeout 5000
# 开启AOF
appendonly yes
启动6个redis实例
创建集群
####
# 注意1∶如果你使用的是redis3.x版本,需要使用redis-trib.rb来构建集群,最新版使用C语言来构建了,这个要注意
# 注意2∶以下为新版的redis构建方式
####
# 创建集群,主节点和从节点比例为1,1-3为主,4-6为从,1和4.2和5 3和6分别对应为主从关系,这也是最经典用的最多的集群模式
redis-cli --cluster create ip1:port1 ip2:port2 ip3:port 3 ip4:port4 ip5:port5 iP6:port6 --cluster-replicas 1
slots槽,用于装数据,主节点有,从节点没有
检查集群信息:redis-cli--cluster check 192.168.25.64:6380
最后,让我们来看一下下方的思维导图进行梳理内容:
复习
以上是大佬教程为你收集整理的Redis进阶知识一览全部内容,希望文章能够帮你解决Redis进阶知识一览所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。