https://www.cnblogs.com/leeSmall/p/8398401.html
版本号第二位为奇数,为非稳定版本(2.7、2.9、3.1)
第二为偶数,为稳定版本(2.6、2.8、3.0)
a. 数据放内存中是速度快的主要原因
b. C语言实现,与操作系统距离近
c. 使用了单线程架构,预防多线程可能产生的竞争问题
5〉持久化:发生断电或机器故障,数据可能会丢失,持久化到硬盘
6〉主从复制:实现多个相同数据的redis副本
7〉高可用和分布式:哨兵机制实现高可用,保证redis节点故障发现和自动转移
3. redis有哪些应用场景
1. 缓存:合理使用缓存加快数据访问速度,降低后端数据源压力
2. 排行榜:按照热度排名,按照发布时间排行,主要用到列表和有序集合
3. 计数器应用:视频网站播放数,网站浏览数,使用redis计数
4. 社交网络:赞、踩、粉丝、下拉刷新
5. 消息队列:发布和订阅
预设阀值:两种方式,默认为10毫秒
1,动态设置6379:> config set slowlog-log-slower-than 10000 //10毫秒10000微秒
使用config set完后,若想将配置持久化保存到redis.conf,要执行config rewrite
2,redis.conf修改:找到slowlog-log-slower-than 10000 ,修改保存即可
获取队列里慢查询的命令:slowlog get 查询返回的结构如下
pipeline是多条命令的组合,为了保证它的原子性
1. redis的简单事务,将一组需要一起执行的命令放到multi和exec两个命令之间,其中multi代表事务开始,exec代表事务结束
一、RDB持久化
RDB持久化把当前进程数据生成快照(.rdb)文件保存到硬盘的过程,有手动触发和自动触发
手动触发有save和bgsave两命令
save命令:阻塞当前Redis,直到RDB持久化过程完成为止,若内存实例比较大会造成长时间阻塞,线上环境不建议用它
bgsave命令:redis进程执行fork操作创建子线程,由子线程完成持久化,阻塞时间很短(微秒级),是save的优化,在执行redis-cli shutdown关闭redis服务时,如果没有开启AOF持久化,自动执行bgsave;
二、AOF持久化
针对RDB不适合实时持久化,redis提供了AOF持久化方式来解决
开启:redis.conf设置:appendonly yes (默认不开启,为no)
默认文件名:appendfilename "appendonly.aof"
流程说明:
1,所有的写入命令(set hset)会append追加到aof_buf缓冲区中
2,AOF缓冲区向硬盘做sync同步
3,随着AOF文件越来越大,需定期对AOF文件rewrite重写,达到压缩
4,当redis服务重启,可load加载AOF文件进行恢复
AOF配置详解:
appendonly yes //启用aof持久化方式
# appendfsync always //每收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用
appendfsync everysec //每秒强制写入磁盘一次,性能和持久化方面做了折中,推荐
# appendfsync no //完全依赖os,性能最好,持久化没保证(操作系统自身的同步)
no-appendfsync-on-rewrite yes //正在导出rdb快照的过程中,要不要停止同步aof
auto-aof-rewrite-percentage 100 //aof文件大小比起上次重写时的大小,增长率100%时,重写
auto-aof-rewrite-min-size 64mb //aof文件,至少超过64M时,重写
如何从AOF恢复?
1. 设置appendonly yes;
2. 将appendonly.aof放到dir参数指定的目录;
3. 启动Redis,Redis会自动加载appendonly.aof文件。
其实整个过程只需要一个哨兵节点来完成,首先使用Raft算法(选举算法)实现选举机制,选出一个哨兵节点来完成转移和通知
概括:
rdb:手动和自动
手动:save 阻塞当前clent端请求
bgsave 异步 fork一个子进程 处理
自动:配置策略:900 1,300,1 每隔900,300 执行bgsave
aof:先到缓存 再到磁盘
有三种:everySec 每秒(默认) always 一直, no 30s
aof过大怎么办 重写机制
配置策略:大小 百分比 例子:auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb
合并重复命令 减少命令记录 例子:set key1 001 , set key1 002, set key1 003。那优化的结果就是将前两条去掉
rdb 恢复数据较快 数据丢失
aof 文件很大 恢复速度慢