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 文件格式的版本统一,有可能出现各版本服务之间数据格式无法兼容现象

相关推荐
豆本-豆豆奶3 分钟前
最全面的Python重点知识汇总,建议收藏!
开发语言·数据库·python·oracle
Apache IoTDB6 分钟前
IoTDB 与 HBase 对比详解:架构、功能与性能
大数据·数据库·架构·hbase·iotdb
2401_8576363944 分钟前
SpringBoot赋能的共享汽车业务管理系统
数据库·spring boot·汽车
CQU_JIAKE1 小时前
【miniob】JOIN TABLE DEBUG
数据库·sql·mysql
望佑1 小时前
复习一下Greendao...
android·数据库
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ1 小时前
mapper.xml 使用大于号、小于号示例
xml·java·数据库
打鱼又晒网1 小时前
【MySQL】深度学习与解析 : 库的操作知识整合
数据库·sql
啧不应该啊3 小时前
Django的manage.py命令用法
数据库·django·sqlite
LeonNo113 小时前
软考:缓存持久化和过期策略,淘汰策略
java·开发语言·缓存
黄俊懿3 小时前
【架构师从入门到进阶】第一章:架构设计基础——第五节:架构演进(缓存到微服务)
分布式·后端·缓存·微服务·架构·系统架构·架构设计