java核心翻阅

redis

Redis 中存在五种数据结构

String、Hash、Set、Zset、List

Redis 中的缓存击穿,缓存穿透,缓存雪崩

缓存雪崩:缓存同一时间大面积的失效,后面的请求都会落到数据库上,造成数据库短时间内承受大量的数据请求
解决方案:缓存数据的过期时间随机设置,防止同一时间大量的数据过期的情况发生

缓存穿透:是指缓存和数据库中都没有数据,导致所有的请求都落到数据库上。数据库短时间承受大量的请求而崩掉
缓存取不到,数据库也娶不到的数据, 设置为key—null 的方式
布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap 中去

缓存击穿: 高并发查询同一条数据,但是redis 中的数据过期了。导致请求发送到了数据库,造成缓存击穿
解决方案: 设置热点数据永不过期;
使用互斥锁。分布式情况下使用分布式的锁

eleasticsearch

ES是一个搜索引擎, 同时也是一个分布式文档存储数据库. 为了保证后续的实战教程顺利进行, 这里通过对比传统的关系型数据库MySql介绍在ES的一些术语.
在MySql中有数据库(Database), 表(table), 行(Row), 列(Column)的概念, 同样在ES中也有类似的概念, 索引(Index), 类型(Type), 文档(Document), 字段(Field).
可以做类比:
名称 数据库 表 行 列
MySql DB Table Row Colume
ES Index Mapping Document Field

索引Index
ES中的索引概念不是关系型数据库中的索引, 而是指存数据的地方, 类似于关系型数据库中数据库的概念.

类型Type
有的文章说ES中的类型Type对应的是关系型数据库中的表, 在使用ES中我们会遇到另外一个概念映射(Mapping), 大部分文档都认为映射(Mapping)才是真正的对应关系型数据库中的表.
实际上ES中Type的概念已经名存实亡了,后期的版本中越来越被弱化, 在未被ES正式移除之前, ES后期版本已经不允许一个索引Index创建多个Type了, 在ES7中已经移除了Type, 而ES6只允许一个Index创建一个Mapping.
如果现阶段一定要理解ES中的Type, 那么一定要和Mapping结合起来. 可以理解为类型Type就是定义一个表而已, 而映射Mapping定义了表结构, 包括哪些列, 哪些行.

文档Document
在非关系型数据库中, 有部分被称之为"文档数据库", 对应于关系型数据库中的一行记录.

字段Field
对应关系型数据库中的列.

你可能感兴趣的:(后端,工具类,java,spring,boot,spring,cloud)