珞谈谈对Redis的理解
李Redis数据类型
李Redis持久化
RDB(Redis DataBase)默认
AOF(Append Only File)
这里是CS大白话专场,让枯燥的学习变得有趣!
没有对象不要怕,我们new一个出来,每天对ta说不尽情话!
好记性不如烂键盘,自己总结不如收藏别人!
珞谈谈对Redis的理解
说Redis之前不得不提一下NoSQL(Not only SQL),泛指非关系型数据库,是随着web2.0诞生的!与传统的MySQL、Oracle数据库不同,NoSQL的数据之间没有关系,并不单单是二维表格式存储,因此易于扩展,有很高的读写性能。
NoSQL分类:
键值(Key-Value)存储数据库:Redis、MemcacheDB。
文档存储数据库:MongoDB。
列存储数据库:Hbase。
图关系数据库:Neo4J。
现在我们知道Redis属于NoSQL中的KV存储数据库了,二话不说先翻译:Redis(Remote Dictionary Server)中文名:远程字典服务,也被称为结构化数据库,由C语言编写,支持多种语言API,支持持久化。读速度:110000次/s,写速度:81000次/s。
应用场景:内存存储、持久化、高速缓存、发布订阅系统、计时器、计数器(浏览量)等等。
李Redis数据类型
String:字符串。
List:列表,可构造成栈/队列的线性结构(逻辑结构),通过链表来实现(存储结构)。
Hash:哈希,key-map(field-value)。
Set:无序,无重复值的字符串集合。
Zset(Sorted Set):有序(关联score值排序),无重复值的字符串集合。
李Redis持久化
只要是内存数据库一定要有持久化操作,不然一断电内存数据就没啦!
RDB(Redis DataBase)默认
简单来说就是在主进程中岔(fork)一个子进程出来,共享主进程的所有内存数据,由子进程完成快照操作(类似虚拟机的备份),保存成dump.rdb文件,不影响主进程的运行。Redis是单线程的,直接在主进程上执行快照(save命令)会导致进程阻塞!将dump.rdb文件放到Redis启动目录下就可以在Redis启动时恢复数据啦!
触发快照:
key满足变化条件:
save 900 1 #每900秒(15分钟)至少有1个key发生变化,Redis就会自动触发BGSAVE命令创建快照。 save 300 10 #每300秒(5分钟)至少有10个key发生变化,Redis就会自动触发BGSAVE命令创建快照。 save 60 10000 #每60秒(1分钟)至少有10000个key发生变化,Redis就会自动触发BGSAVE命令创建快照。
bgsave/flushall命令。
退出Redis。
优点:适合大规模数据,对数据完整性要求不高,数据恢复快。
缺点:需要一定时间间隔容易丢失数据,fork进程时占用内存空间。
AOF(Append Only File)
简单来说就是把每个写操作都记录在appendonly.aof日志文件里,在Redis重启时,把AOF文件中记录的所有写操作顺序执行一遍来恢复数据。
一些必要的配置:
默认AOF是关闭的,需要手动yes:
appendonly yes
记录策略:
#appendfsync always # 每写入一条日志就进行一次fsync操作,数据安全性最高,但速度最慢(每次有数据修改发生时都会写入AOF文件) appendfsync everysec # 折中的做法,交由后台线程每秒fsync一次(每秒钟同步一次,该策略为AOF的缺省策略,可能丢失一秒钟数据) #appendfsync no # 不进行fsync,将flush文件的时机交给OS决定,速度最快(从不同步,高效但是数据不会被持久化)
重写AOF文件:
no-appendfsync-on-rewrite no ## Redis在每次AOF重写时,会记录完成重写后的AOF日志大小,当AOF日志大小增长了100%或文件大于64MB后,就要进行AOF重写。 auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb
优点: 文件完整性更高,如果AOF文件错误,可通过redis-check-aof工具修复,或手动修改AOF文件。
缺点:日志文件太大,数据恢复慢。
当两种持久化方式都开启时,优先载入AOF文件恢复数据。建议在从机上持久化RDB文件即可。



