1.redis的相关介绍
Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链
表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并
集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为
了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并
且在此基础上实现了master-slave。
2.redis的持久
Redis是一个支持持久化的内存数据库,也就是说Redis需要经常将内存中的数据同步到磁盘来保证持久化。
Redis支持两种持久化方式,一种是Snapshotting(快照)也是默认方式,另一种是Append-Only File
(缩写AOF)的方式。
(1)Snapshotting(RDB)机制:
在某个时间点保存一个完整的数据快照,运行原理:
①Redis通过fork(分支)产生子进程;
②父进程继续处理client请求,子进程负责将快照写入临时文件
(2)Append-Only File(AOF)机制:
每一个写操作,将写入log文件,用于数据恢复,运行原理:
① Redis 通过fork一个子进程
②父进程继续处理client请求,子进程把AOF内容写入缓冲区;
③子进程写完退出,父进程接收退出消息,将缓冲区AOF写入临时文件;
④临时文件重命名成appendonly.aof,原来文件被覆盖,整个过程完成。
开发步骤:(编辑redis.conf文件)
appendonly yes #启动AOF机制
appendfsync always #每次收到写命令就立即强制 写入磁盘,最慢的,但是保证完全的持久化,不推荐使用
appendfsync everysec #每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐
appendfsync no #完全依赖os,性能最好,持久化没保证。
(3)Snapshotting与AOF的对比:
Snapshotting
优势:
1、RDB产生的文件小。
2、RDB恢复快,并且简单,例如你可以快
速的将RDB文件传输到其他主机,做数
据的恢复。
3 、在进行RDB备份的时候,主进程仅仅需
要创建一个子进程,所有的I/O操作都
由子进程完成。
Snapshotting缺陷:
1、不能完全保证数据安全,在两个备份点之间可能会发生数据丢失
2、当数据量很大时,创建子进程可能会是一个非常耗时
的操作,甚至可能需要1秒,在这个期间,
Redis无法向客户端提供服务。
aof优势:
1、数据的备份粒度更小,数据安全性更高。
2、AOF只会对日志文件进行追加操作,不
会修改已经写好的内容。即使在掉电的
情况下,AOF日志仍然是可用的
aof缺陷:
1、AOF文件通常比相同的数据集的RDB文件更大。
2、AOF写日志可能会很慢,这跟fsync的机制有关。
总结 :快照易丢失数据,AOF模式较为安全,但日志重写时磁盘io开销大,容易导致服务器性能严重下降,
并且需要足够的物理内存,这个比较危险,所以在高性能服务器上一般是用主从复制(集群)来进行持久化。
3.redis的集群操作和session管理
这部分操作较多,网上教程很多,有时间单独整理,先略过.......
4.redis的相关面试总结
大神的帖子网上很多,我就无耻的把一个大神写的链接拿过来,如下:
书到用时方恨少,努力学习,愿我们的努力不负所望,加油,每一个爱学习的人们!