1.数据类型及应用场景
类型 | 应用场景 |
String | 查看某个ip被查看的次数 |
list | 实现最新的消息排行 |
Hash | 存储用户信息 |
Set | 添加好友,每个好友只能添加一次 |
Zset | 商品信息的综合排名 |
2.持久化机制
RDB | AOF |
是将数据先存储在内存,然后当数据累计达到某些设定的伐值的时候,就会触发一次DUMP操作,将变化的数据一次性写入数据文件(RDB文件) | 以日志的形式记录服务器所处理的每一个写操作, 在 Redis 服务器启动之初会读取该文件来重新构建数据库, 以保证启动后数据库中的数据是完整的 |
效率高,不安全 | 效率低,安全性高 |
3.穿透, 击穿,雪崩
穿透 | 缓存与数据库都没有的数据,发起大量访问请求,对后端造成很大的压力 | 1对查询结果为空的情况也进行缓存 2将数据库中所有的查询条件,放到布隆过滤器中。当一个查询请求来临的时候,先经过布隆过滤器进行检查,如果请求存在这个条件中,那么继续执行,如果不在,直接丢弃 |
击穿 | 缓存在某个时间点过期的时候,恰好在这个时间点对这个Key有大量的并发请求过来,这些请求发现缓存过期一般都会从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端DB压垮 | 1.互斥锁 2.不设置过期时间 |
雪崩 | 设置缓存时采用了相同的过期时间,导致缓存在某一时刻同时失效,请求全部转发到DB,DB瞬时压力过重雪崩 | 1.在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量 2.做二级缓存 3.不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀 |
4.保证redis与mysql数据库数据一致
1.直接清理Redis缓存。让redis去查询mysql,然后新增redis数据。
2.每次进行增删改操作的时候数据库会记录binlog日志文件。
B.做一个监听监听binlog日志的变化投放到mq中,做异步处理到消费到redis中