-
数据结构延展
- 常用数据结构:String,Hash,List,Set,Sorted Set(不聊这些)
- 高级数据结构:Bitmaps,hyperloglog,GEO
-
单机拓展到分布式
- 为什么要分区:性能瓶颈、资源瓶颈、横向扩展
- 分区方案
- 客户端自定义hash计算Redis的地址
- 一致性hash环
- 槽(sharding)
-
分布式管理
- redis主从
redis-server --port 6379 redis-server --port 6380 --slaveof 192.168.0.167 6379 redis-server --port 6381 --slaveof 192.168.0.167 6379 主从复制是乐观复制,只响应sync,psync 同步数据:RDB+缓冲区 sync:全量同步 Psync:断线重复制
- redis哨兵
sentinel monitor mymaster 192.168.0.167 6379 1 sentinel monitor mymaster 127.0.0.1 6379 quorum:quorum为投票时通过的票数 sentinel down-after-milliseconds mymaster 5000:ping,5000ms后认为宕机 sentinel parallel-syncs mymaster num:当mymaster挂了后,num台从机向新的主机复制操作 sentinel failover-timeout mymaster times:通常被解释成故障转移超时时间,但实际上它作用于故障转移的各个阶段: 1. 选出合适从节点。 2. 晋升选出的从节点为主节点。 3. 命令其余从节点复制新的主节点。 4. 等待原主节点恢复后命令它去复制新的主节点。
- redis集群
创建集群: ./redis-trib.rb create --replicas 1 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385 添加节点: ./redis-trib.rb add-node 127.0.0.1:7001 127.0.0.1:6380 ./redis-trib.rb reshard 127.0.0.1:7001 删除节点: ./redis-trib.rb reshard 127.0.0.1: 6383 ./redis-trib.rb del-node 127.0.0.1: 6383 node_id 切换为从节点: redis-cli -c -p 7001 cluster replicate node_id
-
高并发项目中的缓存策略
- 缓存淘汰
- noeviction:当内存不足以容纳新写入数据时,新写入操作会报错。
- allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key。
- allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个key。
- volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key。
- volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个key。
- volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除。
- 缓存粒度控制
- 全部数据
- 部分数据
- 防止缓存雪崩
- 缓存空对象
- 布隆过滤器
- 热数据更新
- 使用消息队列进行异步数据更新
- 缓存淘汰