Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。可以满足很多应用场景。还提供了键过期,发布订阅,事务,流水线等附加功能。
Redis使用场景,手操项目架构实战 | 什么是Redis?:
c/c linux服务器开发高级架构师学习路线大纲:,学习视频点击:
存储缓存、投票、会话session、排行榜、计数器、发布订阅、消息队列等,其中最主要的使用场景就是存储缓存和会话Session。
当用作存储缓存的时候,如下图所示:
第一次访问的时候Redis数据库没有数据,因此先从MySQL中查询,然后再存到Redis内存数据库;第二次访问的时候直接就可以从Redis数据库中得到数据。
当Redis用作缓存会话Session时。如下图所示:
所有应用都是对Redis进行访问,这样分布式的应用程序共享一份会话Session。
三、快速安装Redis3.0以前》不支持集群》基于客户端实现
Redis3.0以后》集群(Redis Cluster)》基于服务端实现
Redis的安装很简单,如下所示:
$ wget http://download.redis.io/releases/redis-5.0.5.tar.gz
$ tar xzf redis-5.0.5.tar.gz
$ cd redis-5.0.5
$ make
关于安装的详细步骤可以参考(Mac版本,Linux上的安装步骤一致):Mac下安装Redis及Redis Desktop Manager
其余多种模式的部署请参考:Redis学习之4种模式实践及机制解析(单机、主从、哨兵、集群)
Redis安装目录下常见文件如下:
四、通讯原理概述Redis的速度是很快的,基于以下原因:
- Redis是单进程单线程运行,因此不存在线程切换造成的资源浪费(但是也是缺点,如果命令执行缓慢就会造成阻塞);
- Redis数据是是安装在硬盘上,但是运行数据是在内存中,访问速度远大于硬盘,避免大量IO。
- Redis 服务器是基于高效的IO多路复用,效率高。
Redis 服务器是一个事件驱动程序, 服务器处理的事件分为时间事件和文件事件两类。
- 文件事件:Redis主进程中,主要处理客户端的连接请求与相应。
- 时间事件:fork出的子进程中,处理如AOF持久化任务等。
由于Redis的文件事件是单进程,单线程模型,但是确保持着优秀的吞吐量,IO多路复用起到了主要作用。简单解释多路复用就是一个线程监听多个套接字,谁先有读写事件就处理谁,减少线程切换开销和IO阻塞,以提高CPU利用率。
Redis访问过程如下: