redis学习

1、为什么要使用redis

  执行比较耗时,并且不会频繁变动的操作,可以将其放入缓存;比如菜单、配置信息;还有就是在查询大量数据的时候,可以使用redis做缓存处理,并不是直接去操作数据库

2、redis目前存在的问题

  缓存和数据库双写一直性问题、缓存雪崩问题、缓存击穿问题、缓存的并发竞争问题

3、常用数据类型

  String、hash、liet、set、sorted set

4、RDB和AOF持久化

4.1、RDB持久化

将所有数据库数据以二进制的形式保存到硬盘中。

有3种最常见的方式创建RDB文件:SAVE、BGSAVE后台执行、使用save配置选项设置(时间计数器和次数计数器)的自动保存条件被满足,服务自动执行BGSAVE

缺点:比较耗资源和时间,创建RDB文件过于频繁会影响服务器的性能

4.2、AOF持久化

每当有修改的数据库的命令被执行时,服务器就会将执行的命令写到AOF文件的末尾

安全性问题:虽然服务器执行一个修改数据库的命令,就会将执行的命令写到AOF文件中,但这并不意味AOF文件持久化不会丢失任何数据。因为在执行write函数,会将一些内容写入到某个文件中,为了提高效率系统通常会将内容放入到一个内存缓冲区buffer中,等到缓冲区被填满,或者用户执行fsync调用和fdatasync调用时才将缓冲区中内容真正写入到硬盘。所以,这取决于命令被写入到硬盘的时间。

解决:提供了appendfsync选项always(每写一次,调用一次fdatasync,速度慢)、everysec(默认值,每秒,速度快)、no(不主动调用,速度快)

AOF中的冗余命令,提供了重写功能:BGREWRITEAOF,配置方式:auto -aof -rewrite -percentage 100,auto-aof-rewrite-min-size 64mb

4.3两种方式对比,实际中两种持久化是可以同时使用的

5、Redis集群——主从模式_哨兵模式

5.1、主从复制Replication

  一个Master可以有多个Slaves,Master可以将自己的数据同步给Slaves,只有Master可以进行写操作,而Slaves只能进行读操作。客户端可以连接Slaves读来减轻Maeter的压力。

  配置当前服务为Slaves:redis -server --port 6380 --slaveof 127.0.0.1 6379

  将当前的Master改为Slaves:slaveof 127.0.0.1 6379

  将Slaves回复为Master:slaveof no one

  主从复制存在问题:一个Master可以有多个Slaves,slave下线,只是读请求的处理性能会降低,而Master下线,写请求则无法执行。这样我们需要手动的去修改,让其中的一台Slave使用slaveof no one 命令成为Master,其它的Slave执行slaveof命令指向新的Master,从新的Master同步数据。其实也可以自动实现,就需要我们使用Sentinel哨兵,实现故障转移failover操作。

5.2、高可用哨兵Sentinel

  Redis Sentinel是一个分布式系统,可以在一个架构中运行多个Sentinel进程。

  启动Sentinel:将src目录下产生的redis-sentinel程序文件复制到$REDIS HOME/bin,启动一个运行在Sentinel模式下的Redis服务实例

       redis -sentinel、 redis server /path/to/sentinel.conf --sentinel

  监控 Monitoring:Sentinel会不断的检查Master和Slaves是否正常,每一个Sentine可以监控多个Master和该Master下的Slaves

  Sentinel网络:监控同一个Master的Sentinel会自动连接,组成一个分布式的Sentinel网络,互相通信并交换彼此关于被监视服务器的信息

  服务器下线:当一个Sentinel认为被监控的服务器已经下线时,它会向网络其它的Sentinel进行确认,判断该服务器是否真的下线。如果下线的服务器是主服务器,那么Sentinel网络将对下线主服务器进行自动故障转移,通过将下线主服务器的某个从服务器提升为新的主服务器,并将其从服务器转为新的主服务器,以此来让系统重新回到上线的状态。

  Sentinel配置文件:至少包含一个监控配置选项,用于指定被监控Master的相关信息。 sentinel monitor mymaster 127.0.0.1 6379 2 监视mymaster的主服务器,服务器ip和端口,将这个主服务器判断为下线失效至少需要2个Sentinel同意,如果多数Sentinel同意才会执行故障转移,Sentinel会根据Master的配置自动发现Master的Slaves。Sentinel默认端口号为26379

5.3、总结

  主从+哨兵虽然解决了读性能和高可用的问题,但是没有解决写性能的问题

转载于:https://www.cnblogs.com/manu24/p/10584207.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值