1.和Map类型对比:redis支持分布式缓存,具有一致性。
2.使用单线程就很快了,没有必要使用多线程,增加线程之间切换到消耗。多核服务器可以启动多个服务实例。
3.使用I/O复用模型:多路是指多个网络连接,复用是指杜勇同一个线程,让单个线程高效的处理多个连接请求(尽量减少网络IO 的时间消耗)。
4.持久化:一种方式是快照(snapshotting,RDB),另一种方式是只追加文件(append-only file,AOF)。
RDA配置参数:
save 900 1 #在900秒(15分钟)之后,如果至少有1个key发生变化,Redis就会自动触发BGSAVE命令创建快照。
save 300 10 #在300秒(5分钟)之后,如果至少有10个key发生变化,Redis就会自动触发BGSAVE命令创建快照。
AOF(append-only file)持久化:
appendonly yes:开启持久化
//设置模式
appendfsync always #每次有数据修改发生时都会写入AOF文件,这样会严重降低Redis的速度
appendfsync everysec #每秒钟同步一次,显示地将多个写命令同步到硬盘
appendfsync no #让操作系统决定何时进行同步
5.缓存雪崩:缓存同一时间大面积的失效,所以,后面的请求都会落到数据库上,造成数据库短时间内承受大量请求而崩掉。
解决办法:
尽量保证整个redis集群的高可用性。
hystrix限流&降级,避免MySQL崩掉。
6.缓存穿透:黑客故意去请求缓存中不存在的数据,导致所有的请求都落到数据库上
解决办法:
布隆过滤器,可能存在的数据哈希到一个足够大的Map中,拦截掉不存在的数据。
查询结果为空,并进行缓存。
7.分布式锁
优先使用zk作为分布式锁。
8.主从高可用配置:
方案为1主2从,配置3个哨兵(哨兵就是在server目录下创建sentienl.cnf)
主服务配置(redis.windows.conf)
port 6000
bind 192.168.1.223
requirepass 123456
从1服务配置(redis.windows.conf)
port 6001
bind 192.168.1.223
slaveof 192.168.1.223 6000
masterauth 123456
requirepass 123456
哨兵配置:
哨兵1配置(sentinel.conf)
port 60000
bind 192.168.1.223
sentinel monitor mymaster 192.168.1.223 6000 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 15000
sentinel auth-pass mymaster 123456
protected-mode yes
哨兵2配置(sentinel.conf)
port 60001
bind 192.168.1.223
sentinel monitor mymaster 192.168.1.223 6000 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 15000
sentinel auth-pass mymaster 123456
protected-mode yes
哨兵3配置(sentinel.conf)
port 60002
bind 192.168.1.223
sentinel monitor mymaster 192.168.1.223 6000 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 15000
sentinel auth-pass mymaster 123456
protected-mode yes
启动服务:redis-server.exe redis.windows.conf
启动哨兵:redis-server.exe sentinel.conf --sentinel