redis笔记

一、运用场景:

缓存

限流

降级

秒杀

排行榜

1.缓存

数据缓存-首页

2.限流的算法

漏桶

超出的部分直接丢弃。

缺点是无法处理突发大的流量,即使服务器还有大量空闲资源

而且会有临界问题。

令牌桶

没有令牌的,会丢弃掉

滑动窗口机制

一个时间窗口划分为多个时间窗口

解决临界问题,1s访问次数不超过100个,使用计数器counter +1 , 但是会有可能1s内瞬间发送200个请求。

3.降级

ngnix + lua + redis

4.秒杀

ngnix + lua + redis乐观锁 帮助公司实现高效的秒杀系统

秒杀的特点:

访问大,导致商城瘫痪

解决办法:

队列

负载均衡

接入层限流

很多的请求不会生成订单

带宽问题

超卖

解决办法:

mysql悲观锁 (对数据库加锁)

mysql乐观锁 (通过版本号控制)

php+队列

php + redis分布式锁 (setnx)

php + redis乐观锁

watch

multi

set

exec

ngnix + lua + redis乐观锁

限流

监视指定的key,看有没变化

二、redis的线程模型

单线程的,通过     IO多路复用    监听多个套接字

三、redis的优缺点

1.丰富的数据类型

string list hash set zset

2.持久化策略

RDB  AOF

3.事务机制

支持事务

但对事务的支持比较弱

不支持回滚

4.内存淘汰策略

缺点:

内存限制,局限在较小的数据量

不支持故障转移

扩容

数据不一致

四、redis的list队列先进先出如何解决插队问题

单一列表

lpush   rpop

rpush  rpop

两个队列

一个普通队列  一个高级队列

五、redis,lpop一条数据后,插入数据库失败怎么办

lpop没有消息的时候,需要适当sleep一会再试

在消费者下线的情况下,生产的消息丢失,需要专业的rabbitmq

六、

缓存击穿

缓存中没有数据,数据库中有数据

解决办法:

热点数据永不过时

缓存雪崩

同一时间,缓存中的数据失效

解决办法:

为不同的数据设置不同时间段的过期时间

缓存穿透

缓存中 和 数据库中的数据都没有

解决办法:

布隆过滤器

将可能存在的数据哈希到一个足够大的bitmap中

七、redis的内存淘汰策略有哪些 内存不足  内存机制

会报错

移除最近最少使用的键

随机移除某个键

最近最少使用的键

更早过期时间的键

八、内存用完会怎样,内存不足

内存淘汰策略

增加内存

九、分布式锁的实现

setnx

可以控制用户的频繁操作

十、redis 和 mongoDB 的区别

数据类型

string   list  hash   set  zset

json

持久化机制

RDB   AOF

binlog

事务

内存管理机制

LRU算法

热点数据保存到内存

十一、mongoDB分片

多台机器上 存储记录数据的过程

十二、

set  get   setex   setnx  setbit  getbit  exits  expire  hmset  hgetall

mset  mget

scan  smembers  keys

smember keys 遍历处理大的数据时 会阻塞

scan 分次进行 不会阻塞线程

scard 

sadd

zadd

1.string 

简单的key-value结构

2.list

列表

40亿元素

顺序排序,可以重复

根据下标读取元素

可以用作评论列表  消息列表

3.hash

可以存复杂的数据

hset  hget  hmset  hsetnx  hincrby

4.set

集合

无序集合,不重复

5.zset

有顺序集合,不重复,但是有权重,可以按照优先级

可以用作排行榜

主从复制

什么是主从复制

1.单向的

2.都是主节点

3.只有一个主节点  从节点多个

主从复制的作用

1.冗余

2.备份

3.高可用

4.安全

5.故障转移

主从复制原理流程

1.准备阶段

主从建立连接

2.数据同步阶段

ping - 权限验证 - 数据同步

3.命令传播阶段

redis实现主从复制的步骤

1、分别运行redis容器

2、配从库不配主库

slaveof ip  port

redis主从复制进阶常见问题解决

1、数据延迟

info_replication_offset

master_replication_offset

repl_replication_offset

connected_slaves

slave_server_stale_data

yes

no

1

2  最低

3  不超过

2、配置不一致

maxmemory 内存相关配置要一致

3、数据丢失

min_slaves_to_write

min_slaves_max_lag

全量复制

全部数据会发送到从节点

全量复制的过程

1、主机会向从机发送runid offset 第一次 就会全量复制

2、从机保存主机的基本信息

3、主机接收到命令后,bgsave异步执行,生成RDB快照文件

4、主机把快照文件发送给到从机

5、发送数据到缓冲区

