目录
💟这里是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文件即可。