前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >redis延伸

redis延伸

作者头像
小闫同学啊
发布2020-03-26 00:43:01
2940
发布2020-03-26 00:43:01
举报
文章被收录于专栏:小闫笔记小闫笔记

1.Redis 事务

redis 中有类似于事务的东西,保证事务执行时不被其他客户端发来的请求中断。但是和关系数据库并不相同。它的事务不支持回滚操作,因此在统一执行事务中所有命令时,即使有一条失败,之前执行过的命令仍然生效。

事务执行过程:开启事务,进行相关操作(所有操作按顺序添加到队列中),执行。

此处可能有人会问:既然不支持回滚,那么在事务执行的过程中,所处理的数据被其他人修改了,怎么办?redis 提供了一个监视器 watch 命令,它的执行过程如下:

1) 使用监视器监控一个变量

2) 使用 multi 开启事务

3) 向队列中添加一系列命令

4) 在使用 exec 统一执行队列中所有操作前,监视器会去查看监控的变量是否被更改过,如果有变化直接报错,没有则正常执行更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』

看到上述执行过程后,会发现它类似于「乐观锁」

单机支持事务,集群不支持。 可以使用命令 info Replication 查看所属角色(主 MasterSlave 信息)

1.1 相关命令

multi 开启事务

exec 统一执行

watch 监视器「乐观锁」

1.2 模块化操作

我们在使用 python 第三方库操作 redis 时,一般通过 pipeline 管道进行接收命令,然后 execute 顺序执行管道中所有操作。

优点:可以在客户端统一收集指令;会隐式的执行 multiexec 命令。

2.Redis 持久化

redis 是内存型的数据库,为保证发生宕机时可以恢复数据,所以需要持久化。共有下方两种方式:

2.1 RDB

快照持久化(把当前内存状态刷入硬盘)

1) 创建子进程执行,停顿时长(随着数据量的增大,创建子进程所耗费的时间会越来越长。比如使用了40G内存后,创建一个子进程可能耗费4s多,这4s数据库会处于停服状态)更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』

2) 定期触发(默认开启)

3) 手动执行 BGSAVE 命令(background save 后台保存)时触发

4) 执行 SHUTDOWN 关闭数据库时触发

2.2 AOF

追加文件的方式进行持久化

1) 保存的是操作指令

2) 默认关闭

3) 可以选择 appendsync always / everysec / no 三种方式,一般选择每秒记录一次

4) 占用磁盘一定量时会进行压缩,可手动开启配置项

在实际使用时一般两种方式都开启。

3.Redis 复制集

为了在部分节点无法通讯时,保证服务仍然可用。

3.1 设置方式

1) 服务运行时执行命令 slaveof

2) 服务启动前在 redis.conf 配置文件中填写以下代码:

代码语言:javascript
复制
slaveof <masterip> <masterport>

3.2 注意事项

只能一主多从(不允许存在互为备份的两个 master),但是可以层级化,如下图所示。

代码语言:javascript
复制
                  master                 /     \           slave1        slave2          /      \      slave3   slave4       ......

使用如下命令查看当前 redis 服务器所扮演角色:

代码语言:javascript
复制
info Replication

4.Sentinel 哨兵

1) 是一个独立的进程,安装之后默认存在,可以通过源码文件sentinel.conf 查看。

2) 哨兵独立于 redis 之外运行。

4.1 作用

看管 redis 主从角色关系,进行故障转移(failover) ,从而实现高可用。它的功能简单来说就是 master 死掉了,可以自动将 slave 上升为 master 。更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』

4.2 注意

至少运行3个实例,因为决定 redis 是否挂掉需要选举,超过半数投票才可以使 master 客观下线。还会在哨兵中选举出一个 leader 去故障转移,在 slave 中选出哪台被上升为 master

5.redis 用途

1) 缓存

2) 持久存储:比如数据库的冗余字段存放到 redis

3) 队列:消息平台,比如 celery 的消息队列实现

4) 排行榜/计数器

5) 发布订阅

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈技术精选 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.Redis 事务
    • 1.1 相关命令
      • 1.2 模块化操作
      • 2.Redis 持久化
        • 2.1 RDB
          • 2.2 AOF
          • 3.Redis 复制集
            • 3.1 设置方式
              • 3.2 注意事项
              • 4.Sentinel 哨兵
                • 4.1 作用
                  • 4.2 注意
                  • 5.redis 用途
                  相关产品与服务
                  云数据库 Redis
                  腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档