redis 简介
Redis是当前比较热门的NOSQL系统之一,是一个高性能的key-value类型的内存数据库,因为是纯内存操作,Redis的性能非常出色,是已知性能最快的Key-Value DB。它还可以将存储在内容中的数据持久化到硬盘中,防止数据丢失。
redis 优势
-
速度快,因为数据存在内存中,读的速度是 110000 次 /s, 写的速度是 81000 次 /s
-
支持丰富数据类型,支持string,list,set,hash,zset;
-
支持事务,操作都是原子性,对数据的更改要么全部执行,要么全部不执行
-
丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除
-
支持数据持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用;
-
支持数据的备份,即主从复制模式的数据备份
redis 和 memcache的区别
1、Redis和Memcache都是将数据存放在内存中,都是内存数据库。不过memcache还可用于缓存其他东西,例如图片、视频等等。
2、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。
3、虚拟内存--Redis当物理内存用完时,可以将一些很久没用到的value 交换到磁盘
4、过期策略--memcache在set时就指定,例如set key1 0 0 8,即永不过期。Redis可以通过例如expire 设定,例如expire name 10
5、分布式--设定memcache集群,利用magent做一主多从;redis可以做一主多从。都可以一主一从
6、存储数据安全--memcache挂掉后,数据没了;redis可以定期保存到磁盘(持久化)
7、灾难恢复--memcache挂掉后,数据不可恢复; redis数据丢失后可以通过aof,rdb恢复
8、Redis支持数据的备份,即master-slave模式的数据备份。
redis 为什么效率高
-
单线程,保证了每个操作得原子性,避免了线程上下文的切换和竞争
-
是内存中的,使用内存进行数据的读写,可以减少磁盘的 io
-
另外数据结构也帮了很大的忙,全程使用的是hash结构,读取速度快
-
Redis采用自己实现的事件分离器,效率比较高,内部采用非阻塞的执行方式,吞吐能力比较大
Redis 单线程如何处理那么多的并发客户端连接
采用的是IO多路复用技术
redis 采用网络IO多路复用技术来保证在多连接的时候,系统的高吞吐量。
多路-指的是多个socket连接,复用-指的是复用一个线程。多路复用主要有三种技术:select,poll,epoll。epoll是最新的也是目前最好的多路复用技术。
这里“多路”指的是多个网络连接,“复用”指的是复用同一个线程。采用多路 I/O 复用技术可以让单个线程高效的处理多个连接请求(尽量减少网络IO的时间消耗),且Redis在内存中操作数据的速度非常快(内存内的操作不会成为这里的性能瓶颈),主要以上两点造就了Redis具有很高的吞吐量。
redis 适用场景
-
数据结构不固定的半结构化数据
-
读写请求数量大且实时性要求高
-
后台RDB数据库压力大,需要缓存的情况
-
数据结构复杂,需要与应用程序内数据结构相对应的情况
redis 数据类型
String(字符串) , Hash(字典), List(列表), set(集合) , zset(有序集合)