图见链接 Redis
- Redis介绍 1
1.1. NoSql数据库 1
1.1.1. 键值存储 1
1.1.2. 列式存储 1
1.1.3. 文档型 1
1.1.4. 图形数据库 1
1.2. Redis应用场景 1
1.2.1. 内存数据库 1
1.2.2. 缓存数据库 1
1.2.3. 分布式集群的session分离问题 1
1.2.4. 任务队列 1
1.2.5. 分布式锁 1
1.2.6. 发布订阅的消息模式 1
1.2.7. 应用排行榜 1
1.2.8. 网站访问统计 1
1.2.9. 数据过期处理 1 - 5种基本类型 1
2.1. string 1
2.2. hash 1
2.3. list 2
2.3.1. 使用双向链表实现 2
2.3.2. 常用命令 2
2.3.3. 其他命令 2
2.4. set 2
2.4.1. 数据不重复且无序 2
2.4.2. 常用命令 2
2.4.3. 其他命令 3
2.5. zset 3
2.5.1. 特点 3
2.5.2. 常用命令 3
2.5.3. 其他命令 3
2.6. 通用命令 4
2.6.1. keys pattern 4
2.6.2. del 4
2.6.3. exists 4
2.6.4. EXPIRE key seconds
TTL key 4
2.6.5. PERSIST key 4
2.6.6. PERSIST key milliseconds 4
2.6.7. rename 4
2.6.8. type key 4 - Redis消息模式 5
3.1. 队列模式 5
3.1.1. lpush 和lpush 实现的消息队列 5
3.2. 发布订阅模式 5
3.2.1. SUBCRIBE channel 5
3.2.2. PUBLISH channel 5 - Redis事务 5
4.1. MULTI 5
4.1.1. 标记事务开始 5
4.2. EXEC 5
4.2.1. 执行队列中的命令 5
4.3. DISCARD 5
4.3.1. 清除队列中的命令 5
4.4. WATCH 5
4.5. UNWATCH 5 - 哨兵机制 5
5.1. 作用 5
5.1.1. 监控 5
5.1.2. 提醒 5
5.1.3. 自动故障迁移 6
5.2. 原理分析 6
5.2.1. 1、哨兵向所有节点发送PING命令 6
5.2.2. 2、若某实例在指定时间未响应,则该实例被该哨兵标记为主观下线(SDOWN) 6
5.2.3. 3、监视该Master的哨兵发送消息确认Master进入了主观下线状态 6
5.2.4. 4、足够数量的哨兵确认后,该实例进入客观下线状态(ODOWN) 6
5.2.5. 5、哨兵正常以10秒的间隔想集群服务器发送INFO消息,若某Master下线,则向从服务器的INFO发送间隔改为1秒 6
5.2.6. 6、若没有足够数量的哨兵确认Master服务器下线,则Master的主观下线状态移除。 6
5.2.7. 7、若Master服务器重新向哨兵发送的PING命令返回回复,则Master的主观下线状态移除。 6 - 主从复制 6
6.1. 配置 6
6.1.1. 主:无需操作 6
6.1.2. 从:slaveof 6
6.2. 原理 7
6.2.1. 全量同步和增量同步 7
6.2.2. 第一次连接全量同步 7
6.2.3. 断线重连master根据runid是否一致触发全量同步或者增量同步 7
6.2.4. 其他情况增量同步 7
6.3. 全量同步 7
6.3.1. 1、同步快照阶段 7
6.3.2. 2、同步写缓冲阶段 7
6.3.3. 3、同步增量阶段 7
6.4. 增量同步 7
6.4.1. Salve完成初始化正常工作时,Master同步写操作的过程 7 - 持久化 7
7.1. RDB 7
7.1.1. 符合一定条件时Redis自动将内存中的数据进行快照保存到硬盘 7
7.1.2. 触发快照的时机 7
7.1.3. 快照过程 8
7.1.4. 优缺点 8
7.2. AOF 8
7.2.1. 默认不开启 8
7.2.2. 触发时机 8
1.Redis介绍
1.1.NoSql数据库
1.1.1.键值存储
1.1.2.列式存储
1.1.3.文档型
1.1.4.图形数据库
1.1.4.1.如:Neo4J、InfoGrid
1.2.Redis应用场景
1.2.1.内存数据库
1.2.2.缓存数据库
1.2.3.分布式集群的session分离问题
1.2.4.任务队列
1.2.5.分布式锁
1.2.6.发布订阅的消息模式
1.2.7.应用排行榜
1.2.8.网站访问统计
1.2.9.数据过期处理
2.5种基本类型
2.1.string
2.2.hash
2.3.list
2.3.1.使用双向链表实现
2.3.2.常用命令
2.3.3.其他命令
2.3.3.1.lrem
2.3.3.2.lindex 获取指定索引的值
2.3.3.3.lset key index value
2.3.3.4.ltrim key start stop
2.3.3.5.LINSERT key BEFORE|AFTER pivot value
2.3.3.6.RPOPLPUSH source dest
2.4.set
2.4.1.数据不重复且无序
2.4.2.常用命令
2.4.2.1.SADD|SREM key member
2.4.2.2.SMEMBERS key
2.4.2.3.SISMEMBER key
2.4.2.3.1.SMEMBERS key
2.4.2.4.SDIFF keyA [keyB]
2.4.2.4.1.差集:属于集合A且不属于B的元素构成的集合
2.4.2.5.SINTER keyA [keyB]
2.4.2.5.1.交集
2.4.2.6.SUNION keyA [keyB]
2.4.2.6.1.并集
2.4.3.其他命令
2.4.3.1.SCARD key
2.4.3.1.1.获取集合元素个数
2.4.3.2.SPOP key
2.4.3.2.1.随机弹出一个元素
2.5.zset
2.5.1.特点
2.5.1.1.有序集合,每个元素关联一个分数
2.5.1.2.散列表实现
2.5.1.3.可通过调整分数调整位置
2.5.2.常用命令
2.5.2.1.ZADD key score member
2.5.2.2.ZRANGE key start stop [WITHSCORES]
2.5.2.3.ZREVRANGE key start stop [WITHSCORES]
2.5.2.4.ZSCORE key member
2.5.2.5.ZREM key member
2.5.3.其他命令
2.5.3.1.ZRANGEBYSCORE key min max [WITHSCORES]
2.5.3.1.1.获取指定分数范围的元素
2.5.3.2.ZINCRBY key increment member
2.5.3.3.ZCARD key
2.5.3.4.ZCOUNT key min max
2.5.3.5.ZREMRANGEBYRANK key start stop
2.5.3.5.1.按位置范围删除元素
2.5.3.6.ZREMRANGEBYSCORE key min max
2.5.3.6.1.按照分数范围删除元素
2.5.3.7.ZRANK | ZREVRANK key member
2.5.3.7.1.获取元素正向、反向排名
2.6.通用命令
2.6.1.keys pattern
2.6.2.del
2.6.3.exists
2.6.4.EXPIRE key seconds
TTL key
2.6.5.PERSIST key
2.6.5.1.清除生存时间
2.6.6.PERSIST key milliseconds
2.6.6.1.生存时间设置为毫秒
2.6.7.rename
2.6.8.type key
3.Redis消息模式
3.1.队列模式
3.1.1.lpush 和lpush 实现的消息队列
3.2.发布订阅模式
3.2.1.SUBCRIBE channel
3.2.2.PUBLISH channel
4.Redis事务
4.1.MULTI
4.1.1.标记事务开始
4.2.EXEC
4.2.1.执行队列中的命令
4.3.DISCARD
4.3.1.清除队列中的命令
4.4.WATCH
4.5.UNWATCH
5.哨兵机制
5.1.作用
5.1.1.监控
5.1.1.1.检查Redis节点是否正常
5.1.2.提醒
5.1.2.1.Redis节点出现故障,发送通知
5.1.3.自动故障迁移
5.1.3.1.当一个Master不能工作时,将失效Master的一个Slave升级为Master,并让其他的Salve改为复制新的Master
5.1.3.2.客户端连接失效Master时,集群向客户端返回新的Master地址,使现在的Master替换失效的Master
5.1.3.3.Master和Slave服务器切换后,配置文件会进行更新
5.2.原理分析
5.2.1.1、哨兵向所有节点发送PING命令
5.2.2.2、若某实例在指定时间未响应,则该实例被该哨兵标记为主观下线(SDOWN)
5.2.3.3、监视该Master的哨兵发送消息确认Master进入了主观下线状态
5.2.4.4、足够数量的哨兵确认后,该实例进入客观下线状态(ODOWN)
5.2.5.5、哨兵正常以10秒的间隔想集群服务器发送INFO消息,若某Master下线,则向从服务器的INFO发送间隔改为1秒
5.2.6.6、若没有足够数量的哨兵确认Master服务器下线,则Master的主观下线状态移除。
5.2.7.7、若Master服务器重新向哨兵发送的PING命令返回回复,则Master的主观下线状态移除。
6.主从复制
6.1.配置
6.1.1.主:无需操作
6.1.2.从:slaveof
6.2.原理
6.2.1.全量同步和增量同步
6.2.2.第一次连接全量同步
6.2.3.断线重连master根据runid是否一致触发全量同步或者增量同步
6.2.4.其他情况增量同步
6.3.全量同步
6.3.1.1、同步快照阶段
6.3.1.1.Master创建并发送快照给Slave
6.3.1.2.Slave载入并解析快照
6.3.1.3.Master同时将新的写命令写入缓存区
6.3.2.2、同步写缓冲阶段
6.3.2.1.Master向Slave同步缓冲区的写操作命令
6.3.3.3、同步增量阶段
6.3.3.1.Master向Salve同步写操作命令
6.4.增量同步
6.4.1.Salve完成初始化正常工作时,Master同步写操作的过程
7.持久化
7.1.RDB
7.1.1.符合一定条件时Redis自动将内存中的数据进行快照保存到硬盘
7.1.2.触发快照的时机
7.1.2.1.1、符合自定义的快照规则
7.1.2.2.2、执行save或bgsave命令
7.1.2.3.3、执行flushall命令
7.1.2.4.执行主从复制操作
7.1.3.快照过程
7.1.3.1.1、Redis调用系统fork函数复制一份当前进程的副本
7.1.3.2.2、父进程继续接收并处理命令,子进程将内存中的数据保存到硬盘的临时文件
7.1.3.3.3、子进程写完所有数据,使用临时文件替换旧的RDB文件,操作完成
7.1.4.优缺点
7.1.4.1.优点:提高redis的性能,仅fork一个子进程。如果数据集大,fork可能耗时久
7.1.4.2.缺点:一旦redis异常退出,会丢失最后一次快照后更改的所有数据。
7.2.AOF
7.2.1.默认不开启
7.2.2.触发时机
7.2.2.1.每执行一条更改命令,Redis都会将命令追加到硬盘中指定的aof文件