定义
支持网络交互的、可基于内存也可持久化的key-value 存储系统,是跨平台的非关系型数据库(即NoSQL,Not Only SQL),也被人们称为数据结构服务器。
优势
性能强
在大并发,高负载的网站中必须考虑性能问题,redis数据库中的所有数据都存储在内存中。由于内存的读写速度远快于硬盘,因此Redis的的的在性能上对比其他基于硬盘存储的数据库有非常明显的优势。 我们在碰到需要执行耗时特别久,且结果不频繁变动的SQL,就特别适合将运行结果放入缓存,这样,后面的请求就去缓存中读取,请求使得能够迅速响应。
并发性
大并发的情况下,所有的请求直接访问数据库,数据库会出现连接异常。这个时候,就需要使用的的Redis的做一个缓冲操作,让请求先访问到的Redis的的,而不是直接访问数据库。
持久化
数据虽在内存,但是提供了持久化的支持,即可以将内存中的数据异步写入到硬盘中,同时不影响继续提供服务。持久化保证了断电或重启后,数据也不会丢失。因为Redis的存储分为内存存储、磁盘存储和log文件三部分,重启后,Redis可以从磁盘重新将数据加载到内存中,这些可以通过配置文件对其进行配置,正因为这样,Redis才能实现持久化。
数据结构丰富
string(字符串),list(链表),set(集合),zset(sorted set - 有序集合))和Hash(哈希类型,md5加密出来的那个串)
支持主从模式
可以配置集群,这样更利于支撑起大型的项目。
原子性
Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
为什么性能强
基于内存
绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)。
数据结构简单
对数据操作方便快捷。
单线程
避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,不会因死锁消耗大量性能。当然Redis6以后已经开始支持多线程了,比如后台删除等功能。
多路I/O复用模型,非阻塞IO
在空闲的时候,会把当前线程阻塞掉,当有一个或多个流有 I/O 事件时,就从阻塞态中唤醒,于是程序就会轮询一遍所有的流(epoll 是只轮询那些真正发出了事件的流),并且只依次顺序的处理就绪的流,这种做法就避免了大量的无用操作。 “多路”指的是多个网络连接,“复用”指的是复用同一个线程。在单个线程通过记录跟踪每一个Sock(I/O流)的状态来同时监听多个网络连接 IO, 相对于多进程、多线程切换的开销问题,IO 多路复用可以极大的提升系统效率。 I/O 复用模型能够阻塞多个 I/O 操作, 尽量多的提高服务器的吞吐能力。
Windows版本Redis
下载文件 解压后直接打开redis-cli.exe就能直接用了
|