- Redis宕机怎么解决
- Redis的优缺点
- 为什么要用redis/缓存
Redis宕机怎么解决
如果只有一台redis 肯定会造成数据丢失 无法挽救
多台redis或者集群宕机则需要分为在主从模式下区分来看:
1.slave从redis宕机,配置主从复制的时候才配置从的redis,从的会从主的redis中读取主的redis的操作日志1,在redis中从库重新启动后会自动加入到主从架构中,自动完成同步数据;
2, 如果从数据库实现了持久化,此时千万不要立马重启服务,否则可能会造成数据丢失,正确的操作如下:在slave数据上执行SLAVEOF ON ONE,来断开主从关系并把slave升级为主库,此时重新启动主数据库,执行SLAVEOF,把它设置为从库,连接到主的redis上面做主从复制,自动备份数据。
以上过程很容易配置错误,可以使用redis提供的哨兵机制来简化上面的操作。简单的方法:redis的哨兵(sentinel)的功能
Redis的优缺点
非常大多优势就是支持多种数据类型
优点:
1.读写性能优异
2.支持数据持久化:AOF和RDB两种持久化方式
3.支持事物。redis的所有操作都是原子性的
4.数据结构丰富
5.支持主从复制,主机会自动将数据同步到从机,可以进行读写分离。
缺点:
1.数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,
2.Redis 不具备自动容错和恢复功能
3主机宕机,宕机前有部分数据未能及时同步到从机,切换IP后还会引入数据不一致的问题,降低了系统的可用性。
为什么要用redis / 缓存
主要从高性能 / 高并发来说,缓存分为本地缓存和分布式缓存。redis是分布式缓存,多实力下共用一个缓存
Redis 的应用场景
1.计数器
用于:限流/秒杀
可以对 String 进行自增自减运算,从而实现计数器功能。Redis 这种内存型数据库的读写性能非常高,很适合存储频繁读写的计数量。
2.缓存
将热点数据放到内存中,设置内存的最大使用量以及淘汰策略来保证缓存的命中率。
3.会话缓存
1.可以使用redis来统一存储多台应用服务器多会话信息
4.全页缓存
5.消息队列(发布订阅)
1.List 是一个双向链表,可以通过 lpush 和 rpop 写入和读取消息。不过最好使用 Kafka、RabbitMQ 等消息中间件。
缓存和数据库不一致
1.先写数据库,再删除redis缓存
2.先删缓存,再写数据库
无论如何操作都会导致数据的不一致
如何保证数据一致性的方案
- 方案一:采用延时双删除策略
- 先删除缓存-再写入数据库-休眠N毫秒-再次删除缓存【这个不太懂为啥】
- 设置缓存过期时间
- 方案二:异步更新缓存(基于binlog的同步机制)
- 读redis->写入mysql->binlog异步更新到redis
- redis更新方式
- 全量:全部一次写入
- 增量:实时更新
- 读取binlog后利用消息队列 推送更新到各台的redis缓存数据
- 使用canal 阿里的开源工具
- kafka
- rabbitmq