redis从0开始到集群

介绍基本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
redis 集群

主从模式
缺点 从数据库可能会丢失部分数据,操作模式 使用DNS负载均衡,需要人工介入

哨兵模式
自动化,sentinel工具。配置复杂,性能和高可用表现一般。
client应该连接哨兵sentinel节点,从哨兵那拿到 主从节点。
缺陷:1.单点写的节点故障,2. 数据恢复非常慢, 3.写性能瓶颈(10w并发)
主观故障:有一半节点认为主节点下线,哨兵启动巡警模式,处理,把主节点下线,从节点选出一个作为主节点 。从新的主节点复制数据。
客观故障:


集群模式:
一个主节点+2个副本节点为一个集群, 可以有多个集群。 且master节点提供对外节点。
16384虚拟节点,平均给每个集群,每个节点负责部分范围的hash slot。
Client: 从 16384 % hashkey 的余数 落在那个集群上。理论上集群最大为 16384个,一般是1000个。
当一个集群master挂了,就从副本选一个数据全的作为master。 访问瞬断损失最小


阅读更多

docker国内镜像加速列表

  1. 中科大镜像加速
    1
    https://docker.mirrors.ustc.edu.cn

2.阿里云

1
https://vvyah8wl.mirror.aliyuncs.com

dalao经验

消息队列 redis

订阅模式,点对点模式

看似木头 15:06:10
Atlas
还有你们redis队列用的pop还是 订阅
@Atlas blpop,

看似木头 15:06:17
订阅是广播,

看似木头 15:06:27
blpop是单播

看似木头 15:06:55
额, 其实是轮播, redis自己实现的负载均衡

看似木头 15:08:23
广播可能会消耗redis大量的loop片段, 所以我们不用

2逼哥哥 15:08:32
用redis的stream做消息队列爽得一p

看似木头 15:08:56
stream也很不错

看似木头 15:09:08
就是实现略微复杂

看似木头 15:14:00
Atlas
队列上,Redis 广播 场景是啥
@Atlas 比如多路缓存更新

看似木头 15:14:19
因为本地lo比局域网快相当多

看似木头 15:14:56
还有就是并发实在太高, 比如500k/s

看似木头 15:15:11
这时候要分好几个redis集群的.

看似木头 15:15:48
那么集群同步更新某些数据, 方式之一就是这样洛

看似木头 15:16:01
接收统一的配置命令,比如京东/淘宝上的秒杀活动

最佳的数组去重

有个题目. 我有100k个手机号名单, 我给你1k个手机号, 让你查出来, 哪些手机号在名单中, 哪些不在
array系列函数, 其实可以实现相当多算法. 虽然性能比起其他语言查许多. 但是光php本身, 合理利用array系列函数, 性能也能提升百倍

array_flip与isset
QQ图片20220901160813.png

QQ图片20220901160854.png

用PHP实现位标记,用PHP二进制实现类似0777权限设计

有人会问这个使用场景,比如 数据库字段你存一个用户的爱好集合,你使用json [“xx”,”xx”] 还是希望用一个int 来存集合?

目前我使用两种方案。
第一种是转换为 二进制字符串,然后从右往左 按照位是否是==1 来标记集合.
第二种使用 按位与& 来实现,是否 爱好和 用户int 命中,如果两者的任意位 命中,那么 a&b 一定>0 也就是 !=false 也就是 !==0b0

先看看原理图
dec2bin2array.png

阅读更多