redis

1.Redis性能指标:

  • 性能极高,能到 100000 次/s 读写速度

  • 丰富的数据类型,String、List、Hash、Set、Sorted Set(有序集合)

  • 原子性:Redis 的所有操作都是原子性的

  • 缺点: .
    数据库容量受到物理内存的限制,不能用作海量数据的高性能读写 .适合的场景主要局限在较小数据量的高性能操作和运算上

  • .TPS(吞吐量)

    系统在单位时间内处理请求的数量

  • .RT(响应时间)

    系统对请求作出响应的时间。在讨论一个系统的响应时间时,一般指系统所有功能的平均时间或者所有功能的
    最大响应时间

  • .QPS(每秒查询率)

    每秒查询率 QPS 是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,即最大吞吐量
    本机的QPS大概在17万

2.Redis读写分离

  • .某些大型网站QPS可达2000万,而单台电脑的QPS一般在几十万,我们可以对读写能力扩展,采用读写分离的

  • 方式解决性能瓶颈,将主服务器的数据复制给从服务器,并准实时更新,然后将读请求分散到不同的从服务器上进行处理。
    3.AOF和RDB

  • Redis数据库持久化有两种方式:RDB全量持久化和AOF增量持久化,Redis默认开启的是RDB模式

  • .RDB:
    RDB是将支持当前数据的快照存成一个数据文件
    优点:
    .方便备份。
    .方便备份的同时,我们也很容易的将一个RDB文件移动到其他存储物质上
    .RDB 可以最大化 Redis 的性能
    劣势:
    .不能保证数据的完整性,可能发生丢失
    .AOF:
    AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集
    优点:
    .更高的数据安全性,即数据持久性
    .Redis 可以在 AOF 文件体积变得过大时,自动地在后台对 AOF 进行重写
    劣势:
    .对于相同数量的数据集而言,AOF文件通常要大于RDB文件。RDB 在恢复大数据集时的速度比
    AOF 的恢复速度要快。
    .AOF在运行效率上往往会慢于RDB。
    编辑redis.windwos.conf文件
    appendonly no(关闭aof) --> appendonly yes (开启aof)

