Redis事务

Redis事务是一个单独的隔离操作:事务中的所有的命令都会序列化,按顺序执行。事务在执行的过程中,不会被其其他客户端发送来的命令请求所打断。Redis事务的主要作用就是串联多个命令防止别的命令插队

特点:

1.Redis事务没有隔离级别的概念

2.所有的命令在事务中,并没有直接被执行,只有发起执行命令的时候才会执行!Exec

3.Redis单条命令式保存原子性的,但是事务不保证原子性!

|-----------|---------------------------------------------------|
| 命令 | 描述 |
| multi | 标记一个事务的开始 |
| exec | 执行所有事务块内的命令 |
| watch key | 监视一个或者多个key,如果在事务执行之前这个或者这些key被其他命令那么事务将被打断。类似乐观锁 |
| discard | 取消事务,放弃执行事务块内的所有命令 |
| unwatch | 取消watch命令所有key的监视 |

悲观锁
悲观锁 (Pessimistic Lock) , 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每 次在拿数据的时候都会上锁,这样别人想拿这个数据就会block 直到它拿到锁。 传统的关系型数据库里 边就用到了很多这种锁机制 ,比如 行锁表锁 等, 读锁写锁 等,都是在做操作之前先上锁
乐观锁
乐观锁 (Optimistic Lock) 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不 会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。 乐观锁适用于多读的应用类型,这样可以提高吞吐量 。 Redis 就是利用这种 check-and-set 机制实现事务的

redis持久化

Redis 是内存数据库,如果不将内存中的数据库状态保存到磁盘,那么一旦服务器进程退出,服务器中
的数据库状态也会消失。所以 Redis 提供了持久化功能!
持久化过程保存什么

  1. 将当前数据状态进行保存,快照形式,存储数据结果,存储格式简单,关注点在数据 RDB
  2. 将数据的操作过程进行保存 , 日志形式,存储操作过程,关注点在数据的操作过程
    AOF

RDB方式

在指定的时间间隔内将内存中的数据集 快照 写入磁盘, 也就是行话讲的 Snapshot 快照,它恢复时是将快照文件直接读到内存里
RDB手动
save指令
命令:save
作用:手动执行一次保存操作

save指令相关配置

dbfifilename dump.rdb
说明:设置本地数据库文件名,默认值为 dump.rdb
经验:通常设置为 dump- 端口号 .rdb
dir
说明:设置存储 .rdb 文件的路径
经验:通常设置成存储空间较大的目录中,目录名称 data
rdbcompression yes
说明:设置存储至本地数据库时是否压缩数据,默认为 yes ,采用 LZF 算法 压缩
经验:通常默认为开启状态,如果设置为 no ,可以节省 CPU 运行时间,但会使存储的文件变大(巨 大)
rdbchecksum yes
说明:设置是否进行 CRC64 算法 RDB 文件格式校验, 该校验过程在写文件和读文件过程均进行
经验:通常默认为开启状态,如果设置为 no ,可以节约读写性过程约 10% 时间消耗,但是存储一定的数据损坏风险
save 指令工作原理 ( 单线程任务执行序列 )
客户端 1 127.0.0.1:6379>set key1 value1
客户端 2 127.0.0.1:6379>set key2 value2
客户端 3 127.0.0.1:6379>save
客户端 4 127.0.0.1:6379>get key
对 redis 数据库执行 4 此指令顺序 ===> set set save get
注意: save 指令的执行会阻塞当前 Redis 服务器,直到当前 RDB 过程完成为止,有可能会造成长时间阻 塞,线上环境不建议使用
bgsave 指令
命令 : bgsave
作用 :手动启动后台保存操作,但不是立即执行
bgsave 指令工作原理
注意: bgsave 命令是针对 save 阻塞问题做的优化。 Redis 内部所有涉及到 RDB 操作都采用 bgsave 的方式,save 命令可以放弃使用
Fork
Fork 的作用是复制一个与当前进程一样的进程。新进程的所有数据(变量、环境变量、程序计数器等) 数值都和原进程一致,但是是一个全新的进程,并作为原进程的子进程

RDB自动

配置 : save second changes
作用 : 满足限定时间范围内 key 的变化数量达到指定数量即进行持久化
参数 :
second:监控时间范围
changes:监控key 的变化量
位置 : 在 conf 文件中进行配置
注意:
save 配置要根据实际业务情况进行设置,频度过高或过低都会出现性能问题,结果可能是灾难性的
save 配置中对于 second 与 changes 设置通常具有互补对应关系,尽量不要设置成包含性关系 save配置启动后执行的是 bgsave 操作
RDB 优点
RDB 是一个紧凑压缩的二进制文件,存储效率较高
RDB 内部存储的是 redis 在某个时间点的数据快照,非常适合用于数据备份,全量复制等场景
RDB 恢复数据的速度要比 AOF 快很多
RDB 节省磁盘空间
RDB 缺点
Fork 的时候,内存中的数据被克隆了一份,大致 2 倍的膨胀性需要考虑
虽然 Redis 在 fork 时使用了 写时拷贝技术 , 但是如果数据庞大时还是比较消耗性能
RDB 方式无论是执行指令还是利用配置,无法做到实时持久化,具有较大的可能性丢失数据
Redis 的众多版本中未进行 RDB 文件格式的版本统一,有可能出现各版本服务之间数据格式无法兼容现象

相关推荐
夜泉_ly1 小时前
MySQL -安装与初识
数据库·mysql
qq_529835352 小时前
对计算机中缓存的理解和使用Redis作为缓存
数据库·redis·缓存
月光水岸New4 小时前
Ubuntu 中建的mysql数据库使用Navicat for MySQL连接不上
数据库·mysql·ubuntu
狄加山6754 小时前
数据库基础1
数据库
我爱松子鱼4 小时前
mysql之规则优化器RBO
数据库·mysql
chengooooooo5 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
Rverdoser6 小时前
【SQL】多表查询案例
数据库·sql
Galeoto6 小时前
how to export a table in sqlite, and import into another
数据库·sqlite
希忘auto6 小时前
详解Redis在Centos上的安装
redis·centos
人间打气筒(Ada)6 小时前
MySQL主从架构
服务器·数据库·mysql