乐趣区

Redis面试总结

数据结构

简单动态字符串

对象类型

字符串,列表,集合,有序集合,哈希

Redis 常用的命令 操作 List 常用的命令

有序集合的使用场景

热点资讯排行榜,根据点击量,时间等进行排序

redis 怎么保证 两个操作原子性

redis 事务失败是否 rollback

事务在执行过程中发生错误,resdis 不会中断事务的执行,它会继续执行剩下的命令,不会 rollback

redis 集群高可用实现

持久化方式

rdb,aof

redis 过多数据 打到同一实例,导致负载过高问题如何解决

缓存更新问题

redis 单机最大 QPS

原理:每天 80% 的访问集中在 20% 的时间里,这 20% 时间叫做峰值时间 公式:(总 PV 数 * 80%) / (每天秒数 * 20%) = 峰值时间每秒请求数(QPS) 机器:峰值时间每秒 QPS / 单台机器的 QPS = 需要的机器 问:每天 300w PV 的在单台机器上,这台机器需要多少 QPS?答:(3000000 * 0.8) / (86400 * 0.2) = 139 (QPS) 问:如果一台机器的 QPS 是 58,需要几台机器来支持?答:139 / 58 = 3

缓存策略

分布式缓存(redis)和本地缓存的使用场景

redis 使用遇到的问题

锁释放问题, lua 脚本保证释放锁为当前线程拥有

集群搭建

配置 redis.conf 文件

# 端口号,每个目录都不同
port 7000
# 开启集群模式
cluster-enabled yes
#节点超时实际,单位毫秒
cluster-node-timeout 5000
#集群内部配置文件(默认为 nodes-6379.conf)
cluster-config-file nodes.conf
# 启动 AOF
appendonly yes
# 默认是 no,改成 yes,意思是是否要后台启动。daemonize yes

启动 redis 节点

# 各节点目录执行
redis-server redis.conf

查看节点启动状态

ps -ef|grep redis

客户端连接任意节点

redis-cli -p 7000

执行以下命令关联其他节点

127.0.0.1:7000> cluster meet 127.0.0.1 7001
OK
127.0.0.1:7000> cluster meet 127.0.0.1 7002
OK
127.0.0.1:7000> cluster meet 127.0.0.1 7003
OK
127.0.0.1:7000> cluster meet 127.0.0.1 7004
OK
127.0.0.1:7000> cluster meet 127.0.0.1 7005
OK

分配 slot
redis Cluster 是由 16384 个 slot 组成的,那么我们需要将这些槽分散到这其中 3 个节点里(3 主 3 从)

节点默认 slot 分配情况

查看节点分配情况

redis-cli -p 7000 cluster nodes

主从配置
分别设置 7003、7004、7005 节点的主库

redis-cli -p 7003 cluster replicate 主节点 7000NodeId

redis-cli -p 7004 cluster replicate 主节点 7001NodeId

redis-cli -p 7005 cluster replicate 主节点 7002NodeId
退出移动版