目录

  • 一、Redis简介
  • 二、Redis优点
  • 三、Redis常用命令
  • 3.1 redis-cli
  • 3.2 redis-benchmark
  • 四、持久化
  • 4.1 持久化的分类
  • 4.2 RDB和AOF的优缺点
  • RDB的优势
  • AOF的优势
  • RDB的劣势
  • AOF的劣势
  • RDB的持久化配置
  • AOF的持久化配置


一、Redis简介

redis (remotedictionaryserver,远程字典型)是一个开源、使用C语言编写的nosql数据库
redis基于内存运行并支持持久化,采用key-value键值对的存储形式,是目前分布式架构中不可或缺的一环
redis服务器程序是单进程模型,也就是在一台服务器上可以同时运行多个redis进程,而redis的实际处理速度则是完全依靠于主进程的执行效率
若是在服务器上只运行一个redis进程,当多个客户端同时访问,服务器的处理能力会有一定程度的下降;
若是在同一台服务器上开启多个redis进程,redis会提高并发处理能力的会给服务器的cpu造成很大的压力
也就是说在实际生产环境中,需要根据实际的需求来决定开启多少个redis进程
若对高并发要求更高一些,可能会考虑在同一台服务器上开启多个进程;
若CPU资源比较紧张,采用单进程即可

二、Redis优点

  1. 具有极高的数据读写速度,数据读取的速度最高可达到11万次/秒,数据写入速度最高可达到8万次/秒
  2. 支持丰富的数据类型,不仅仅支持简单的key-value类型的数据,还支持strings、lists、hashes、sets以及ordered sets等数据类型操作
  3. 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用
  4. 原子性,redis所有操作都是原子性的
  5. 支持数据备份,即master-slave模式的数据备份
  6. redis作为基于内存运行的数据库,缓存时其最长应用的场景之一,除此之外,redis常见应用场景还包括:获取最新N个数据的操作、排行榜类应用、计数器应用、存储关系、实时分析系统、日志记录

三、Redis常用命令

Redis 软件提供了多个命令工具, 当 Redis 安装时, 所包含的软件工具会同时被安装到

系统中, 在系统中可以直接使用。 这些命令工具的作用分别如下所示。

  • redis-server:用于启动 Redis 的工具
  • redis-benchmark:用于检测 Redis 在本机的运行效率
  • redis-check-aof:修复 AOF 持久化文件
  • redis-check-rdb:修复 RDB 持久化文件
  • redis-cli:是 Redis 命令行工具
  • redis-setinel:是 redis-server 文件的软链接

3.1 redis-cli

  • set: 存放数据, 基本的命令格式为 set key value。
  • get: 获取数据, 基本的命令格式为 get key。
  • keys: 可以取符合规则的键值列表, 通常情况可以结合*、 ? 等选项来使用
  • exists:可以判断键值是否存在。
  • del:可以删除当前数据库的指定 key
  • type:可以获取 key 对应的 value 值类型
  • rename:是对已有 key 进行重命名, 其命令格式为: rename 源 key 目标 key。
  • renamenx:作用是对已有 key 进行重命名, 并检测新名是否存在。
    其命令格式与rename 的命令格式除命令关键字不同外基本相同, renamenx 源 key 目标 key。
    使用renamenx 命令进行重命名时, 如果目标 key 存在则不进行重命名
  • dbsize:查看当前数据库中 key 的数目

3.2 redis-benchmark

redis-benchmark 是官方自带的 Redis 性能测试工具, 可以有效的测试 Redis 服务的性
能。 基本的测试语法为 redis-benchmark [option] [option value]。

  • h: 指定服务器主机名。
  • p: 指定服务器端口。
  • s: 指定服务器 socket。
  • c: 指定并发连接数。
  • n: 指定请求数。
  • d: 以字节的形式指定 SET/GET 值的数据大小。
  • k: 1=keep alive 0=reconnect 。
  • r: SET/GET/INCR 使用随机 key, SADD 使用随机值。
  • P: 通过管道传输请求。
  • q: 强制退出 redis。 仅显示 query/sec 值。
  • csv: 以 CSV 格式输出。
  • l: 生成循环, 永久执行测试。
  • t: 仅运行以逗号分隔的测试命令列表。
  • I: Idle 模式。 仅打开 N 个 idle 连接并等待。

四、持久化

redis是一种高级key-value数据库
它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富
有字符串、链表、集合和有序集合
支持在服务器端计算集合的并、交和补集(等),还支持多种排序功能
所以redis也可以被看成是一个数据结构服务器
redis的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这被称为半持久化模式)
也可以把每一次的数据变化都写入到一个append only file (aof)里面(这被称为全持久化模式)
由于redis的数据库都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失,于是需要开启redis的持久化功能,将数据保存到磁盘上。
当redis重启后,可以从磁盘中恢复数据
redis提供两种方式进行持久化
一种是RDB持久化(原理是将redis在内存中的数据库定时dump到磁盘上的方式)
另一种是AOF(append only file)持久化,原理是将redis的操作日志以追加的方式写入文件

