redis延伸

今日分享

小闫同学pythonnote.cn

查看:1314520回复:225

不知你是否发现:有人看了些文章,读了篇鸡汤,甚至瞄了眼评论就敢妄言置评。没有亲身经历,没有深入研究,我选择闭口不谈。

 —— 小闫同学

在掌握了 redis 常用的五种类型以及适用场景后,快来学习更多高级操作吧 ~更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』

1.Redis 事务

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

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

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

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

2) 使用 multi 开启事务

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

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

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

单机支持事务,集群不支持。

可以使用命令 info Replication 查看所属角色(主 Master 从 Slave 信息)

1.1 相关命令

multi 开启事务

exec 统一执行

watch 监视器「乐观锁」

1.2 模块化操作

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

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

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 配置文件中填写以下代码:

slaveof <masterip> <masterport>

3.2 注意事项

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

                  master
                 /     \
           slave1        slave2
          /      \
      slave3   slave4       ......


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

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) 发布订阅

6.Redis 面试题汇总

可以点击文章「Redis高频面试题」查看更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』

往期精彩内容矩阵

            

            

            

            

好的,我明白了您的问题。首先,为了确保质量和稳定性,我们选择使用Spring Boot作为技术框架。Spring Boot是Spring框架的延伸,它支持快速开发微服务,并自动集成了很多常用的库和工具。Spring Boot在部署和管理上也非常友好。 接着,我们需要一个数据库管理系统。我们选择使用PostgreSQL,它是一款自由且功能非常强大的关系型数据库系统。它支持ACID事务,拥有强大的数据操作和查询能力。PostgreSQL也有很好的社区支持,丰富的插件和工具。 为了提高系统的性能和可扩展性,我们使用缓存技术。我们选择了Redis,一款快速、高效、稳定的内存数据库系统。Redis支持多种数据结构,如字符串、列表、集合、有序集合等。除了缓存,Redis还可以被用作消息队列分布式锁等一些高级功能。 最后,我们需要一个Web容器来运行应用程序。我们选择Tomcat,一款轻量级的Java Servlet容器。Tomcat易于安装和部署,并且在性能和可靠性方面有良好的表现。Tomcat也有很好的社区支持,以及团队经验丰富的专业支持。 总结一下,我们的技术框架选型如下: 1. Spring Boot作为基础框架; 2. PostgreSQL作为数据库管理系统; 3. Redis作为缓存技术; 4. Tomcat作为Web容器。 以上是一个大致的描述,具体的实现过程和细节需要根据实际情况进行调整。希望这个回答对您有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值