首页 > 编程知识 正文

redis集群故障恢复,redis集群主节点挂了

时间:2023-05-03 23:31:31 阅读:182405 作者:3830

Redis缓存问题:

1 .缓存直通是指查询一定不存在的数据。 由于缓存是在未命中时被动写入的,因此从容错角度看,如果从存储层中找不到数据,则不会写入缓存。 因此,不存在的数据将在每次请求时查询存储层,从而导致缓存失去意义。 如果流量较大,DB可能会挂起。 如果有人利用不存在的key频繁攻击我们的APP,这是漏洞。 2 .高速缓存雪崩是指,由于我们设置高速缓存时采用了相同的有效期限,在某一时刻高速缓存同时失效,请求全部传送给DB,DB的瞬时压力过重的雪崩。 某些设置了过期日期的key在某些时刻可能会被超高并发访问时,是非常“热点”的数据。 此时,需要考虑缓存被“破坏”的问题。 这与缓存雪崩的区别在于,相对于某个key缓存,前者是更多的key。Redis缓存的限制:

内存限制单点故障

Redis集群: 解决单点故障问题

设置主从主机:主主机不需要添加特殊配置的redis-server redis.conf从主机: slaverslaveof主机的地址连接端口号。 例如,如果slaveof 127.0.0.1 6379主从设备位于同一设备上,则还必须注意端口号冲突。 将端口更改为6380哨兵: sentinelsentinel是哨兵,负责监控主服务器的运行情况。 如果主服务器关闭,从服务器中选择主服务器Port 26379 Sentinelmonitormymaster 127.0.0.16379向主机启动哨兵

spring : redis : lettuce : pool : max-active :10 min-idle :3 max-wait :10000 sentinel 3360 nodes 3360-127 27

1、数据库向主数据库发送sync命令2、主数据库接收到sync命令后,执行BGSAVE命令(保存快照)生成RDB文件,并编写RDB文件中的帧当主数据库执行BGSAVE时,从数据库接收并加载该文件4,同时从数据库发送RDB文件。主数据库向从服务器发送缓冲区中的所有写入命令。5、处理

Redis的瓷砖承担着两个主要目标。

1 .使用许多计算机的总内存以支持更大的数据库。 如果没有分片,则仅限于单功能支持的内存容量2。 可以将计算能力扩展到多核或多服务器。 将网络带宽扩展到多服务器或多网络适配器范围的片的替代方案是散列片。 此模式是哪个密钥散列插槽设置key---- hashcode---16384http://www.Sina.com /

1、RDB:redis数据库,快照。 默认情况下,Redis将数据快照保存到磁盘上的二进制文件中,文件名为dump.rdb。 如果数据集内每n秒有m次以上的更新,则可以配置Redis持久性策略,包括将数据写入磁盘。 或者,也可以手动调用命令SAVE或BGSAVE。

在Springboot中的配置应用

Redis是一个使用fork函数复制当前进程(父进程)副本的子进程,它开始向临时RDB文件写入数据。 子进程完成写入RDB文件后,Redis可以通过用新文件替换旧文件来使用写入时复制技术。 2、AOF:Append Only File。 快照模式不是很可靠,如果系统关闭或Redis意外落入kill,最后写入Redis的数据将会丢失。 对于某些APP应用程序来说,这可能不是一个大问题,但对于要求高可靠性的APP应用程序来说,Redis不是一个理想的选择。 Append-only文件模式是另一种选择。 可以在配置文件中打开AOF模式

Redis提供了三种同步策略:每秒同步、每次更改同步和异步。 事实上,每秒同步也是异步的,而且效率非常高,如果发生停机,在这一秒钟内更改的数据将会丢失。

3、虚拟内存方式。 如果key小而value大,则使用VM会很有效,因为它节省大量内存。 当key不小时,可以考虑使用一些非常方法将大的key设置为大的value,也可以考虑将key/value组合为新的value。

名为vm-max-threads的参数可以设置访问swap文件的线程数。 请不要超过机器的核心数。 如果设置为0,则对swap文件的所有操作都是串行的。 虽然可能会导致相对长的延迟,但数据完整性很好。 用虚拟内存确保性能也很好。 如果数据量很大,请考虑分布式和其他数据库

