Redis进阶

本文介绍了Redis相关知识。6.x版本前后线程模型有变化,单线程高性能基于内存操作等。持久化方式有RDB和AOF。Redis事务非原子性。主从复制实现读写分离,哨兵机制保障服务。还介绍了key过期策略,以及缓存穿透、击穿、雪崩等问题。

Redis线程模型

6.x版本前是单线程(监听客户端,读写等操作都是一个线程来完成的)

6.x版本后由一些线程来监听客户端,读写等操作还是一个线程来完成的(并发安全考虑)

为什么单线程还这么快(高性能)?

  • 基于内存操作(内存本身就很快)

  • 底层是hash表结构,指哪打哪,时间复杂度是O(1)

  • IO多路复用和非阻塞 I/O(后面会补充,属于操作系统级别的IO) (还未理解)

  • 减少了线程切换

reids的瓶颈是内存和网络带宽

Redis持久化

为什么要持久化?因为一旦机器崩溃可能会导致数据丢失,所以需要

持久化:把内存中的数据转存到硬盘中(根据一定规则写入)

RDB redis database

默认开启 原始文件名dump.rdb

定期将快照存储在rdb的文件中

触发储存机制(save(m:n)) 在m秒内n个键被进行改写 触发快照

shutdown save在关闭客户端时 保存快照

重启时Redis把rdb的文件恢复

AOF append only file

以日志的形式存储所有命令

不可改写 只能添加

需要手动开启配置

appendsync(同步) always/everysec 每次/秒修改都会消耗sync

Redis事物

不是原子性

开始事物命令 multi

执行事物命令 exec

即使事物中的语句有报错,错误语句之上都已经执行过了,并不会回滚 后面的语句好像也会执行

主从复制

主机 从机 集群

只能从主机写入

从从机读入

实现读写分离

即使有机器奔溃也不影响正常使用,当机器恢复会恢复数据

但是也会存在响应的服务,数据冗余 但是保证系统的稳定性

实现负载均衡 高性能(高可用)

哨兵机制

就是一个独立的任务 会定时给集群中的redis发送请求如果收不到响应 就说明该服务有问题,通过选举机制 选出一台来作为主机,当主机恢复后,临时主机就又恢复了从机

key过期策略

  • 立即删除 对cpu不友好(到期立马删除)

  • 惰性删除 对内存不友好(用的时候才查看是否到期)

  • 定时删除 二者折中选择

缓存

  • 缓存穿透 redis没有 数据库也没有

  • 缓存击穿 redis过期了 数据库有 (热点key设定永不过期 或者同步锁)

  • 缓存雪崩 redis的数据大量过期或者redis服务失效 (把热点key分布在不同从机)

  • 这些都要从大量数据的条件下 来理解

### Redis 的高级用法和特性 #### 1. 使用带有自动补全和语法高亮的交互式 CLI 为了更高效地管理和操作 Redis 数据库,可以采用具备自动完成命令以及提供语法高亮特性的客户端工具。这种增强型CLI能够显著提升用户体验,在执行复杂查询时尤为有用[^1]。 ```bash # 安装并运行支持自动完成与语法高亮特性的Redis CLI pip install interactive-redis-cli interactive_redis_cli ``` #### 2. 启用多种持久化机制保障数据安全 通过配置 `redis.conf` 文件中的设置项来激活 RDB (快照) 和 AOF (追加仅文件) 这两种不同的持久化策略。这有助于防止意外断电或其他异常情况造成的数据丢失风险。当容器启动时指定挂载外部卷用于存储这些持久化的数据库副本,从而实现跨重启后的状态保持[^2]。 ```dockerfile # Docker Compose 或者直接使用Docker指令启动带持久化的Redis实例 docker run --name redis \ -v /local/path/to/data:/data \ -v /local/path/to/conf/redis.conf:/usr/local/etc/redis/redis.conf \ -p 6379:6379 -d redis \ redis-server /usr/local/etc/redis/redis.conf ``` #### 3. 创建受限账户提高安全性 对于生产环境下的 Redis 实例来说,创建一个专门的服务账号是非常重要的一步。该账号不具备 shell 访问权限,并且其家目录也被移除以减少潜在的安全威胁。此外还将 Redis 可执行程序及其工作路径赋予此特定用户组所有权,确保只有授权人员才能对其进行修改或访问[^3]。 ```bash # 添加不具Shell登录能力也不拥有Home Directory的新用户 sudo useradd -M -s /sbin/nologin redis # 更改Redis安装目录所属权给新建立的用户 chown -R redis:redis /path/to/installation/ ``` #### 4. 构建分布式集群架构扩展性能 随着业务增长带来的负载压力增大,单机版 Redis 很难满足需求。此时可以通过构建多节点组成的集群模式来进行横向扩容。每个节点负责处理一部分键空间内的读写请求,而整个系统的吞吐量则取决于所有成员共同协作的结果。在实际部署过程中需注意各服务器间网络连接质量及延迟等因素的影响[^4]。 ```bash # 分别于不同主机上依次启动多个Redis服务端进程作为集群组成部分之一 /usr/local/redis/src/redis-server /etc/redis/node-01.conf /usr/local/redis/src/redis-server /etc/redis/node-02.conf ... ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值