- 1、本文档共14页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
分布式缓存Redis使用方法
分布式缓存Redis 使用方法
作者:张小博,新炬网络技术专家。
缓存在系统中的作用:
1、少量数据存储,高速读写访问。通过数据全部in-momery 的方式来保证高速访
问,同时提供数据落地的功能,实际这正是Redis 最主要的适用场景。
2、海量数据存储,分布式系统支持,数据一致性保证,方便的集群节点添加/删除。
Redis3.0 以后开始支持集群,实现了半自动化的数据分片,不过需要smart-client 的
支持。
Redis 全角度介绍:
网络模型:Redis 使用单线程的 IO 复用模型,自己封装了一个简单的AeEvent 事
件处理框架,主要实现了epoll、kqueue 和select,对于单纯只有IO 操作来说,单线
程可以将速度优势发挥到最大,但是 Redis 也提供了一些简单的计算功能,比如排序、
聚合等,对于这些操作,单线程模型实际会严重影响整体吞吐量,CPU 计算过程中,整
个IO 调度都是被阻塞住的。
内存管理:Redis 使用现场申请内存的方式来存储数据,并且很少使用 free-list
等方式来优化内存分配,会在一定程度上存在内存碎片,Redis 跟据存储命令参数,会
把带过期时间的数据单独存放在一起,并把它们称为临时数据,非临时数据是永远不会
被剔除的,即便物理内存不够,导致 swap 也不会剔除任何非临时数据(但会尝试剔除
部分临时数据),这点上Redis 更适合作为存储而不是cache。
数据一致性问题:在一致性问题上,个人感觉 redis 没有 memcached 实现的好,
Memcached 提供了 cas 命令,可以保证多个并发访问操作同一份数据的一致性问题。
Redis 没有提供cas 命令,并不能保证这点,不过Redis 提供了事务的功能,可以保证
一串 命令的原子性,中间不会被任何操作打断。
支持的KEY 类型:Redis 除key/value 之外,还支持list,set,sorted set,hash 等
众多数据结构,提供了 KEYS 进行枚举操作,但不能在线上使用,如果需要枚举线上数
据,Redis 提供了工具可以直接扫描其dump 文件,枚举出所有数据,Redis 还同时提供
1
了持久化和复制等功能。
客户端支持:redis 官方提供了丰富的客户端支持,包括了绝大多数编程语言的客
户端,比如我此次测试就选择了官方推荐了Java 客户端Jedis.里面提供了丰富的接口、
方法使得开发人员无需关系内部的数据分片、读取数据的路由等,只需简单的调用即可,
非常方便。
数据复制:从 2.8 开始,Slave 会周期性(每秒一次)发起一个 Ack 确认复制流
(replication stream)被处理进度, Redis 复制工作原理详细过程如下:
1. 如果设置了一个Slave,无论是第一次连接还是重连到Master,它都会发出一
个SYNC 命令;
2. 当Master 收到SYNC 命令之后,会做两件事:
a) Master 执行BGSAVE:后台写数据到磁盘(rdb 快照);
b) Master 同时将新收到的写入和修改数据集的命令存入缓冲区(非查询类);
3. 当Master 在后台把数据保存到快照文件完成之后,Master 会把这个快照文件
传送给Slave,而Slave 则把内存清空后,加载该文件到内存中;
4. 而Master 也会把此前收集到缓冲区中的命令,通过Reids 命令协议形式转发给
Slave,Slave 执行这些命令,实现和Master 的同步;
5. Master/Slave 此后会不断通过异步方式进行命令的同步,达到最终数据的同步
一致;
6. 需要注意的是Master 和Slave 之间一旦发生重连都会引发全量同步操作。但在
2.8 之后,也可能是部分同步操作。
2.8 开始,当Master 和 Slave 之间的连接断开之后,他们之间可以采用持续复制
处理方式代替采用全量同步。
Master 端为复制流维护一个内存缓冲区(in-memory backlog),记录最近发送的复
制流命令;同时,Master 和Slave 之间都维护一个复制偏移量(replication offset)和
当前Master 服务器ID (Master run id)。当网络断开,Slave 尝试重连时
文档评论(0)