Redis基础知识【一】

1. 概述

  Redis是一个C语言编写、开源、可持久化、高性能的非关系型(NOSQL)键值对数据库。
  Redis的Key只能是String类型,但是Value支持5种数据类型,字符串、List、Hash、Set、Zset。

1.1 Redis的优缺点

优点:
  (1). 读写性能高,读可达到11w/s,写可达到8.1w/s。
  (2). 支持持久化,支持AOF、RDB俩种持久化方式。
  (3). 支持事务。
  (4). 拥有多种数据结构。
缺点:
  (1). 不具备自动容错和恢复功能,当节点宕机,必须手动重启。
  (2). 当master节点宕机,宕机前可能会存在部分数据未同步到slave中, 此时 slave转为master节点,会出现数据不一致问题。

2. 数据类型及应用场景

  Redis有5种数据类,分别为String、Hash、List、Set、Zset

数据类型可存储的值操作应用场景
String字符串、整数、浮点数对整个字符串或字符串其中一部分执行操作,对整数和浮点数执行自增或自减操作做简单的键值对缓存
List列表从俩端压入或弹出元素,对单个或多个元素进行修剪,只保留一定范围内的元素存储一些列表型的数据结构,类似粉丝列表、文章评论列表之类的数据
Set无序集合添加、获取、移除单个元素;检查一个元素是否存在于集合中;计算交、并、差集;从集合里面随机获取元素交集、并集、差集的操作,比如交集,可以把俩个人的粉丝列表整一个交集
Hash包含键值对的无序散列表添加、获取、移除单个键值对;获取所有键值对;检查某个键是否存在结构化的数据,比如一个对象
Zset有序集合添加、获取、删除元素;根据分值范围或者成员来获取元素;计算一个键的排名去重并可以排序,如获取排名前几名的用户

3.Redis常用命令参考

  命令语法请参考官网手册:点击

4. Redis俩种持久化机制

4.1. 为什么要持久化

  Redis数据都在内存中,内存中的数据并不持久,在服务器宕机或重启时都会丢失。因此Redis想要永久存储数据,必须将数据持久化到磁盘中。

4.2. RDB持久化机制

  RDB: 是Redis DataBase的缩写,快照
  RDB持久化机制是Redis默认开启的,它每隔一段时间就会将内存中的全量数据以快照的形式,保存到磁盘中,对应产生的文件是dump.rdb。通过配置文件中save参数来定义快照的周期。

4.2.1. RDB持久化触发时机

  (1). save命令
   save命令不会fork子进程,直接使用主进程进行数据的持久化,此时主进程不会处理任何客户端的请求,因此该命令在生产环境中一般不会使用。save命令执行原理如下图
在这里插入图片描述
   save 命令基本语法如下:

redis 127.0.0.1:6379> save

  (2). bgsave命令
   Redis主进程执行fork操作创建子进程,RDB持久化过程由子进程负责,完成后子进程结束。主进程阻塞只发生在执行fork操作时,一般时间很短。基本上Redis内部所有的RDB操作都是采用bgsave命令。bgsave命令原理如下图:
在这里插入图片描述
   bgsave 命令基本语法如下:

redis 127.0.0.1:6379> bgsave

  (3). 自动触发
  自动触发的时机是在配置文件中配置的,自动触发时机到达后使用bgsave命令进行持久化。在redis.conf配置信息如下图:
在这里插入图片描述

4.2.2. RDB持久化机制的优缺点

  优点:
  (1). rdb文件相对于aof小,数据恢复快。
  缺点:
  (1). 数据的安全性低。RDB是间隔一段时间持久化数据,如果持久化过程中服务器宕机或重启,此时没有写入磁盘的数据都将丢失,所以该方式适用于对数据完整性和一致性要求不高的场景。

4.3 AOF持久化机制

  AOF(Append-only file)持久化,则是将Redis执行的每次写命令记录到日志文件中,当Redis重启时,从日志文件中恢复数据。
  当RDB与AOF同时开启时,优先选择从AOF中恢复数据,因为AOF中数据相比于RDB更加完整。

4.3.1. AOF持久化流程

在这里插入图片描述
  (1). 所有的写命令都会追加到aof_buf(缓存区)中。
  (2). AOF缓存区根据对应的策略向硬盘中做同步操作。
  (3). 随着AOF文件的增大,需要定期对AOF文件进行重写,达到压缩的目的。
  (4). 当Redis服务器重启的时候,可以加载AOF文件进行数据恢复。

4.3.2. AOF持久化触发时机

  AOF持久化默认是不开启的,需要修改配置文件的配置开启,同时还可以配置持久化的触发时机,配置说明如下:

appendonly yes #开启aof
appendfilename "appendonly.aof" #aof日志文件名称

#持久化触发时机
# appendfsync always  #每次写命令都触发一次持久化
appendfsync everysec  #每秒触发一次持久化
# appendfsync no      #不触发持久化

#配置重写触发机制
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 1g
#解释:当AOF文件大小是上次rewrite后大小的一倍且文件大于1G时触发一次重写。 

4.3.3 AOF持久化的优缺点

  优点:
  (1). 数据安全性高,一般AOF会每秒,通过一个后台线程执行一次同步操作,最多丢失一秒的数据。
  缺点:
  (1). AOF的日志文件比RDB文件大,因此数据恢复慢。
  (2). AOF同步的频率比RDB高很多,因此会降低Redis的QPS。

5. Redis事务

5.1. Redis事务概念

  Redis事务就是一组命令的集合,它是一个工作单元。事务中所有命令都会被序列化,按照顺序执行,在执行过程中不会有其他命令插入。
  Redis事务从执行的角度说,它具有是原子性,要不全部执行,要么全部不执行。从执行过程看,它又不具有原子性,在执行过程中任意命令执行失败,不会影响命令的继续执行,出现命令执行失败时,不会进行回滚。

5.2. Redis事务的三个阶段

  (1). 开始事务
  (2). 命令入队
  (3). 执行事务

5.3. Redis相关命令

  (1). multi:标记一个事务的开启。
  (2). exec:执行事务中的命令(一旦exec之后,事务中被加的监控锁就会被取消掉)。
  (3). discard:取消事务,放弃事务中的所有命令
  (4). watch:监视一个或多个key,如果在事务执行前,被监控的key被其他命令改动,那么事务就被打断。
  (5). unwatch: 取消watch命令对所有key的监视。

5.4. Redis事务使用案例

5.4.1. 正常执行

在这里插入图片描述

5.4.2. 放弃事务

在这里插入图片描述

5.4.3. 事务队列中存在语法错误,则执行exec命令时,所有命令不执行

在这里插入图片描述

5.4.3. 事务队列中存在运行时错误,则执行exec命令时,其他正确命令执行,错误命令抛出异常。

在这里插入图片描述

5.4.3. 使用watch,事务未执行时,修改watch监控的key,所有命令不执行。

  第一个redis客户端,开启事务,并将监控的key加入事务的队列中。执行事务,发现事务中所有的命令未执行。
在这里插入图片描述
  第二个redis客户端在第一个redis客户端未执行exec命令之前,修改被监控key的值。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值