4.Redis高可用:
.高可用是分布式系统架构设计中必须考虑的因素之一,它是通过架构设计减少系统不能提供服务的时间
实现高可用的方法:
.避免单点:某个功能的实现不能只有一台服务器,否则出现故障整个系统就不可用
.保证冗余:增加重复的部分,对数据库等有备份
.保证自动故障转移:每次故障人工修复会增加不可用的时间,所以要实现自动故障转移
5.Sentinel介绍:
.哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令(PING-PONG),等待Redis服务器响应,从而监控运行的多个Redis实例。
.Sentinel主要是监控服务器的状态,并决定是否进行故障转移
故障转移过程:
主观下线:单个 Sentinel 实例对服务器做出的下线判断(服务器没有对Sentinel发出的ping指令进行回复)
客观下线:多个 Sentinel 实例在对同一个服务器做出下线判断
故障转移:推选出一个Sentinel,对失效的主服务器执行自动故障迁移操作
6.Sentinel三大任务:
.监控:通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。
.提醒:当某个redis发生故障,哨兵可通过API通知管理员
.自动故障转移:当主服务器失效时,sentinel会进行一次自动故障转移,sentinel会将主服务器的一个从服务器自动升级为主服务器,
并且让失效主服务器的其他从服务器改为复制新的主服务器
7.互联网冷备和热备:
.冷备:冷备发生在数据库完全关闭的情况下,备份快速安全,易于维护
.热备:热备发生在数据库开启的情况下,难于维护
8.Redis内置集群(cluster):
.所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽
.客户端与redis节点直连,不需要连接集群所有节点,只需要连接集群中任意可用节点即可
.redis-cluster把所有的物理节点映射到[0-16383]slot上(不一定是平均分配),cluster 负责维护node<->slot<->value
.Redis集群预分好16384个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,根据< key的hash值 mod 16384>的值,决定将一个key放到哪个哈希槽中,每个节点负责一部分哈希槽
故最多redis集群支持16384个子服务器
.分布式解决方案,解决单点故障与扩展性以及哨兵机制中每台 Redis 服务器都存储相同的数据浪费内存的问题
.实现了 Redis 的分布式存储,也就是每台 Redis 节点上存储不同的内容,所有节点的数据合起来才是完整数据
.集群节点数量必须是奇数个
.如果集群节点中主节点超过半数以上宕机,则集群失败
9.Redis 集群的主从复制模型:
.为了保证集群的高可用性,redis每个节点都有至少一个复制节点
10.Redis集群扩展:
.twemproxy实现hash分片(知乎2000万QPS解决方案)
.Twemproxy 是一个 redis 和 memcache 快速 / 轻量级代理服务器, 利用中间件做分片的技术。twemproxy 处于客户端和服务器的中间,
将客户端发来 的请求,进行一定的处理后(sharding ),再转发给后端真正的 redis 服务器
.Twemproxy 通过引入一个代理层,可以将其后端的多台 Redis 或 Memcached 实例 进行统一管理与分配,使应用程序只需要在Twemproxy 上进行操作,
而不用关心后 面具体有多少个真实的Redis 或 Memcached 存储
11.一致性哈希算法:
.一致性哈希算法(Consistent Hashing Algorithm)是一种分布式算法,常用于负载均衡
12.缓存的优点:
.减少了对数据库(硬盘)的读操作,数据库的压力降低
.加快响应速度
13.redis为什么是单线程?
.因为CPU不是Redis的瓶颈。Redis的瓶颈最有可能是机器内存或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了。
缺点:服务器其他核闲置
14.redis主从复制的步骤:
.第一阶段:与master建立连接
.第二阶段:向master发起同步请求(SYNC)
.第三阶段:接受master发来的RDB数据
.第四阶段:载入RDB文件
15.Redis的同步机制:
.主从复制中的主从服务器双方的数据库将保存相同的数据,概念上将这种现象称作数据库状态一致。
.数据同步步骤:
.从节点向主节点发送 SYNC 指令
.收到 SYNC 指令,主节点生成一个 RDB 文件
.从节点接收、载入 RDB 文件,从节点执行这些写指令,将数据库状态更新至主节点当前数据库状态
完整重同步(sync)和部分重同步(将断线后的写命令发送给服务器,效率较高)
16.redis技术使用场景总结:
.单机版:数据量,QPS不大的情况使用
.主从复制:需要读写分离,高可用的时候使用
.Sentinel哨兵:需要自动故障转移的时候使用,每个节点都是全量储存相同的数据,浪费内存
.内置集群:数据量比较大,QPS有一定要求的时候使用,但集群节点不能过多,每个节点存放不同的数据,分布式存储
.twemproxy集群:数据量,QPS要求非常高,可以使用
17.Redis有哪些适用场景?
.会话缓存(Session Cache),是 Redis 最常使用的一种情景
.排行榜和计数器,Redis 在内存中对数字递增、递减的操作实现的非常好。Set 和 Sorted Set 使得我们在执行这些操作的时候非常简单
.发布和订阅
18.redis在内存,mysql在硬盘。web每次先访问redis,如果没有数据再访问mysql
19.redis击穿:
.击穿的定义:
.①当用户根据key 查询数据时,先查询缓存,如果缓存有命中,返回
.②但是如果缓存没有命中直接穿过缓存层,访问数据层 如果有,则存储至缓存
.③但是同样如果没有命中,(也就是数据库中也没有数据)直接返回用户null,但是不缓存
.某一个key请求量很大,但缓存和数据库都没数据,那么大量的访问压力就会直接到达数据库层,有可能造成宕机
.解决方案:
.当数据库中也没有数据的时候,我们直接将null 作为值设置redis中的key,这样访问请求不会穿过redis到达mysql
.此时如果没有数据,一般情况下都需要设置一个过期时间,例如:5分钟失效。(为了避免过多的KEY 存储在redis中)
20.三级缓存架构:
.nginx–>redis–>mysql
.缓存数据的同步用canal
21.*nginx缓存
22.redis缓存雪崩:
.定义:
如果缓存集中在一段时间内失效,发生大量的缓存穿透,所有的查询都落在数据库上,造成了缓存雪崩
.解决思路:
.限流
在缓存失效后,某一个key 做count统计 限流,达到一定的阈值,直接丢弃,不再查询数据库。例如:令牌桶算法
.做二级缓存
当分布式缓存失效的时候,可以采用本地缓存,本地缓存没有再查询数据库。这种方式,可以避免很多数据分布式缓存没有,就直接打到数据库的情况.
就是在redis后面再加一个缓存,做个保障
23.nginx有哪些负载均衡策略:
.轮询(默认)round_robin
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除
.最少连接 least_conn
下一个请求将被分派到活动连接数量最少的服务器
24.nginx优点:
.跨平台、配置简单。
.非阻塞、高并发连接
处理 2-3 万并发连接数,官方监测能支持 5 万并发
.内存消耗小
开启 10 个 Nginx 才占 150M 内存。
25.nginx常用配置:
.server{
listen 81; # 监听的端口
server_name localhost; # 允许的域名或ip
location / { # 访问路径配置
root index;# 项目根目录
***proxy_pass http://tomcat-travel; #在此添加负载均衡配置
index index.html index.htm; # 默认首页
}
. upstream tomcat-travel {
server 192.168.177.129:8080;
server 192.168.177.129:8081 weight=2; #负载均衡的权重配置,出现次数是其他服务器的两倍
server 192.168.177.129:8082;
}
26.NOSQL:
.NoSQL(NoSQL = Not Only SQL),泛指非关系型的数据库
.优点:
.成本低
.查询速度快
nosql存储在缓存中,mysql存储在硬盘
.存储数据的格式多样
nosql的存储格式是key,value形式、文档形式、图片
mysql只支持基础数据类型
.缺点:
.不支持sql语句
.不提供关系型数据库对事务的处理
.主流nosql产品
.键值(Key-Value)存储数据库----redis
.文档型数据库----mongoDB
27.mongoDB:
.MongoDB是一款由c++编写的数据库,他支持的数据结构比较松散,类似json格式,可以存储比较复杂的数据结构
.适用场景:
数据量大
写入操作频繁
价值较低
比如文章的评论功能
28.MongoDB 的逻辑结构:
.文档(document)、集合(collection)、数据库(database)
29.api使用:
.SpringDataMongoDB
.引入依赖
.yml配置
.类似通用mapper一样,用一个接口继承MongoRepository<Comment, String>
. @Autowired自动注入使用
.SpringDataRedis
.pom.xml依赖
.yml配置
.@Autowired
private RedisTemplate redisTemplate;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值