Redis事务和持久化

Redis事务处理流程

  • Redis服务器接受客户端命令

  • 检查客户端是否处于事务状态

    • 是,则将命令放入事务队列中

      • 向客户端返回QUEUED字符串(表示命令已入事务列队)

    • 否,则直接执行命令

      • 向客户端返回命令执行结果

Redis事务错误

  • 调用EXEC之前的错误 (语法错误/事务回滚)

    • 有可能是由于语法有误导致,也可能是由于内存不足导致

    • 只要出现某个命令无法成功写入缓冲队列的情况,redis 都会进行记录,在客户端调用EXEC 时,redis 会拒绝执行这一事务

  • 调用EXEC之后的错误(数据类型错误/事务不回滚)

    • redis 不会理睬这些错误,而是继续向下执行事务中的其他命令

    • 对于应用层面的错误,并不是 redis 自身需要考虑和处理的问题,所以一个事务中如果某一条命令执行失败,并不会影响接下来的其他命令的执行

watch命令使用

Redis事务中watch命令的作用是监视key是否被改动(可同时监视多个key)

  • 如果 watch 监视的 key 在执行事务 exec 命令之前没有被改动,则 watch 命令不做任何操作,事务可以正常执行

  • 如果 watch 监视的 key 在执行事务 exec 命令之前有被改动过,则在执行事务 exec命令时就会返回 nil,事务无法执行

可以利用 watch 命令实现类似于数据库“乐观锁”的效果

Redis持久化

为什么需要持久化

Redis对数据的操作基于内存,意外情况会导致Redis中的数据丢失,无法恢复。持久化机制使得Redis在下次重启时可以利用之前持久化的文件进行数据恢复。

以下二者同时使用

RDB

  • RDB(Redis DataBase)

    把当前数据生成快照保存在硬盘上

    可以手动触发:save和bgsave

    也可以自动触发:bgsave

  • 优点

    紧凑的二进制压缩文件,是Redis在某个时间点的全部数据快照。所以使用RDB恢复数据的速度远远比AOF的快。

  • 缺点

    每次进行bgsave操作都要执行fork操作创建子进程,属于重量级操作,频繁执行成本过高,所以无法做到实时持久化,或者秒级持久化。

AOF

AOF (Append Only File,即只允许追加不允许改写的文件) 方式就是将执行过的写指令记录下来 (在数据恢复时按照从前到后的顺序再将指令都执行一遍)

数据回复完整度高

通过配置 redis.conf 中的 appendonly yes 可以打开 AOF 功能 如有写指令 (如SET 等),redis 就会被追加到 AOF 文件的末尾;默认的 AOF 持久化策略是每秒钟fsync 一次 (fsync 是指把缓存中的写指令记录到磁盘中) 数据恢复完整度高 redis 提供 redis-check-aof 工具,可以用来进行 AOF 文件修复· redis 提供 AOF 文件重写 (rewrite) 机制 (AOF 文件压缩) 误操作执行 flushall 导致数据全部被清空,可以通过 AOF 文件恢复 (AOF 未被重写)

  • 不足

    AOF 文件要比 RDB 文件体积大,AOF 方式数据恢复速度要慢于 RDB 方式

  • 原理

 

 

 

 

Redis慢查询

慢查询就是系统在命令执行前后计算每条命令的执行时间,,当超过预设闽值就将这条命令的相关信息 (如发生时间、耗时、命令的详细信息)记录到慢查询日志中

慢查询的作用是帮助开发和运维人员定位和优化系统存在的慢操作

  • 配置项

    • slowlog-log-slower-than (慢查询预设值)

      单位是微妙 (1秒=1000毫秒=1000000微秒) ,默认值 10000 微妙;假如执行了一条“很慢”的命令如果它的执行时间超过了10000 微秒,那么它将被记录在慢查询日志中。

    • slowlog-max-len (慢查询日志最大记录数)

      Redis 使用了一个列表来存储慢查询日志,当慢查询日志列表已经处于最大长度时,列表中最早插入的那条记录将被移除。

  • Redis慢查询日志管理命令

虽然慢查询日志存放在 Redis 内存列表中,但是 Redis 并没有暴露这个列表的键,而是通过一组命令来实现对慢查询日志的访问和管理

  • 获取慢查询日志

    slowlog get [n]

  • 获取慢查询日志列表当前长度

    slowlog len

  • 慢查询日志重置

    slowlog reset


__EOF__

本文作者3DG
本文链接https://www.cnblogs.com/3-DG/p/17753431.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   3DG  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示