Redis

Redis

1.Redis简介

介绍:redis是一个开源的使用ANSIC语言编写,遵循BSD协议、支持网络,可基于内存亦可持久化的日志型,Key-Value数据库,redis是一个非关系型数据库(Nosql数据库)。

2.Redis支持的数据类型

1.String字符串类型
	最基本的数据类型
	作用:做一个复杂的计数功能的缓存
2.Hash(哈希类型)
	value存放结构化对象
	作用:单点登陆,存储用户信息,设置缓存过期时间
3.List(列表类型)
	作用:(1)做简单的消息队列功能
		(2)用lrange命令,做基于redis的分页功能
4.set类型
	存放的是不重复的类型
	作用:全局去重
5.sorted set类型
	基于set类型,存在权重参数
	作用,做排行榜类型的应用

3.Redis持久化

概念:持久化就是把内存的数据写入到本地磁盘中去,防止服务器宕机后内存数据丢失
redis持久化提供了两种方式,分别为RDB和AOF,其中RDB为默认持久化方式
	RDB:
		存在两个核心函数 rdbsave(生成RDB文件)和rdbloadI(从文件加载内存)
	AOF:
		每当执行服务器(定时任务)或者函数时flushAppendOnlyFile函数都会被调用,这个函数执行一下两个工作
		1.weite。根据条件,将aof-buf中的缓存写入到AOF文件中
		2.save。根据条件,调用fsync或fdatasync函数,将AOF文件保存到磁盘上

AOF和RDB的并比较

  1. aof文件比rdb文件更新频率高,优先使用AOF还原数据
  2. aof比rdb更安全且更大
  3. rdb性能比aof好
  4. 如果同时开启aof和rdb,则优先加载aof(原因:aof更新频率比rdb高,数据还原更准确。)

redis通信协议

redis通信协议是RESP协议

RESP协议是redis客户端和服务端之间的通信协议
特点:实现简单,快速解析,可读性好
在RESP中,一些数据的类型通过第一个字节可以进行判断

单行回复:回复的第一个字节是“+”
错误信息:回复的第一个字节是“-”
整形数字:回复的第一个字节是“:”
多行字符串:回复的第一个字节是“$”
数组:回复的第一个字节是“*”

可根据回复的第一个字节来判断类型

Redis的架构模式

  1. 单机版
    Redis_第1张图片
    客户端与redis直接连接

    特点:	简单,明了
    问题:	1.内存容量有限	2.处理能力有限	3.无法高可用
    
  2. 主从复制
    存在主服务器和从服务器,将所有的数据从主服务器同步到从服务器上,只要主从服务器连接正常,主从服务器的数据就会相同。
    Redis_第2张图片

    特点:1.存在主从服务器的结构	2.主从服务器在连接正常的情况下数据相同	3.降低了主服务器的读压力
    问题:1.无法保证高可用	2.没有解决主服务器的写压力
    
  3. 哨兵
    哨兵模式是一个分布式系统中监控redis主从服务器,并在主从服务器下线时进行自动故障迁移

    三个特性:
    	1.监控:哨兵会不断的监控主从服务器之间连接是否正常
    	2.提醒:当哨兵监控到主服务器或者从服务器出现故障时,可以通过管理员或者其他的应用提醒并发送通知
    	3.故障自动迁移:当哨兵发现主服务器发生故障时,哨兵会开始一次自动的故障迁移,使从服务器成为主服务器运作。
    

Redis_第3张图片

特点:1.保证了高可用		2.可以监控各个节点	3.自动故障迁移
问题:1.主从模式之间的转换需要时间,在此时间内有可能导致丢失数据
		2.没有解决主服务器的写压力
  1. 集群(proxy型)
    运用twemproxy代理服务器
    Redis_第4张图片

    特点:1.拥有多种算法		2.支持失败节点自动删除	
    		3.后端sharding分片逻辑对业务透明,业务方面的读写方式和操作单个redis
    问题:1.增加了新的代理方式,高可用需要自行维护
    		2.自动故障迁移需要自己实现,其本身不能支持故障转移可扩展性差,进行扩容都需要手动干预
    
  2. 集群(直连型)
    采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点相连接
    Redis_第5张图片

    特点:
    	1.无中心结构:不存在哪个节点影响性能,少了代理层
    	2.数据按照slot存储分布在多个节点,节点间数据共享,可动态调整数据分布
    	3.可扩展性:可线程扩展到1000个节点,节点可动态添加或删除
    	4.高可用性:部分节点不可用时,集群仍可用,通过增加slave做备份数据副本
    	5.实现故障自动迁移,节点之间通过gossip协议交换状态信息,用投票的方式完成有从到主的角色提升。
    问题:
    	1.资源隔离性较差,容易出现互相影响
    	2.数据通过异步复制,不保证数据的强一致性。
    

你可能感兴趣的:(Redis,redis)