redis
2017-01-06 09:03:00 0 举报
AI智能生成
Redis是一个开源的,基于内存的数据结构存储系统,可以用作数据库、缓存和消息中间件。它支持多种数据结构,如字符串、列表、集合、散列和有序集合等。Redis具有高性能、高可用性和易扩展性等特点,广泛应用于互联网领域。它具有丰富的特性,如持久化、事务、发布订阅、Lua脚本、管道和集群等。Redis采用客户端-服务器模型,支持多种编程语言的客户端库,如Python、Java、C++等。总之,Redis是一个强大且灵活的内存数据存储解决方案,适用于各种应用场景。
作者其他创作
大纲/内容
持久化
file snapshotting
fork子进程
子进程完成写临时文件
完成后替换原来的RDB
AOF
实时同步
每秒定时同步
依靠操作系统刷新同步
bgrewriteaof
redis创建一个子进程
子进程根据内存快照,往临时文件中写入重建数据库状态的命令
父进程继续处理client请求,除了将命令仍旧写入旧的aof文件外,同时将收到的命令缓存一下
当子进程将快照内容写入临时文件后,发信号给父进程,父进程将缓存的命令写入临时文件
父进程使用临时文件替换aof文件
集群
目标
高性能且可以扩展到1000个节点
不支持对value的merge操作
可接受的写安全性
会有一个时间窗口发生已经确认过的写数据丢失,特别是当client连接到的是一个小分区
可用性
只要失效主节点的从节点跟其他正常主节点在一个分区中整个集群就是可用的
Redis Cluster Bus
使用gossip协议来传播集群的配置信息
通过发送ping来检测其他节点是否正确工作
执行手工的failover
集群节点不会代理请求,而是通过重定向的方式让client连接到正确的节点, 因此client可以不保存集群状态
client可以缓存key和集群节点的对应关系
写安全性
主从节点间以异步方式复制数据
采用last failover win来规避value值的merge,即最新的主节点集群的数据就是最终的数据
存在丢失数据的时间窗口
客户端的写请求被主节点处理被获得了ACK,但是在同步到从节点前挂掉了,主节点长时间没有恢复导致数据丢失
某个主节点跟其他主节点断开连接后被failover, 但client端因为没有刷新路由配置仍然向这个旧的主节点写数据
可用性
使用replica migration技术避免孤儿master, 以抵御下一次节点失败带来的影响
性能
客户端维护集群配置的缓存,正常情况下可以连接正确的节点执行命令
异步复制方式使得client可以不等待从节点直接从主节点获取执行结果
数据分片,多实例使得性能随节点数量线性增长
0 条评论
下一页