Redis学习笔记(2)
一、配置文件(部分)
1. UNITS(单位)
数据单位
2. INCLUDES(包含)
可以包含其他配置文件,而redis.conf作为总的配置文件
3. NETWORK(网络配置)
-网络端口的绑定
-tcp-backlog 在高并发的环境下需要高的backlog值来避免慢客户端连接问题
-tcp-keepalive 连接存活的检查,即心跳机制,默认300s
4. GENERAL(通用配置)
-loglevel 日志水平;默认notice
5. SNAPSHOTTING(快照)
与RDB持久化有关
6. APPEND ONLY MODE
与AOF持久化有关
7.REPLICATION (复制)
与备份有关
8. SECURITY(安全)
主要是密钥相关
9. CLIENTS(客户端)
设置最大连接的客户数
10. MEMORY MANAGEMENT(内存管理)
- 设置最大的内存容量;
- 缓存过期策略:当内存满了,需要配合maxmemory-policy策略进行处理,可以通过一些策略移除一些数据;默认设置不移除。
#设置最大的内存容量
# maxmemory <bytes> # MAXMEMORY POLICY
# 内存容量超过maxmemory后的处理策略。
# lru 最近最少使用算法
#volatile-lru:在设置过期时间的key中使用lru算法进行数据的移除
#volatile-random:在设置过期时间的key中随机移除
#volatile-ttl:在设置过期时间的key中,根据ttl移除最快过期的key
#allkeys-lru:利用LRU算法移除任何key。
#allkeys-random:随机移除任何key。
#noeviction:不移除任何key,只是返回一个写错误;正常的生成环境中不可采用。
#上面的这些移除策略,如果没有合适的key可以移除,对于写命令会返回错误;这种情况下,redis将不再接收写请求,只接收get请求。 # lru检测的样本数,
# maxmemory-samples # 是否开启salve的最大内存,默认yes
# replica-ignore-maxmemory yes
11. LAZY FREEING(惰性释放)
非阻塞的方式释放内存
12. REDIS CLUSTER(集群)
redis集群的配置
二、数据持久化
指的是将内存中的数据写入到磁盘中,以实现持久化存储;当要恢复数据时,加载相应的文件以恢复内存数据。
有两种持久化方式,分别是RDB(Redis DataBase)和AOF(Append Only File)。
1. RDB
含义:指定时间间隔内将内存中的数据(即快照)写入到磁盘中,恢复时只需要将快照直接读到内存上,以实现数据的加载;是Redis默认的持久化方式。
触发方式:手动触发和自动触发。
- 手动触发:通过save指令和bgsave指令可以手动触发;其中save是阻塞型的,bgsave是非阻塞型的,异步的,redis会fork一个子进程进行持久化,客户端仍然可以进行IO操作。
- 自动触发:通过配置文件,自动触发,在conf文件的SNAPSHOTTING部分设置,格式为 save [seconds] [changes] 参数代表在多少时间内数据进行了多少次变动,则会触发持久 化。默认的触发配置:save 900 1 和 save 300 10 和 save 60 10000
保存的文件:dump.rdb 可以设置保存目录,默认会保存到工作目录下
自动触发的save:
Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。
整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能。
优缺点:
适合于大规模数据的恢复,且对于数据恢复的完整性不是非常敏感;rdb方式要比AOF方式更加的高效,数据恢复性能要远高于aof;
rdb的缺点是最后一次持久化后的数据可能丢失;持久化时会fork一个子进程,属于重量级操作,导致内存消耗过大。
其他设置:
rdbcompression 压缩,LZF
rdbchecksum 用CRC64算法进行数据校验,默认开;会消耗10%的cpu性能。
注意:如果Flushall会自动触发生成空的dump.rdb文件,就无法通过dump.rdb恢复原有的数据。shutdown也会触发持久化,生成rdb文件。
2. AOF
含义:以独立日志的方式记录每次写命令, 重启时再从前到后重新执行aof文件中的命令达到恢复数据的目的;默认不开启。
保存的文件:appendonly.aof
AOF的持久化类型(appendfsync):
always:每条写指令出现后即进行记录;性能较差。
everysec:每秒进行记录,是异步的持久化;默认采用。
no:不进行持久化。
AOF的修复:如果AOF的记录出现错误,可以用指令:redis-check-aof --fix进行修复。同理对rdb。
重写机制:
当aof文件超过某一个阈值,Redis就启动重写机制对文件进行压缩,只保留可以恢复数据的最小指令集。通过重写,可以时aof文件变小,降低了文件占用空间且更快地被Redis加载。阈值可以在conf文件中进行设置,即auto-aof-rewrite-percentage和auto-aof-rewrite-min-size。也可以手动触发,通过bgrewriteaof指令。
重写原理:
Redis会fork一个子进程进行重写过程;AOF重写并不需要原有AOF文件,而是通过读取服务器当前的数据库状态来实现的,过期的数据不予考虑。通过遍历所有数据库的所有的键,采用set、rpush等指令生成最小指令集的aof文件,并替换掉原有的aof文件,从而实现重写。
优缺点:
对比RDB方式,AOF更加实时,对数据的完整性支持更好,在最恶劣的情况下只会丢失不超过2s的数据;在两种方式同时存在的情况下,redis优先采用AOF进行恢复。
AOF文件要远大于RDB文件,且AOF的运行效率比RDB低,恢复速度比RDB慢。
3. 使用
- 因为RDB文件只用作后备用途,建议只在Slave上持久化RDB文件,而且只要15分钟备份一次就够了,即只保留save 900 1这条规则。
- 如果Enalbe AOF,好处是在最恶劣情况下也只会丢失不超过两秒数据,启动脚本较简单只load自己的AOF文件就可以了。代价一是带来了持续的IO,二是AOF rewrite的最后将rewrite过程中产生的新数据写到新文件造成的阻塞几乎是不可避免的。只要硬盘许可,应该尽量减少AOF rewrite的频率,AOF重写的基础大小默认值64M太小了,可以设到5G以上。默认超过原大小100%大小时重写可以改到适当的数值。
- 如果不Enable AOF ,仅靠Master-Slave Replication 实现高可用性也可以。能省掉一大笔IO也减少了rewrite时带来的系统波动。代价是如果Master/Slave同时倒掉,会丢失十几分钟的数据,启动脚本也要比较两个Master/Slave中的RDB文件,载入较新的那个。
Redis学习笔记(2)的更多相关文章
- redis 学习笔记(6)-cluster集群搭建
上次写redis的学习笔记还是2014年,一转眼已经快2年过去了,在段时间里,redis最大的变化之一就是cluster功能的正式发布,以前要搞redis集群,得借助一致性hash来自己搞shardi ...
- Redis学习笔记~目录
回到占占推荐博客索引 百度百科 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合). ...
- Redis学习笔记4-Redis配置详解
在Redis中直接启动redis-server服务时, 采用的是默认的配置文件.采用redis-server xxx.conf 这样的方式可以按照指定的配置文件来运行Redis服务.按照本Redi ...
- Redis学习笔记7--Redis管道(pipeline)
redis是一个cs模式的tcp server,使用和http类似的请求响应协议.一个client可以通过一个socket连接发起多个请求命令.每个请求命令发出后client通常会阻塞并等待redis ...
- Redis学习笔记一:数据结构与对象
1. String(SDS) Redis使用自定义的一种字符串结构SDS来作为字符串的表示. 127.0.0.1:6379> set name liushijie OK 在如上操作中,name( ...
- Redis学习笔记之ABC
Redis学习笔记之ABC Redis命令速查 官方帮助文档 中文版本1 中文版本2(反应速度比较慢) 基本操作 字符串操作 set key value get key 哈希 HMSET user:1 ...
- (转)redis 学习笔记(1)-编译、启动、停止
redis 学习笔记(1)-编译.启动.停止 一.下载.编译 redis是以源码方式发行的,先下载源码,然后在linux下编译 1.1 http://www.redis.io/download 先 ...
- Redis学习笔记(二)-key相关命令【转载】
转自 Redis学习笔记(二)-key相关命令 - 点解 - 博客园http://www.cnblogs.com/leny/p/5638764.html Redis支持的各种数据类型包括string, ...
- Redis学习笔记(三)Redis支持的5种数据类型的总结
继续Redis学习笔记(二)来说说剩余的三种数据类型. 三.列表类型(List) 1.介绍 列表类型可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的一段片段.列表类型内部是 ...
- Redis学习笔记(二)Redis支持的5种数据类型的总结之String和Hash
引言 在Redis学习笔记(一)中我们已经会安装并且简单使用Redis了,接下来我们一起来学习下Redis支持的5大数据类型. 简介 Redis是REmote DIctionary Server(远程 ...
随机推荐
- #if 和#ifdef的区别
转自:https://blog.csdn.net/zhangchiytu/article/details/7563329 先看个例子:#define TARGET_LITTLE_ENDINA 1#de ...
- 图论--2-SAT--HDOJ/HDU 1824 Let's go home
Problem Description 小时候,乡愁是一枚小小的邮票,我在这头,母亲在那头. -- 余光中 集训是辛苦的,道路是坎坷的,休息还是必须的. ...
- 在Vue中使用iview的Select控件实现一个多级选项列表
前言 今天项目要实现一个多级选项列表,发现iview官网上没有写这个例子,于是自己就实现了,如果对你有帮助请点个赞 ‘ * ’!! 解决方法:下面我们就来使用V-for 来定义一个二级选项列表 ,代码 ...
- Lowest Common Ancestor of a Binary Search Tree(树中两个结点的最低公共祖先)
题目描述: Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in ...
- Scrapy+selenium爬取简书全站
Scrapy+selenium爬取简书全站 环境 Ubuntu 18.04 Python 3.8 Scrapy 2.1 爬取内容 文字标题 作者 作者头像 发布日期 内容 文章连接 文章ID 思路 分 ...
- 【GISER&&规划】我这二三年
从从参加工作到现在,已经接近三年了.在这不长不短的时间里,我的职业规划犹如正余弦函数一样变化,一直游离在前端和后端之间. 第一年入职,被安排维护和拓展一套基于JAVA实现的地图瓦片生产工艺程序,不算复 ...
- Hexo+GitHub Actions 完美打造个人博客
Hexo简介 Hexo是一款基于Node.js的静态博客框架,依赖少易于安装使用,可以方便的生成静态网页托管在GitHub和Coding上,是搭建博客的首选框架.大家可以进入hexo官网进行详细查看, ...
- ssh暴力破解解决方案(Centos7更改端口)
服务器默认ssh远程连接端口为22端口,通常通过22远程连接的话,容易有ssh暴力破解的风险,给我们造成一定的损失.下面是更换ssh端口过程: 1.添加ssh端口 vim /etc/ssh/sshd_ ...
- 【Linux系列汇总】小白博主的嵌入式Linux实战快速进阶之路(持续更新)
我把之前在学习嵌入式Linux和工作中遇到问题和相关经验等,一起整理到这里,方便自己查阅和学习,温故而知新,如果能帮助到您,请帮忙点个赞: 本文的宗旨 嵌入式Linux 的项目通常需要一个团队来开发, ...
- STM32 串口USART DMA方式发送接收数据
硬件:stm32f103cbt6 软件:STM32F10x_StdPeriph_Lib_V3.5.0 文章目录 头文件 USART3_DR的地址 DMA的通道 DMA的中断 USART接收回调函数 头 ...