Redis笔记
存储机制
Snapshot & AOF
Snapshot
将Data先存于内存,当数据累计达到某些给定的阈值,触发一次dump操作,将变化的Data一次性写入数据库文件(RDB文件)
AOF
-将Data先存内存,同时调用fsync来完成对本次写操作的日志记录,此日志揭露文件其实是一个基于Redis网络文件协议的文本文件
-AOF调用fsync也不是说全部无阻塞,在某些系统上可能出现fsync阻塞进程,但可以通过配置修改过来
-AOF关键配置:关于调用fsync追加日志的频率
两种频率设置:always、everysecond
以追加日志的方式持久化Data
存储模式性能 & 安全性比较
性能
Snapshot性能 > AOF
Snapshot:
1、采用二进制方式存Data,数据文件小,加载快
2、保存时,按照配置中的save策略存储
3、每次都是聚合很多数据批量存储,写入效率高
AOF:
1、实时模式/定时模式
2、存储频率高,效率低
安全
AOF > Snapshot
Snapshot:
1、基于累计批量思想,累计越多,写入效率越高
2、但若长时间不写入RDB,一旦Redis崩溃,数据丢失
AOF:
1、配置存储频率,可以最小化崩溃损失、高恢复率
Rewrite
AOF按照记录日志方式工作
日志不断扩大
Redis会根据配置合理触发Rewrite
Rewrite:
1、将日志文件中的所有Data都重写到另一个日志文件
2、重写时,对老日志文件中同一Key的多次操作,只保留最终值得那次操作记录到日志
内存优化
Redis内部有很多数据类型
1、数字 & String
存储“123”自动识别为数字,按数字存,节约空间
Redis内部会构建一个“数字池”,默认10000
数字池:
1)大小可配置
2)池中数字直接引用
2、复杂类型存储优化
1)Map、List、Set等集合特点为可大可小,查询复杂度O(1)
2)Redis内部采用紧凑格式存储(节约空间,毕竟是内存数据库),查询复杂度O(n)
紧凑格式代表:ZIPMAP
特点
高性能的 Key-Value DB
与其他 Key-Value 缓存产品比较的特点:
1)支持数据持久化,可将内存数据存磁盘,重启时再加载使用
2)支持List、Set、Zset、Hash等数据结构
3)支持数据备份,即 mater-slave 模式数据备份
Redis优势
1、性能极高
能读的速度=110000次/s
能写的速度=81000次/s
2、丰富的数据类型
支持二进制案例的 Strings、lists…
3、原子操作
Redis管道技术
可以在服务器相应时,客户端继续向服务器发请求,并最终一次性读取服务器端的响应
管道技术提升了Redis服务性能
Redis分区
是分割Data到多个Redis实例的处理过程
每个实例只存储key的一个子集
1、分区优势
1)利用多台计算机的内存 & 值,允许构造更大的DB
2)通过多核 & 多计算机,允许扩展计算能力
3)通过多计算机和网络适配器,允许扩展网络带宽
2、分区劣势
1)多Key操作通常不支持
例如不同实例上的Set无法求交
2)多Key事务不支持
3)数据处理复杂
4)增删复杂
Java使用Redis
确保安装了Redis服务 & Java Redis驱动
Redis事务
三个阶段:开始事务 > 命令入队 > 执行事务
Redis脚本
其脚本用Lua解释器执行脚本
补充
-阻塞相关:sleep、suspend/resume、wait/notify
-通讯的集中方式:
1)管道
2)socket
3)共享内存
-java进程间通信:
java没有共享内存机制,管道只能用于java线程间通信
-管道:
把程序的输出直接连到另一个程序的输入
单向,FIFO
1)有名管道:父子进程间
2)无名管道:任意两个进程间