4、清空老数据

5、加载数据

部分复制

补发丢失的数据

复制积压缓冲区

主要保留着最近写的命令 + 偏移量

全量复制开销,主要有以下几项:

1、bgsave异步执行时间

2、RDB快照迁移时间 网络传输

3、老数据清除时间

4、数据加载的时间

slaveof ip port

从节点指向主节点的ip port

masterauth  xxxx

master实例启用了密码保护

repl-backlog-size

缓冲区大小调节

slave_server_stale_data

是否继续应答来自客户端的请求

slave-read-only

从节点 是否只读

repl-ping-slave-period

redis持久化

RDB

数据保存到硬盘

save

阻塞 直到完成

bgsave

创建子进程 由子进程负责持久化

save  m  n 

没办法毫秒级别

数据量大时,fork子进程也会阻塞

AOF

写命令保存到硬盘

bgrewriteof

auto_aof_rewrite_min_size

auto_aof_rewrite_percentage

指令的追加

压缩瘦身

appendonly  no

appendfilename

appendfsync everysec

no-appendfsync-on-rewrite on

aof-load-truncate

是否仍然载入

重写机制

压缩文件

lpush list a b c

开启AOF  

RDB AOF区别

1、保存的数据不一致

2、数据的恢复效率

3、完整性

4、压缩

5、每秒  追加     时间间隔

为啥需要持久化

主机误重启

异地灾备

linux配置优化

vm.overcommit_memory

swappiness

OOM

ulimit

redis优化

内存

键简短

超时时间

有效期

持久化

压缩

客户端连接的最大连接数

bit级别的存储

一次性添加多条数据 可以使用管道

redis连接池

redis哨兵

监控 看哪个节点挂掉

然后通过其他节点进行选举  选举出新的节点

整个过程 不需要人工介入

哨兵实现原理

1、检测问题

确定主从关系

节点间感知对方

心跳检测

2、找出问题

主客观下线

主观

单个

客观

多台

4、解决问题

选举领导者

故障转移

1.优先级配置

2.偏移量最大的节点

redis哨兵的功能

监控

通知

主节点故障转移

sentinel  monitor mymater xxxx   xxxx

sentinel down-after

sentinel paraller-syncs mymater 12

新节点发起复制的从节点个数

哨兵常见问题

数据丢失

min-slaves-to-write

min-slaves-max-lag

redis分布式

主从复制

哨兵

分布式集群

可以扩容 每个节点可以存不同数据

数据分布:

顺序分区

数据倾斜

哈希分区

节点伸缩

扩容操作

准备新节点

加入集群

迁移槽和数据

为主节点添加对应的从节点

redis集群

搭建redis集群

1、准备节点

cluster_enbale

cluster_node_timeout

cluster_configfile

2、节点握手

cluster meet

cluster node

3、分配槽

cluster addslots

redis分布式集群原理

key值分配

redis的每个节点会有两个东西

一个是插槽

一个是集群

节点通信

节点彼此不断通信,交换信息

开辟一个tcp通道

ping  pong

集群伸缩

slowlog_log_lower_than

zset  跳表   b树 红黑树

有序集合  有权重

跳表只需要维护左右两个节点

b树 会引起子树的调整

红黑树  会引起节点的旋转

范围查询效率高于红黑树  从上到下查找的   上层范围更广

1、空间

2、排序

平衡查找树

红黑树的区别

树和图的区别

1、遍历

2、有根节点

3、分层的数据结构  网络结构

ngnix + lua + redis乐观锁  如何实现qps  20000的负载

限流 降级 缓存

怎么测算出来的

添加请求

qps

线程组

布隆过滤器

不需要存储key的值

布隆过滤器实操的几种方法

1、php+redis实现布隆过滤器

2、redis的插件 bloom-filter

bf.add

bf.exits

bf.madd

bf.reserve xxx xx xx

3、$redis->rawCommand()

对消息的确认

持久化只是保存当前这一时间节点的数据  

如果到期了是不会放进去的 

而且过期的会有对应淘汰策略

时间到了就会释放连接

不会释放连接  而是由php-fpm管理

redis的hash底层实现

ziplist压缩列表

dic

redis事务理解

一系列串行化命令的集合

会放在队列中

一个个顺序执行

要么全部执行成功  要么全部失败

没有回滚

事务性  高可用性

事务的原子性:

单条命令是原子性执行

但是事务不保证原子性

multi

exec

set

watch

discard

unwatch

zadd

zrem

zpopmax

zpopmin

zincrby  score

zincrby  score

zcard

zrank

zrangbyscore

zcount

zrange

zunionstore

zinterstore

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值