Redis

1.Redis介绍:

Redis是C语言开发的开源高性能,非关系型的key-value存储型数据库;可以用在数据库,缓存,消息中间件等.

优点:

纯内存操作,性能强,每秒10万次读写速度,最快的key-value数据库;

支持事务支持持久化;

单线程操作,避免上下文频繁切换;

非阻塞IO实现了多路复用,多路复用指的是单线程监控多i/o状态来管理,可高并发

缺点:

 双写一致性问题,缓存的数据和数据库数据不一致时,客户得到的数据就不正确了,

解决:更新数据库时,删除缓存或使用消息队列

并发竞争问题,多个系统同时修改同一个key的value值,

解决:准备分布式锁,有锁才可操作

缓存雪崩问题:指大批key同时失效,又来一批请求,导致数据库连接异常,

解决:设置随机失效时间,或搭建Redis集群,或使用互斥锁(缓存时效时,获得锁,然后再访问数据库,没得到锁则休眠后重试)

缓存击穿问题:指故意请求不存在的数据,导致请求堆压,出现数据库连接异常,

解决:互斥锁,或异步更新策略(key是否有值都直接返回,value中维护缓存时效时间,时效自动异步更新数据库数据到缓存)

2.Redis中的存储结构:

String:字符串,最基本的存储类型,key-value,二进制安全,容量最大512MB

Hash:散列,是一个key-value集合,特别适合存储对象;每个Hash最大存232-1键值对(40多亿)

List:列表,最简单的字符串列表,按插入顺序排序,可插入到头或尾,最大存储232-1元素,(每个列表40亿)

Set:集合,string类型无序集合,最大成员232-1,40多亿成员

Zset(Sorted set):string类型有序集合,不允许重复,每个成员管理一个double类型分数,通过分数排序,zset分数可以重复

3,Redis持久化:

一种持久化方式为RDB:将Redis中数据生成快照保存到磁盘,下次启动加载到内存,可能丢数据,但速度快,CPU消耗少

二种持久化方式为AOF:将操作Redis的写操作的命令都记录静磁盘,下次启动,再执行一遍,这种方式恢复数据的完整度高,但速度慢,消耗相对大

RDB和AOF也可以同时使用,此时会优先使用AOF,因为AOF恢复的数据完整度更高

4.Redis集群:

主从复制:

从服务器连接主服务器-->从服务发送SYNC同步命令-->主服务器接收到命令生成快照,发送给从服务器,期间继续记录写命令-->从服务器载入快照,完成同步-->接下来接收主服务器写命令,执行命令同步数据,主服务器执行一条,从服务器执行一条

    

优点:读写分离,分载master同步压力,非阻塞方式提供服务,同步期间如果查询,返回同步之前的数据

缺点:不具备自动容错和恢复功能,不管主机还是从机宕机都会使得部分请求失败,需要重启或受切换前端ip,如果从机为及时同步数据到主机,切换ip会导致主从数据不一致,可用性降低;2 在线扩容很复杂

哨兵模式:

Redis2.8提供哨兵实现自动化系统监控和故障恢复,他的作用就是监控Redis系统的运行状态,实现了系统监控和故障恢复功能,主要作用:

1.监控主机和从机是否正常运行,

2.主服务器中断服务后,自动将从服务转换为主服务,来提供服务,

注意,哨兵模式是基于主从模式的

工作方式:

        1.每个哨兵每秒向整个集群的所有服务器和其他哨兵发送PING命令,看是否ping通,如果响应超过自己的设定时间,将进程标记状态为主观下线

        2.如果主服务器进入了主观下线状态,所有哨兵会每秒向改主服务器发确认,当足够数量哨兵都认为此服务器,确实是主观下线了,则标记此主服务器状态为客观下线

        3.每个哨兵向每个服务器发送INFO命令每10秒169/196次;当一个主服务器被标记为客观下线,哨兵会向此主服务器下的所有从服务器发送INFO命令(由原来10秒一次改为每秒一次)

        4.,如果没有足够数量哨兵同意该主服务器下线,此主服务器将移除客观下线状态,改为主观下线状态

        5.如果主服务器有恢复正常响应,哨兵将取消他的客观下线,恢复正常;

        6.否则此主服务器下线,重新自动推选新主机

好处:解决了容错自动回复恢复

缺点:在线扩容依然很复杂;

Redis-Cluster集群:

分布式存储,每个节点存储不同数据;每个节点相互关联,客户访问任一节点都可;半数节点检测确认某个节点时效,则该节点为fail

工作方式:

        每个节点上有插槽(slot)和集群插件(cluster),存放key时,Redis通过crc16算法得出结果,此结果对16384求余数,得到标号为0-16383之间的hash槽,通过此hash槽找到插槽对应的节点,存取操作

        引入主从模式,当主节点宕机就自动启用一个从节点作为主节点,当其他主节点ping此节点,有超过半数的主节点认为此节点宕机,那么确认此节点为宕机,集群将无法提供服务

Redis实现分布式锁:

Redis为单线程单进程模式,采用队列模式,将所有访问排队,实现串行访问,所以多客户对Redis的连接不存在竞争关系,可以使用SETNX命令实现分布式锁,当且仅当key不存在时,将key设置为预定值value,若key存在则SETNX什么都不会做

实现:

        1 使用SETNX命令获取锁,返回值为1表示设置成功,0表示失败(已存在key)

        2 为锁设置合理的过期时间

        3 使用后释放,DEL命令删除锁数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值