一、系统中使用什么缓存1、少量数据存储,高速读写访问。所有数据都在内存中,用于保证高速访问,同时提供数据落地的功能。其实这才是Redis最重要的应用场景。2.海量数据存储,分布式系统支持,数据一致性保证,集群节点增删方便。Redis3.0后支持集群,实现数据半自动分片,但需要智能客户端支持。2、从不同角度详细介绍redis网络模型:Redis采用单线程IO多路复用模型,封装了一个简单的AeEvent事件处理框架,主要实现了epoll、kqueue和select。对于纯IO操作,单线程可以最大化速度优势,但是Redis也提供了一些简单的计算功能,比如排序,聚合等,对于这些操作,单线程模型实际上会严重影响整体的吞吐量。在CPU计算过程中,整个IO调度都是阻塞的。内存管理:Redis采用现场申请内存的方式存储数据,很少使用free-list等方式优化内存分配,一定程度上会造成内存碎片。数据单独存储在一起,称为临时数据。非临时数据永远不会被删除。即使物理内存不够用,swap也不会移除任何非临时数据(但会尝试移除一些临时数据),在这一点上,Redis更适合作为存储而不是缓存。数据一致性问题:关于一致性问题,个人感觉redis不如memcached。Memcached提供了cas命令,可以保证多个并发访问同一个数据操作的一致性。Redis没有提供cas命令,所以不能保证这一点,但是Redis提供了事务功能,可以保证一系列命令的原子性,中间不会被任何操作打断。支持的KEY类型:除了key/value,Redis还支持list、set、sortedset、hash等多种数据结构。它提供了用于枚举操作的KEYS,但是不能在线使用。如果需要枚举线上数据,Redis提供了工具直接扫描其dump文件,枚举所有数据。Redis还提供了持久化、复制等功能。客户端支持:Redis官方提供了丰富的客户端支持,包括大部分编程语言的客户端。比如本次测试我选择了官方的Java客户端Jedis。它提供了丰富的接口和方法,让开发者不需要关系内部的数据分片、读取数据的路由等,只需要简单的调用,非常方便。
