《Redis高阶应用》讲座总结

数据结构延展

- 常用数据结构: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优先移除。
- 缓存粒度控制
    - 全部数据
    - 部分数据
- 防止缓存雪崩
    - 缓存空对象
    - 布隆过滤器
- 热数据更新
    - 使用消息队列进行异步数据更新

posted on 2019-06-10 14:44  果然朝辉  阅读(247)  评论(0编辑  收藏  举报

导航