一、redis特性
1.redis 是什么?
redis是基于内存的可持久化的key-value数据库
2.redis数据结构类型?
value支持五种数据类型,字符串、字符串列表、字符串集合、有序集合、hashs
3.redis持久存储方式
redis两种持久化方式,RDB,和AOF
RDB: 将某一时刻的数据持久化到磁盘上,是一种快照式的持久方式, redis在进行持久化的过程中,会先将数据写入临时文件中,待持久化过程结束,会用这个临时文件,替换上次持久化的文件,正是这种特性,让我们可以随时来进行备份,因为快照文件总是完整可用的。
原理:rdb方式持久化时,redis会fork出一个子进程进行持久化,主进程不会进行任何io操作,确保redis性能不会因持久化而降低,如果对数据不敏感且需要大规模恢复数据,可以使用这种方式
AOF: 将执行过的写指令记录下来,在数据恢复时,将指令按照顺序在执行一边.
我们通过配置redis.conf中的appendonly yes就可以打开AOF功能.如果有写操作,就会追加到aof文件末尾,默认aof持久化策略是每秒钟fsync一次将数据从缓存区域刷到磁盘上,因为在这种情况下,redis仍然可以保持很好的处理性能,即使redis故障,也只会丢失最近1秒钟的数据.
问题1: aof文件坏了怎么办?
备份被写坏的AOF文件
运行redis-check-aof –fix进行修复
用diff -u来看下两个文件的差异,确认问题点
重启redis,加载修复后的AOF文件
问题: aof追加方式文件会越来越大怎么处理?
redis提供了rewrite重写机制,当aof文件大小超过设置阀值,就会启动aof文件压缩,保留恢复数据的最小指令集,在重写时也是先写入临时文件
rewrite原理:在从写开始时,任redis会fork出一个子进程,这个子进程会首先读取现有的AOF文件,并将其包含的指令进行分析压缩并写入到一个临时文件中.
与此同时,主工作进程会将新接收到的写指令一边累积到内存缓冲区中,一边继续写入到原有的AOF文件中,这样做是保证原有的AOF文件的可用性,避免在重写过程中出现意外,当“重写子进程”完成重写工作后,它会给父进程发一个信号,父进程收到信号后就会将内存中缓存的写指令追加到新AOF文件中,当追加结束后,redis就会用新AOF文件来代替旧AOF文件,之后再有新的写指令,就都会追加到新的AOF文件中了
4.redis主从
主从优点: 冗余备份,提升性能,读写分离,主从架构异步进行,不会降低处理性能
主从原理:
从服务器向主服务器发送sync指令,当主服务器接到指令后,就会调用bgsave指令创建子进程专门用来进行持久化工作,也就是将主服务器上的数据写入rdb。在数据持久化期间,主服务器将执行的写指令都缓存在内存中。
在bgsave指令完成后,主服务器会讲rdb文件发送给从服务器,从服务器将文件保存到磁盘上,然后读到内存中。这个动作完成后,主服务器会将这段时间缓存得到写指令在以redis协议发送给从服务器.
注: 即使有多个从服务器发送sync指令,主服务器也只会执行一次bgsave
5.redis事物
redis四个指令构成redis事物处理的基础
1.MULTI用来组装一个事务;
2.EXEC用来执行一个事务;
3.DISCARD用来取消一个事务;
4.WATCH用来监视一些key,一旦这些key在事务执行之前被改变,则取消事务的执行
二、redis架构
单机:
容量有限,处理能力有限,部署简单,适合开发,或者不重要的数据.
主从复制:
1、master/slave 角色
2、master/slave 数据相同
3、降低 master 读压力在转交给从库
问题:1、无法保证高可用;2、没有解决 master 写的压力
哨兵:
Redis sentinel 是一个分布式系统中监控 redis 主从服务器,并在主服务器下线时自动进行故障转移。其中三个特性
监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常
提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知
自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作
特点:
1、保证高可用
2、监控各个节点
3、自动故障迁移
缺点:主从模式,切换需要时间丢数据
没有解决 master 写的压力
集群(proxy)
Twemproxy 是一个 Twitter 开源的一个 redis 和 memcache 快速/轻量级代理服务器; Twemproxy 是一个快速的单线程代理程序,支持 Memcached ASCII 协议和 redis 协议。
特点:1、多种 hash 算法:MD5、CRC16、CRC32、CRC32a、hsieh、murmur、Jenkins
2、支持失败节点自动删除
3、后端 Sharding 分片逻辑对业务透明,业务方的读写方式和操作单个 Redis 一致
缺点:增加了新的 proxy,需要维护其高可用。
failover 逻辑需要自己实现,其本身不能支持故障的自动转移可扩展性差,进行扩缩容都需要手动干预
原文地址:https://blog.51cto.com/haoyonghui/2460847