redis.wind

ows.conf
daemonize no默认情况下redis不是作为守护进程运行的,如果想让它在后台运行,就把它改成yes。当redis作为守护进程运行的时候,它会写一个pid到/var/run/redis.pid文件里面

port 6379监听端口号,默认为6379,如果设为0,redis将不在socket上监听任何客户端连接。 tcp-backlog 511设置TCP监听的最大容纳数量。在高并发的环境下,需要把这个值调高以避免客户端连接缓慢的问题。Linux内核会把这个值缩小成/proc/sys/net/core/somaxconn对应的值,所以要修改这两个值才能达到你的预期。 bind 192.168.1.100 10.0.0.1默认情况下,redis在server上所有有效的网络接口上监听客户端连接。如果只想让它在一个网络接口上监听,那就绑定一个IP或者多个IP。多个IP用空格隔开 timeout 0指定在一个client空闲多少秒之后关闭连接(0就是不管它) loglevel notice定义日志级别。可以是:debug适用于开发或测试阶段、verbose类似debug信息但是内容更少些、notice适用于生产环境、warning仅仅一些重要的消息被记录将redis安装为服务的命令redis-server --service-install redis.windows-service.conf --loglevel verbose启动服务net start Redis

redis持久化机制:
snapshot—RDB
对应的快照文件为dump.rdb

save 900 1在900秒(15分钟)之后,如果至少有1个key发生变化,则dump内存快照save 300 10在300秒(5分钟)之后,如果至少有10个key发生变化,则dump内存快照save 60 1000在60秒(1分钟)之后,如果至少有10000个key发生变化,则dump内存快照分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改。AOFappendfsync always每次有数据修改发生时都会写入AOF文件appendfsync everysec 每秒钟同步一次,该策略为AOF的缺省策略。在性能和持久化方面作了很好的折中appendfsync no从不同步。高效但是数据不会被持久化。持久化机制建议:更新频繁,一致性要求比较高,AOF策略为主更新不频繁,可以容忍少量数据丢失或错误,snapshot策略为主

Redis事务
redis事务是通过MULTI,EXEC,DISCARD和WATCH四个原语实现的。

MULTI命令用于开启一个事务,它总是返回OK。MULTI执行之后,客户端可以继续向服务器发送任意多条命令,这些命令不会立即被执行,而是被放到一个队列中,当EXEC命令被调用时,所有队列中的命令才会被执行。另一方面,通过调用DISCARD,客户端可以清空事务队列,并放弃执行事务。redis事务范围从multi命令开始,到exec或者discard为止,整个操作过程是原子性的,不能打乱顺序,也不能插入操作但是出错之前的操作会正常提交WATCH 命令可以为 Redis 事务提供 check-and-set (CAS)行为。被 WATCH 的键会被监视,并会发觉这些键是否被改动过了。 如果有至少一个被监视的键在 EXEC 执行之前被修改了, 那么整个事务都会被取消, EXEC 返回空多条批量回复(null multi-bulk reply)来表示事务已经失败。

使用Redis实现分布式锁:
申请加锁操作:

1、向Redis中存放固定key的值,如果key不存在则实现存放并获取锁;如果key已经存在则不能获取锁(依靠Redis中的原子操作进行CAS比对,实现锁的互斥)2、获取key所对应的时间,时间是锁预期的实效时间,如果已经实效,则存储新值,并获取锁3、否则获取锁失败解锁:删除指定key的redis列

抢购、秒杀是如今很常见的一个应用场景,主要需要解决的问题有两个:

1、高并发对数据库产生的压力2、竞争状态下如何解决库存的正确减少("超卖"问题)

对于第一个问题,已经很容易想到用缓存来处理抢购,避免直接操作数据库,例如使用Redis。

Redis使用watch完成秒杀抢购功能:
使用redis中两个key完成秒杀抢购功能,mywatchkey用于存储抢购数量和mywatchlist用户存储抢购列表。

优点:1、首先选用内存数据库来抢购速度极快2、速度快并发自然没不是问题3、使用悲观锁,会迅速增加系统资源4、比队列强的多,队列会使内存数据库资源瞬间爆棚5、使用乐观锁,达到综合需求

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。