共计 991 个字符,预计需要花费 3 分钟才能阅读完成。
0 使用理由
0.1 高性能
- 纯内存操作,比在硬盘操作数据的速度有极大提升
0.2 高并发
- 承受请求比直接操作数据库大得多
0.3 单线程
- 至于 redis 单线程的原因。有点意思。CPU 不是 Redis 的主要瓶颈,因为 Redis 通常是内存或网络绑定。例如,一般 Linux 系统上运行的 Redis 每秒甚至可以提供 100 万个请求,因此不会使用太多的 CPU。言下之意,就是说 redis 根本不需要多线程,况且多线程会有上下文切换消耗。当然可以通过启动多个 redis 实例,达到利用 cpu 的目的。
1 缓存使用
1.1 使用场景
- 读对于写,为了减少数据库访问的 id 操作,可以将数据缓存,提高系统性能
1.2 使用方法
查询
- 查出数据后,利用 json 将数据转成 String 类型,存进 reids
更新
- 先把数据更新到数据库
- 删除 reids 的 key
2 缓存雪崩
2.1 what
- 由于缓存时间相近或者 redis 宕机导致缓存数据同一时间大面积失效,使得数据库短时间请求增多,增加数据库压力,减低数据库访问性能
2.2 how(解决):
事前:
- 宕机导致:的保证 redis 高可用,发现机器宕机,及时补上。选择合适的内存淘汰策略
- 缓存失效时间相同导致的:在设计时间的时候随机加减几分钟
事后:
- 宕机导致的:利用 redis 持久化机制保存的数据及时恢复缓存
3 缓存穿透
3.1 what(是什么)
- 请求缓存中不存在的数据,使得数据库压力增大,从而崩掉
3.2 how:(解决)
- 布隆过滤器
- 直接缓存他 (空的),设计一个较短时间,使其失效
4 Redis 数据类型
- String 字符串
- Hash 哈希:用户 ID
- List 列表:粉丝列表
- Set 集合:共同好友
- Sorted Set 有序集合:排行榜
5 主从复制
5.1 定义 / 解释
建立一个与主数据库一样的数据库环境,称为从数据库,主复制库一般是准实时的业务数据库。
5.2 作用
- 作为备用数据库,主数据库发生故障后,切换到从数据库
- 架构扩展,业务量增大,io 访问频繁,做多库的存储,提高 io 性能
- 实现读写分离。
5.3 原理
- 将主数据库中的 bin-log 文件的 sql 语句复制到从数据库中的 relay-log 文件,再次执行。
5.4 Redis 哨兵
用途:
- 监视主从数据库运行情况
- 主数据库发生故障后,自动切换到从数据库
6 卡顿现象
6.1 解决方法:
- 使用 show global status
- 使用 show processlist
- 使用查询日志
7 大数据查询优化
- 优化 sql 语句 索引
- 使用主从复制,实现读写分离
- 加入缓存 如 redis
正文完
发表至: java
2019-09-10