Redis(一)

Redis概述

引出缓存

下图为当前web业务中主流的业务架构:
Redis(一)
过程概述如下:

  • 图中的1和2表示,client(即客户端,比如浏览器)向缓存层发起请求,缓存层中有数据就直接返回。
  • 图中 3,4 和 5,6 这一过程表示,client向缓存层发起请求,当缓存层中不存在对应的数据(3),那么此时会发生穿透查询,直接去存储层拿数据(4),拿到数据后,再写会到缓存层(5),以避免下一次有相同请求而缓存中无需求数据的情况,最后正常返回给client(6)。
  • 图中 7,8 表示假如当意外发生,存储层直接挂掉,那么久让client直接和缓存层交互(7),不论有没有数据都会返回(8),可以作为一个暂时性的应急处理。

缓存中间件–Memcache和Redis的区别

Memchche(简单易用,代码层次类似于Hash)

支持简单数据类型
不支持持久化存储(一旦服务器宕机,那么数据就会丢失)
不支持主从同步
不支持分片(这玩意儿我也不太懂,先码上,有时间就研究研究)

Redis

数据类型丰富
支持数据磁盘持久化存储
支持主从同步(与MySQL一样)
支持分片(emmmmm…嗯)

Redis很快(100000+QPS)

QPS(Query Per Second),即每秒查询次数

能做到这么快的原因?

  • 完全基于内存,绝大部分请求是纯粹的内存操作,执行效率很高
  • 数据结构简单,对数据操作也简单
  • 采用得是单线程,单线程也能处理高并发请求,想要多核也可以启动多实例,这里的单线程是指,其主线程为单线程的,主线程包括IO事件的处理等。客户端的所有请求,都由这一个主线程串行处理,因此,多个客户端对于同一个键进行写操作,就不会存在并发的问题,避免了频繁的上下文切换和锁竞争,使得redis效率更高,能够处理高并发请求。
  • 使用多路I/O复用模型,非阻塞I/O

Redis中常用数据类型(常用的为前5种)

  • String:最基本的数据类型,二进制安全(即Redis的String可以包含任何数据,你如jpg图片)(底层为一个名为sds字符串,是一个结构体(非Java代码),包含了长度与可用空间)
  • Hash:String元素组成的字典,适合于存储对象
  • List:列表,按照String元素插入顺序排序
  • Set:String元素组成的无序集合,通过哈希表实现,不允许重复(Redis中为集合提供了求交集,并集等操作)
  • Sorted Set:通过分数来为集合中的成员进行从小到大的排序
  • 用于计数的HyperLogLog,用于支持存储地理位置信息的Geo

Redis的底层数据类型基础
Redis(一)