Redis:Redis是一款开源的,高性能的key-value非关系型数据库软件。
- 特点:支持数据持久化,可将数据持久化到硬盘,重启时可再次加载进行使用;丰富的数据结构存储类型,不仅支持string,还支持list、hash、set、zset;Redis支持数据的备份,即master-slave模式的数据备份;redis利用队列技术将并发访问变为串行访问,消除了传统数据库串行控制的开销
- 使用Redis的优势:性能极高,Redis读的速度是110000次/s,写是81000次/s;丰富的数据类型:Redis支持二进制案例的string、list、hash、set、zset数据类型操作;原子操作,Redis每个操作都是原子性的,多个操作也支持事务,即原子性,通过使用multi和exec包含起来;丰富的特性,Redis还支持 publish/subscribe, 通知, key 过期等等特性。
- 相比于memcahed而言Redis的优势:memcahed所存储的值均是简单的字符串,Redis支持更多的数据类型;Redis的速度要比memcahed块;Redis可以持久化数据,而memcahed不能,宕机之后数据会丢失。
- Redis的数据淘汰机制(lru,random):
- volatile-lru:从已设置过期时间的数据集中选择最近追少使用的数据集进行淘汰
- volatile-ttl:从已设置过期时间的数据集中选择将要过期的数据集进行淘汰
- volatile-random:从已设置过期时间的数据集中随机淘汰一个数据集
- allkeys-lru:从所有数据集中选择最近最少使用的数据集进行淘汰
- allkeys-random:从所有数据集中随机淘汰一个数据集
- noeviction不做数据集的淘汰处理,当内存占用完后再添加数据集会报错
- Redis的持久化机制方式:快照(RDB)、日志(AOF)
-
快照:快照是一次全量备份,数据以二进制序列化方式进行存储,在存储上是紧凑存储的。触发机制分为自动触发和主动触发。
- 主动触发:
- save:会阻塞当前服务器,直到RDB完成为止,如果数据量大的话会造成长时间的阻塞。
- bgsave:就是background save,执行bgsave命令时Redis主进程会fork一个子进程来完成RDB的过程,完成后自动结束(操作系统的多进程Copy On Write机制,简称COW)。所以Redis主进程阻塞时间只有fork阶段的那一下。相对于save,阻塞时间很短。
- 自动触发:配置redis.conf,触发规则,自动执行;执行shutdown命令关闭服务器时,如果没有开启AOF持久化功能,那么会自动执行一次bgsave;主从同步(slave和master建立同步机制)。
- 优点:只有一个文件dump.rdb,方便持久化;容灾性好,一个文件可以保存到安全的磁盘;性能最大化,fork子进程来完成写操作,让主进程继续处理命令,所以是IO最大化。使用单独子进程来进行持久化,主进程不会进行任何IO操作,保证了redis的高性能);相对于数据集大时,比AOF的启动效率更高。
- 缺点:数据安全性低。RDB是间隔一段时间进行持久化,如果持久化之间redis发生故障,会发生数据丢失。所以这种方式更适合数据要求不严谨的时候。
- 主动触发:
-
AOF(Append-only file)持久化方式: 是指所有的命令行记录以redis命令请求协议的格式完全持久化存储,保存为aof文件。
- 调用方式:AOF默认是关闭的,通过redis.conf配置文件进行开启
- 主动触发:直接调用bgrewriteaof命令
- 自动触发:根据auto-aof-rewrite-min-size和auto-aof-rewrite-percentage参数确定自动触发时机
- 优点:AOF只是追加写日志文件,对服务器性能影响较小,速度比RDB要快,消耗的内存较少
- 缺点:AOF文件比RDB文件大,且恢复速度慢;数据集大的时候,比rdb启动效率低。
- 调用方式:AOF默认是关闭的,通过redis.conf配置文件进行开启
-