Redis学习笔记一之简介

一 简介

        Redis是一款由Salvatore Sanfilippo开发,基于BSD开源协议,可基于内存也可进行持久化(可每隔一段时间将数据持久化到磁盘)的Key-Value结构的结构数据库,Redis的Value有字符串(String),列表(List),哈希(Map),集合(Set),有序集合(Sort Set)五种类型,Redis支持集群,可进行主从复制,具有非常快速的非阻塞首次同步,网络断开自动重连等功能

        Redis基于内存采用单线程操作,官方提供数据可以达到100000+的QPS,查询性能上不比采用单进程多线程同样基于内存KV结构的Memcached慢,Redis快主要基于以下三点

1:完全基于内存

2:数据结构简单,对数据的操作也简单

3:使用多路I/O复用模型

多路I/O复用模型:

多路 I/O 复用模型是利用select、poll、epoll可以同时监察多个流的 I/O 事件的能力,在空闲的时候,会把当前线程阻塞掉,当有一个或多个流有I/O事件时,就从阻塞态中唤醒,于是程序就会轮询一遍所有的流(epoll是只轮询那些真正发出了事件的流),并且只依次顺序的处理就绪的流,这种做法就避免了大量的无用操作。这里“多路”指的是多个网络连接,“复用”指的是复用同一个线程。采用多路 I/O 复用技术可以让单个线程高效的处理多个连接请求(尽量减少网络IO的时间消耗),且Redis在内存中操作数据的速度非常快(内存内的操作不会成为这里的性能瓶颈),主要以上两点造就了Redis具有很高的吞吐量。

个人觉得对多路I/O复用讲得比较好的文章 https://blog.csdn.net/tanswer_/article/details/70196139

二 Redis 持久化

redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到磁盘来保证持久化,这是相对memcache来说的一个大的优势。redis支持两种持久化方式,一种是 Snapshotting(快照)也是默认方式,另一种是Append-only file(缩写aof)的方式。 
Snapshotting      
快照是默认的持久化方式。这种方式将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。可以配置自动做快照持久 化的方式。我们可以配置redis在n秒内如果超过m个key被修改就自动做快照,下面是默认的快照保存配置
save 900 1  #900秒内如果超过1个key被修改,则发起快照保存
save 300 10 #300秒内容如超过10个key被修改,则发起快照保存

Append-only file

aof 比快照方式有更好的持久化性,是由于在使用aof持久化方式时,redis会将每一个收到的写命令都通过write函数追加到文件中(默认是 appendonly.aof)。当redis重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。当然由于os会在内核中缓存 write做的修改,所以可能不是立即写到磁盘上。这样aof方式的持久化也还是有可能会丢失部分修改。不过我们可以通过配置文件告诉redis我们想要 通过fsync函数强制os写入到磁盘的时机。

有三种方式如下(默认是:每秒fsync一次)

appendonly yes                //启用aof持久化方式

# appendfsync always      //每次收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用

appendfsync everysec      //每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐

# appendfsync no          //完全依赖os,性能最好,持久化没保证

猜你喜欢

转载自www.cnblogs.com/gzuminyi/p/9413416.html