java随笔

139 阅读2分钟

随笔集

redis 实现高并发主要依靠主从架构,一主多从,一般来说,很多项目其实就足够了,单主用来写入数据,
单机几万 QPS,多从用来查询数据,多个从实例可以提供每秒 10w 的 QPS。
如果想要在实现高并发的同时,容纳大量的数据,那么就需要 redis 集群,使用 redis 集群之后,可以
提供每秒几十万的读写并发。
redis 高可用,如果是做主从架构部署,那么加上哨兵就可以了,就可以实现,任何一个实例宕机,可以进
行主备切换。

rdb和aof
rdb是一个比较紧凑的文件,保存了redis在某一时间点的数据,所以很适合用作数据备份,可以最大化redis性能
保存rdb文件的时候会fock一个子进程来完成保存操作,父进程不会进行磁盘io操作。但是会导致数据丢失,默认是5min
同步一次文件

aof可以最大限度的防止数据丢失可以设置1s同步一次交给后台线程去完成,对应的aof文件是一个进行追加的日志文件
所以文件一般都比较大,redis可以在文件过大时对其进行重写,AOF 文件有序地保存了对数据库执行的所有写入操作


缓存雪崩的事前事中事后的解决方案如下。 - 事前:redis 高可用,主从+哨兵,redis cluster,避免
全盘崩溃。 - 事中:本地 ehcache 缓存 + hystrix 限流&降级,避免 MySQL 被打死。 - 事后:redis
持久化,一旦重启,自动从磁盘上加载数据,快速恢复缓存数据。

最经典的缓存+数据库读写的模式,就是 Cache Aside Pattern。 - 读的时候,先读缓存,缓存没有的话,
就读数据库,然后取出数据后放入缓存,同时返回响应。 - 更新的时候,先更新数据库,然后再删除缓存