1 哨兵搭建的注意事项
1.1 配置文件还原
1.1.1 哨兵的配置文件介绍
说明:
哨兵启动时需要依赖2个配置文件
redis.conf
sentinel.conf
1.搭建redis时redis必须实现主从结构 并且在配置文件中已经写入.
2.如果主从搭建出现问题.需要重新拷贝新的配置文件 再次配置
3.哨兵配置文件出错
1.先配置单台的哨兵
2.先拷贝单台哨兵的配置文件.
3.根据自己的需要将配置文件修改哨兵的个数/序列号
4.重启哨兵 6379 6380 6381
2 Redis中的持久化
2.1 RDB模式
说明:RDB模式是redis中默认的持久化方式.redis中默认每15分钟持久化一次.将redis中内存的信息写入到.rdb结尾的文件中.当redis节点出现宕机/断电.当redis再次启动时先读取rdb持久化文件,恢复内存数据.
2.1.1 redis的单位
2.1.2 redis中默认的持久化策略
说明:save 规定的时间 更新的次数(set)
save 900 1 如果redis在15分钟内只执行一次set操作.则进行数据持久化.
save 300 10 如果redis在5分钟内执行了10次set操作,则进行持久化
save 60 10000 …
总结:根据save的语法,可以根据自身的需要调整redis的默认的持久化策略.
2.1.3 save 和 bgsave
说明:如果想通过自己手动的持久化文件,需要执行save或bgsave达到持久化的目的.
用法:
如果使用save命令持久化,则首先会重新开启一个线程,主动执行持久化操作.这时所有的redis操作都会阻塞.直到持久化操作完成.
如果使用bgsave命令.则不会造成阻塞的现象.会新开启一个线程.该线程的工作有点类似于gc.不能保证持久化操作立即执行.
2.1.4 持久化文件的名称和路径
1.持久化文件的名称
2.路径可以手动的指定
3.问题:由于redis关机,当再次启动时发现全部的redis信息都相同?老师为什么??????
说明:由于分片的操作.3台redis的持久化文件名称和路径都是相同的.当redis启动时会读取持久化文件恢复数据,.所有导致3台redis的数据是系统的!!!
总结:不同的redis.持久化文件名称必须不同
2.1.5 RDB持久化的总结
- redis中默认的持久化策略
- redis中可以手动的进行持久化 sava bgsave
- 手动的修改redis的持久化策略 save 时间 set次数
- redis的持久化文件名称必须不同
- RDB文件在固定的时间间隔持久化数据,不能保证实时持久化
2.2 AOF持久化
2.2.1 AOF介绍
说明:AOF策略能够满足实时持久化的要求,但是消耗的性能较高(rdb).AOF持久化策略模式是关闭的.如果需要开启只需要将appendonly yes.当开启了AOF持久化策略后,RBD模式将不起作用.并且生成持久化文件appendonly.aof
AOF的执行的原理:
当redis出现宕机或者断电的现象,这时当redis重新启动时.这时会首先检查AOF文件.进行数据的恢复.
2.2.2 AOF文件默认的持久化策略
always: 实时备份.这时的性能会很低
everysec: 每秒进行一次数据持久化.效率略低于rdb
no: 将具体备份的时间交给操作系统决定.
2.2.3 AOF的总结
- 能够实现实时备份
- 对于数据完整性要求较高时使用AOF备份
- AOF的效率略低于RDB
- 根据不用的公司需要选择不同的持久化方式
2.3 Redis中的内存策略
2.3.1 Redis是如何维护内存
说明:redis中可以手动的设置最大的内存,可以用10mb/10gb这样的单位进行设定.如果将内存设定为10M.随着时间的推移,内存空间会面临存满的现象.redis会根据自身的内存策略进行维护
2.3.2 内存策略
# volatile-lru -> 从已经设置过期时间的数据中,选择最近最少使用的数据进行删除
# allkeys-lru -> 从全部数据中挑选出最近最少使用的数据进行删除
# volatile-random -> 从已经设定的过期时间的数据中,进行随机淘汰
# allkeys-random -> 从全部数据中进行随机淘汰
# volatile-ttl -> 从设置了过期时间的数据集中,选择马上就要过期的数据进行释放操作
# noeviction -> redis的默认策略.不会删除数据,会直接返回错误信息.在做写操作时
说明:可以修改默认内存策略.建议使用lur算法和TTL算法
如果采用lur算法则使用allkeys-lru
说明:如果引用算法将内存的数据进行删除时,lru
maxmemory-samples 1-10 10的删除的可靠性更好,但是性能是最低的
3的速度是最快的,但是效果不是特别的理想.
默认为5
2.4 搭建redis集群
2.4.1 哨兵的缺点
1.哨兵宕机后将直接影响整个服务
2.搭建redis服务器,一个服务对应三个哨兵,那么会导致哨兵的数量比服务器都多,维护不易.
2.4.2 哨兵的优点
说明:
哨兵可以实现redis的高可用.分片技术可以将内存数据交给多台机器维护.性能上更好.
矛盾点:
哨兵缺少了分片的内存分散.
分片缺少了哨兵的高可用
2.5 Redis集群
2.5.1 集群的优点
说明:
- 集群可以实现内部的高可用
- 集群通过多台的主机共同为内存空间
- 集群部署时无需手动挂载主从.程序自动维护.
- 教学中配置3主2从一共9台机器
2.6 Redis集群的搭建
2.6.1 创建7000-7008文件夹
说明:配置前将全部的redis服务关闭,之后重新拷贝新的配置文件重新配置
mkdir cluster
[root@localhost redis-3.2.8]# cp redis.conf cluster/
redis-7000.conf
创建多个文件夹保存redis信息.将配置文件移动到7000文件夹下
2.6.2 编辑配置文件
- 将绑定IP注释
- 关闭保护模式
- 修改端口号
- 开启后台启动
- 修改PID路径
- 修改持久化文件的名称
- 修改持久化文件的目录
- 修改内存策略
- 开启集群
- 修改集群节点信息
2.6.3 复制配置文件到指定文件夹下
2.6.4 修改文件标号
:%s/7000/7001/g
7000表示原有文件名
7001新文件名称
之后保存退出:wq
分别修改7001-7008的配置文件
2.6.5 批量启动
关闭防火墙
service iptables stop
2.6.6 集群的部署
说明:集群启动时需要依赖工具插件 ruby
启动命令:
./src/redis-trib.rb create --replicas 2 192.168.220.132:7000 192.168.220.132:7001 192.168.220.132:7002 192.168.220.132:7003 192.168.220.132:7004 192.168.220.132:7005 192.168.220.132:7006 192.168.220.132:7007 192.168.220.132:7008
输入yes
说明:
如果出现上述的信息恭喜你集群搭建成功!!!
2.7 Redis集群Spring管理
2.7.1 修改redis.properties文件
2.7.2 编辑Spring配置文件
<!-- jedis 配置--> <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig" > <!--最大空闲数--> <property name="maxIdle" value="${redis.maxIdle}" /> <!--最大建立连接等待时间--> <property name="maxWaitMillis" value="${redis.maxWait}" /> <!--是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个--> <property name="testOnBorrow" value="${redis.testOnBorrow}" /> <property name="maxTotal" value="${redis.maxTotal}" /> <property name="minIdle" value="${redis.minIdle}" /> </bean> <bean id="jedisCluster" class="com.jt.common.util.RedisCluster" > <property name="addressConfig"> <value>classpath:/properties/redis.properties</value> </property> <property name="addressKeyPrefix" value="redis.cluster" /> <!-- 属性文件里 key的前缀 --> <property name="timeout" value="${redis.timeout}" /> <property name="maxRedirections" value="6" /> <property name="genericObjectPoolConfig" ref="poolConfig" /> </bean>
2.7.3 编辑工具类方法
说明:工具类实现工厂接口和InitializingBean
2.先创建对象
- 通过工厂创建对象
2.7.4 业务层调用
2.7.5 修改哨兵依赖配置