4.1 持久化的分类

RDB方式:以定时创建快照的方式获取某一时刻redis中所有数据的副本

  • RDB持久化是指在指定的时间间隔内将内存中的数据集合以快照的方式写入磁盘,实际操作过程是fork一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储
    AOF方式:将执行的写命令写到文件的末尾,以日志的方式来记录数据的变化
  • LAOF持久化以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录

4.2 RDB和AOF的优缺点

RDB的优势
  • 一旦采用该方式,那么整个redis数据库将只包含一个文件,这对于文件备份而言是非常完美的。比如,你可能打算每小时归档一次最近24H的数据,同时还要每天归档一次最近30天的数据
    通过这样的备份策略,一旦系统出现灾难性故障,我们可以非常容易的进行恢复
  • 对于灾难恢复而言,RDB是非常不错的选择。因为我们可以非常轻松的将一个单独的文件压缩后再转移到其它存储介质上
  • 性能最大化,对于redis的服务进程而言,在开始持久化时,它唯一需要的只是fork出子进程,之后再有子进程完成这些持久化的工作,这样就可以极大地避免服务进程执行IO操作
  • 相比于AOF机制,如果数据集很大,RDB的启动效率会更高
  • 适合大规模的数据恢复
AOF的优势
  • 该机制可以带来更高的数据安全性,即数据持久性。
    redis中的AOF提供了三种同步策略,即每秒同步,每修改同步和不同步。
    每秒同步,事实上也是异步完成的,其效率也是最高的,所欠缺的时一旦系统出现宕机现象,那么会有一秒钟内的数据将会丢失,
    每修改同步,我们可以视为同步持久化,即每次发生的数据变化都会被立即记录到磁盘中,安全性最高,但是效率最低
  • 由于该机制对日志文件的写入操作时append模式,因此在写入过程中即使出现宕机现象,也不会破坏日志文件中已经存在的内容。如果在本次操作只是写入了一半数据就出现了系统崩溃问题,也不用担心,在redis下一次启动之前,我们可以通过redis-check-aof工具来帮助我们解决数据一致性的问题
  • 如果日志过大,redis可以自动启用rewrite机制。即redis以append模式不断地将修改的数据写入到老的磁盘文件中,同时redis还会创建一个新的文件用于记录此期间有哪些修改命令被执行。因此在进行rewrite切换时可以更好的保证数据安全性
  • AOF包含一个格式清晰、易于理解的日志文件,用于记录所有的修改操作。事实上,我们也可以通过该文件完成数据的重建
RDB的劣势
  • 如果想保证数据的高可用性,即最大限度的避免数据丢失,那么RDB将不是一个很好的选择。因为系统一旦在定时持久化之前出现宕机现象,此前没有来得及写入磁盘的数据都将丢失
  • 由于RDB是通过fork子进程来协助完成数据持久化工作的,因此,如果当数据集较大时,可能会导致整个服务器停止服务几百毫秒,甚至时1秒钟
  • 备份时占用内存
  • 数据的完整性和一致性不高
AOF的劣势
  • 对于相同数量的数据集而言,AOF文件通常要大于RDB文件。RDB在恢复在数据集时的速度比AOF的恢复速度要快
  • 根据同步策略的不同,AOF在运行效率上,往往会慢于RDB。总之,每秒同步策略的效率还是相对而言比较高的
RDB的持久化配置
save 900 1 
#在 900 秒(15 分钟)之后, 如果至少有 1 个 key 发生变化,则 dump 内存快照。
save 300 10 
#在 300 秒(5 分钟)之后, 如果至少有 10 个 key 发生变化,则 dump 内存快照。
save 60 10000 
#在 60 秒(1 分钟)之后, 如果至少有 10000 个 key 发生变化, 则dump 内存快照。
dbfilename dump.rdb 	
//rdb文件名称
dir /var/lib/redis/6379	
//rdb文件路径
rdbcompression yes
//进行压缩
AOF的持久化配置
700 appendonly yes	#开启
 701 
 702 # The name of the append only file (default: "appendonly.aof")
 703 
 704 appendfilename "appendonly.aof"		//aof文件名称
 729 appendfsync always	#一直进行同步,开启实时同步就把它开启
 730 #appendfsync everysec	#每秒进行同步
 731 # appendfsync no		#不进行同步
 796 aof-load-truncated yes		#忽略最后一条语句