redis高性能且线程安全原因:
单线程(如果想一台机子让redis多线程,可以选择集群方式,每一个redis进程都用一个CPU,充分压榨CPU)
多路复用IO(虽然单线程,但响应快的原因)
基础数据模型以及应用场景:
使用框架:
持久化:
RDB:通过子进程进行数据拷贝并且二进制存储
AOF:通过记录操作日志进行持久化
windows版本redis主从:
# 在从库redis节点配置主库就可以,主库会识别从库,如果有密码需要配置密码
# slaveof <masterip> <masterport>
复制代码
windows版本redis 哨兵
监控redis主库服务,主库宕机会自动从其关联的从库选举master节点
# 这个是Redis6379配置内容,其他文件同理新增然后改一下端口即可,26380,和 26381。
#当前Sentinel服务运行的端口
port 26379
# 哨兵监听的主服务器 2 是决定选举的最低票数
sentinel monitor mymaster 127.0.0.1 6379 2
# 密码
sentinel auth-pass mymaster 123
# 3s内mymaster无响应,则认为mymaster宕机了
sentinel down-after-milliseconds mymaster 3000
#如果10秒后,mysater仍没启动过来,则启动failover
sentinel failover-timeout mymaster 10000
# 执行故障转移时, 最多有1个从服务器同时对新的主服务器进行同步
sentinel parallel-syncs mymaster 1
复制代码
redis集群分区原理:
twemproxy(中间件代理技术):把整个集群空间逻辑计算为16384个哈希槽, 有多少个分区就是把这些槽平均分为多少份,通过hash计算每条数据应该存放在哪个槽区间(意味着redis集群扩容有上限,超过了这个就要用其他处理方法),这个过程对客户端是透明的
-
我的理解是主从就是单一主库,可以多个从库,集群就是把主从升级为多个主库,其中一个主库宕机就会选其对应从库升主,如果没有对应从库,整个集群就宕了
-
redis每个实例也是全量存储,每个redis存储的内容都是完整的数据,浪费内存且有木桶效应。为了最大化利用内存,可以采用集群,就是分布式存储
-
实践要素 windows下搭建:
- 装ruby
- 替换ruby的redis驱动 选你使用的redis对应的版本最佳,防止不兼容的情况
- 启动程序 这段代码就是启动程序,放到其中一个master节点通过这段程序启动
#执行命令时候路径不能存在中文,否则直接报错
#把redis-trib.rb文件搞成utf8格式
redis-trib.rb create --replicas 0 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382
复制代码