0 使用理由
0.1 高性能
0.2 高并发
0.3 单线程
- 至于redis单线程的缘由。有点意思。CPU不是Redis的主要瓶颈,由于Redis一般是内存或网络绑定。例如,通常Linux系统上运行的Redis每秒甚至能够提供100万个请求,所以不会使用太多的CPU。言下之意,就是说redis根本不须要多线程,何况多线程会有上下文切换消耗。固然能够经过启动多个redis实例,达到利用cpu的目的。
1 缓存使用
1.1 使用场景
- 读对于写,为了减小数据库访问的id操做,能够将数据缓存,提升系统性能
1.2 使用方法
-
查询redis
- 查出数据后,利用json将数据转成String类型,存进reids
-
更新sql
- 先把数据更新到数据库
- 删除reids的key
2 缓存雪崩
2.1 what
- 因为缓存时间相近或者redis宕机致使缓存数据同一时间大面积失效,使得数据库短期请求增多,增长数据库压力,减低数据库访问性能
2.2 how(解决):
-
事前:数据库
- 宕机致使:的保证redis高可用,发现机器宕机,及时补上。选择合适的内存淘汰策略
- 缓存失效时间相同致使的:在设计时间的时候随机加减几分钟
-
过后:json
- 宕机致使的: 利用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