redis
- 三种集群模式
- 主从:读写能力有限,灾难需要手动切换主节点
- 哨兵模式:在主从基础上增加了 对节点的监控服务,达到灾难时自动切换
- 集群模式:CRC16(key) % 16384 来计算键 key 属于哪个槽,可以动态扩容,节点都具备读写能力提高并发能 力
- 缓存穿透:查询不存在的key - 通过 保存空值或布隆过滤器处理
- 缓存击穿: 热点key 失效,导致同一时间大量请求到达数据库造成压力,通过设置key永不过期或者 使用分布式锁控制同一时间只有一个线程加载缓存,其他的等待
- 缓存雪崩:大量的key失效,导致数据库压力激增最后宕机,通过打散key的过期时间避免大量key集中失效,redis部署集群模式提高高可用性
- 分部署锁:需要保证原子性,建议直接使用redis 高级客户端的api 例如 redission的setIfAbsent
elasticsearch
-
查询: Match Query(匹配查询):根据字段中的内容进行全文匹配查询。可以使用
match或multi_match等查询类型。 Term Query(精确查询):适用于字段中的精确值查询,适用于keyword类型或已经执行过分词器的字段。 Range Query(范围查询):根据字段中的范围值进行查询,适用于数字或日期范围,如大于、小于、范围内等。 Bool Query(布尔查询):通过逻辑运算符(must、must_not、should)组合多个查询条件,实现更复杂的查询逻辑。 Match Phrase Query(短语匹配查询):根据字段中连续的短语进行查询,适用于需要保持短语顺序的查询。 Prefix Query(前缀查询):根据字段中的前缀进行查询,适用于需要按照前缀匹配查询的场景。 Wildcard Query(通配符查询):使用通配符符号(*和?)进行模糊匹配的查询。 Fuzzy Query(模糊查询):根据字段中的模糊匹配进行查询,可以通过设置fuzziness参数来控制模糊程度。 Nested Query(嵌套查询):根据嵌套对象进行查询,以便查询嵌套在文档中的相关信息。 Aggregation Query(聚合查询):用于计算、统计和分析数据,包括求和、平均值、最小值、最大值、分组等操作。 -
一个别名可以映射多个索引,通过查询别名能实现对多个索引的查询,在更新索引时使用别名也能做到无感知更新
-
elasticsearch可以为经常创建的相同结构的索引创建模板,方便生成索引
mysql
- mysql 粗略估计单表适合的最大记录数2000w,mysql的页16kB,假如一行数据是1k,一页能存15条左右的数据,非叶子节点能存 5*1024/12≈1280, b+树 3层 延迟能接受, 1280^ 2 *15 ≈ 2000w
- 事务隔离级别:
- RU
- RC : MVCC多版本并发控制
- RR :MVCC多版本并发控制 + (行锁+ 间隙锁)
- 串行
- mysql 锁:baijiahao.baidu.com/s?id=170942…