原创 java金融 java金融 3月7日java
Redis 是彻底开源免费的,遵照BSD协议,是一个高性能的key-value数据库。数据库
key-value类型的数据,同时还提供list,set,zset,hash、sorted set等数据结构的存储缓存
setnx 命令来实现,经过lua脚原本保证加锁是原子性的。数据结构
Redis 有两种持久化方案,RDB (Redis DataBase)和 AOF (Append Only File)
1.RDB
RDB 是 Redis 默认的持久化方案。在指定的时间间隔内,执行指定次数的写操做,则会将内存中的数据写入到磁盘中。即在指定目录下生成一个dump.rdb文件。Redis 重启会经过加载dump.rdb文件恢复数据。
优势:
适合大规模的数据恢复。
若是业务对数据完整性和一致性要求不高,RDB是很好的选择。
缺点:
数据的完整性和一致性不高,由于RDB可能在最后一次备份时宕机了。
备份时占用内存,由于Redis 在备份时会独立建立一个子进程,将数据写入到一个临时文件(此时内存中的数据是原来的两倍哦),最后再将临时文件替换以前的备份文件。因此Redis 的持久化和数据的恢复要选择在夜深人静的时候执行是比较合理的。
2.AOF
Redis 默认不开启。它的出现是为了弥补RDB的不足(数据的不一致性),因此它采用日志的形式来记录每一个写操做,并追加到文件中。Redis 重启的会根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工做。
优势:数据的完整性和一致性更高
缺点:由于AOF记录的内容多,文件会愈来愈大,数据恢复也会愈来愈慢。
总结
Redis 默认开启RDB持久化方式,在指定的时间间隔内,执行指定次数的写操做,则将内存中的数据写入到磁盘中。
RDB 持久化适合大规模的数据恢复但它的数据一致性和完整性较差。
Redis 须要手动开启AOF持久化方式,默认是每秒将写操做日志追加到AOF文件中。
AOF 的数据完整性比RDB高,但记录内容多了,会影响数据恢复的效率。
Redis 针对 AOF文件大的问题,提供重写的瘦身机制。
若只打算用Redis 作缓存,能够关闭持久化。
若打算使用Redis 的持久化。建议RDB和AOF都开启。其实RDB更适合作数据的备份,留后手。AOF出问题了,还有RDB。多线程
volatile-lru:从已设置过时时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
volatile-ttl:从已设置过时时间的数据集(server.db[i].expires)中挑选将要过时的数据淘汰
volatile-random:从已设置过时时间的数据集(server.db[i].expires)中任意选择数据淘汰
allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
no-enviction(驱逐):禁止驱逐数据dom
一、彻底基于内存,绝大部分请求是纯粹的内存操做,很是快速。数据存在内存中,相似于HashMap,HashMap的优点就是查找和操做的时间复杂度都是O(1);
二、数据结构简单,对数据操做也简单,Redis中的数据结构是专门进行设计的;
三、采用单线程,避免了没必要要的上下文切换和竞争条件,也不存在多进程或者多线程致使的切换而消耗 CPU,不用去考虑各类锁的问题,不存在加锁释放锁操做,没有由于可能出现死锁而致使的性能消耗;
四、使用多路I/O复用模型,非阻塞IO;
五、使用底层模型不一样,它们之间底层实现方式以及与客户端之间通讯的应用协议不同,Redis直接本身构建了VM 机制 ,由于通常的系统调用系统函数的话,会浪费必定的时间去移动和请求;分布式