Redis进阶教程

Redis进阶教程

目录

  1. Redis内存管理
    1. 内存分配
    2. 内存回收策略
  2. Redis集群
    1. 集群架构
    2. 数据分片
    3. 故障检测与恢复
  3. Redis持久化策略
    1. RDB与AOF对比
    2. 混合持久化
  4. Redis事务
    1. 事务的基本概念
    2. 乐观锁机制
  5. Redis脚本
    1. Lua脚本简介
    2. 常用Lua脚本示例
  6. Redis安全配置
    1. 身份认证
    2. 防火墙设置
    3. 客户端安全
  7. Redis性能优化
    1. 优化命令使用
    2. 内存优化
  8. 总结

1. Redis内存管理

1.1 内存分配

Redis的内存管理非常重要,因为它是一个内存数据库。Redis主要通过以下几种方式进行内存分配:

  • jemalloc:这是Redis默认的内存分配器,具有高效的内存分配和释放性能。
  • tcmalloc:Google开发的高效内存分配器,适用于高并发场景。
  • libc malloc:标准C库的内存分配器,适用于一般场景。

可以通过编辑redis.conf文件指定使用的内存分配器,例如:

malloc-lib /usr/lib/libjemalloc.so.1

1.2 内存回收策略

Redis支持多种内存回收策略,主要包括:

  • noeviction:当内存不足以容纳新写入数据时,新写入操作会报错。
  • allkeys-lru:在键空间中,移除最近最少使用的键。
  • volatile-lru:在设置了过期时间的键空间中,移除最近最少使用的键。
  • allkeys-random:在键空间中,随机移除某个键。
  • volatile-random:在设置了过期时间的键空间中,随机移除某个键。
  • volatile-ttl:在设置了过期时间的键空间中,移除即将过期的键。

可以在redis.conf中设置内存回收策略,例如:

maxmemory-policy allkeys-lru

2. Redis集群

2.1 集群架构

Redis集群通过分片机制将数据分布在多个节点上,提供高可用性和可扩展性。集群由多个主节点和从节点组成,每个主节点负责管理一个或多个数据分片。

2.2 数据分片

Redis集群使用哈希槽(hash slot)进行数据分片,共有16384个哈希槽,每个键通过CRC16算法计算得到哈希值,然后对16384取模,决定存储在哪个槽中。

2.3 故障检测与恢复

Redis集群通过Gossip协议进行故障检测与恢复。当主节点出现故障时,集群会自动将对应的从节点提升为主节点,继续提供服务。

3. Redis持久化策略

3.1 RDB与AOF对比

  • RDB(Redis Database File):通过快照将数据定期保存到磁盘,优点是性能高、恢复速度快,但数据可能会丢失一段时间。
  • AOF(Append Only File):通过记录每个写操作的日志,保证数据不丢失,但文件体积大、恢复速度慢。

3.2 混合持久化

Redis 4.0引入了混合持久化方式,将RDB和AOF结合起来,既保证数据完整性,又提高了恢复速度。可以在redis.conf中配置:

aof-use-rdb-preamble yes

4. Redis事务

4.1 事务的基本概念

Redis事务通过MULTIEXECDISCARDWATCH命令实现,支持一次执行多个命令,但不支持回滚。

4.2 乐观锁机制

通过WATCH命令监控一个或多个键,如果在事务执行前这些键被其他客户端修改,事务将被取消。示例如下:

WATCH key1 key2
MULTI
SET key1 value1
SET key2 value2
EXEC

5. Redis脚本

5.1 Lua脚本简介

Redis支持使用Lua脚本执行原子操作,避免多条命令执行过程中的数据竞争。通过EVAL命令执行Lua脚本。

5.2 常用Lua脚本示例

以下是一个简单的Lua脚本示例,原子性地递增一个键的值:

local current = redis.call('GET', KEYS[1])
if current then
    redis.call('SET', KEYS[1], current + 1)
else
    redis.call('SET', KEYS[1], 1)
end
return current

通过以下命令执行该脚本:

EVAL "local current = redis.call('GET', KEYS[1]); if current then redis.call('SET', KEYS[1], current + 1); else redis.call('SET', KEYS[1], 1); end; return current" 1 key

6. Redis安全配置

6.1 身份认证

通过在redis.conf中设置密码,增强Redis的安全性:

requirepass yourpassword

客户端连接时需要提供密码:

redis-cli -a yourpassword

6.2 防火墙设置

通过设置防火墙规则,限制对Redis服务器的访问。例如,使用ufw允许特定IP访问Redis:

sudo ufw allow from <your_ip> to any port 6379

6.3 客户端安全

确保客户端连接到Redis服务器时使用安全的网络环境,并定期更新客户端库,避免潜在的安全漏洞。

7. Redis性能优化

7.1 优化命令使用

  • 避免使用阻塞命令:例如BLPOPBRPOP等阻塞命令会影响Redis的性能。
  • 批量操作:尽量使用MGETMSET等批量操作代替多次单条操作,减少网络往返次数。
  • 合理使用管道(pipeline):通过pipeline技术可以将多条命令一次性发送给Redis服务器,减少网络延迟。

7.2 内存优化

  • 使用更紧凑的数据结构:如ziplist、intset等。
  • 开启内存压缩:可以在redis.conf中设置hash-max-ziplist-entrieshash-max-ziplist-value参数。

8. 总结

Redis作为一款高性能的内存数据库,通过合理的内存管理、集群配置、持久化策略和性能优化,可以显著提高系统的稳定性和响应速度。本文详细介绍了Redis的进阶使用方法和技巧,希望能为您的开发工作提供帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/784589.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

昇思MindSpore学习笔记5-02生成式--RNN实现情感分类

摘要&#xff1a; 记录MindSpore AI框架使用RNN网络对自然语言进行情感分类的过程、步骤和方法。 包括环境准备、下载数据集、数据集加载和预处理、构建模型、模型训练、模型测试等。 一、概念 情感分类。 RNN网络模型 实现效果&#xff1a; 输入: This film is terrible 正…

Tomcat的负载均衡、动静分离

一、如何tomcat和nginx负载均衡及动静分离&#xff1a;2台tomcat&#xff0c;3台nginx来实现 1.首先设置tomcat1和tomcat2服务器 关闭两台tomcat的防火墙及安全机制&#xff1a;systemctl stop filwalld setenforce 0 进入tomcat目录的webapps中&#xff0c;创建test 2.配…

PI 接口日志设置

一、全局设置 SAP NetWeaver Administrator ---> 配置 ---> 基础架构 ---> Java系统属性 ---> 选择服务页签 ---> 选择 "XPI Adapter:XI"服务进行设置。 1760915 - FAQ: Staging and Logging in PI 7.3 and higher 2518441 - The tablespace PSAPSR…

亿康源精英盛宴暨亿康源启动成功举办

&#xff08;本台记者报&#xff09;2024年7月7日下午&#xff0c;亿康源精英盛宴暨启动仪式在杭州市中维歌德大酒店盛大举行。此次盛会不仅吸引了行业内的专业人才、著名投资界大咖和科技领域的杰出企业家&#xff0c;还汇聚了众多关注大健康产业的各界人士&#xff0c;共同见…

【Linux】进程间通信——匿名管道

为什么要进行进程间通信&#xff1f; 1.数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程&#xff0c;比如我们有两个进程&#xff0c;一个负责获取数据&#xff0c;另一个负责处理数据&#xff0c;这时第一个进程就要将获取到的数据交给第二个进程 2.资源共享&…

永磁同步电机无速度算法--滑模观测器(反正切、反余弦)

一、原理介绍 在永磁同步电机滑模观测器控制中&#xff0c;转子的位置和转速信息与反动电势密切相关。滑模观测器控制基本设计思路是&#xff1a;利用永磁同步电机的电压、电流信息&#xff0c;通过永磁同步电机数学模型&#xff0c;估算出电机在两相静止坐标系中的反电动势信…

(十) Docker compose 本地部署 apollo

文章目录 1、apollo2、数据库准备3、启动后会用到的几个地址4、docker-compose运行 apollo方式一&#xff1a;使用容器 hostName 作为网络媒介apollo 客户端通过宿主机端口 拉取配置(推荐)apollo 客户端通过 自定义hostName 拉取配置 方式二&#xff1a;使用端口映射固定 ip 作…

transformer网络学习

Transformer encoder-decoder模型之间共享的是Encoder最后一层输出的hidden-state。 GitHub - huggingface/transformers: &#x1f917; Transformers: State-of-the-art Machine Learning for Pytorch, TensorFlow, and JAX. Bert2Bert中&#xff0c;Encoder的hidden-state同…

阿里开源语音理解和语音生成大模型FunAudioLLM

近年来&#xff0c;人工智能&#xff08;AI&#xff09;的进步极大地改变了人类与机器的互动方式&#xff0c;例如GPT-4o和Gemin-1.5等。这种转变在语音处理领域尤为明显&#xff0c;其中高精度的语音识别、情绪识别和语音生成等能力为更直观、更类人的交互铺平了道路。阿里开源…

JAVA Tesseract OCR引擎

Tess4j是一个基于Tesseract OCR引擎的Java库, Tesseract库最初由惠普实验室于1985年开发&#xff0c;后来被Google收购并于2006年开源。识别效果不好&#xff0c;速度还慢&#xff0c;但是好早好早了。 一、POM依赖 <!--OCR识别https://digi.bib.uni-mannheim.de/tesserac…

library source does not match the bytecode for class SpringApplication

library source does not match the bytecode for class SpringApplication 问题描述&#xff1a;springboot源码点进去然后download source后提示标题内容。spring版本5.2.8.RELEASE&#xff0c;springboot版本2.7.18 解决方法&#xff1a;把spring版本改为与boot版本对应的6.…

昇思25天学习打卡营第5天|MindSpore网络模型构建

打卡 目录 打卡 模型类 模型网络&#xff1a;定义与使用 模型层级分解 nn.Flatten 张量转换-演示查看 nn.Dense 全连接层-演示查看 nn.ReLU 非线性激活层-演示查看 nn.SequentialCell 有序网络容器 nn.Softmax 多分类概率预测 模型参数 前置感受&#xff1a;总的来说…

前端面试题25(css常用的预处理器)

在前端开发领域&#xff0c;CSS预处理器在面试中经常被提及&#xff0c;其中最流行的三种预处理器是Sass、LESS和Stylus。下面分别介绍它们的特点和优势&#xff1a; 1. Sass&#xff08;Syntactically Awesome Style Sheets&#xff09; 优势&#xff1a; 变量&#xff1a;允…

【购物车案例】for循环为什么使用key

要做出一个简单的购物车界面。首先&#xff0c;有一个复选框&#xff0c;可以选择商品&#xff0c;后面紧跟的是商品名称&#xff0c;然后&#xff0c;是删除按钮&#xff0c;根据这个需求&#xff0c;先写出一个简单的界面&#xff0c;代码如下&#xff1a; <template>…

思路打开!腾讯造了10亿个角色,驱动数据合成!7B模型效果打爆了

世界由形形色色的角色构成&#xff0c;每个角色都拥有独特的知识、经验、兴趣、个性和职业&#xff0c;他们共同制造了丰富多元的知识与文化。 所谓术业有专攻&#xff0c;比如AI科学家专注于构建LLMs,医务工作者们共建庞大的医学知识库&#xff0c;数学家们则偏爱数学公式与定…

论文解析——Full Stack Optimization of Transformer Inference: a Survey

作者及发刊详情 摘要 正文 主要工作贡献 这篇文章的贡献主要有两部分&#xff1a; 分析Transformer的特征&#xff0c;调查高效transformer推理的方法通过应用方法学展现一个DNN加速器生成器Gemmini的case研究 1&#xff09;分析和解析Transformer架构的运行时特性和瓶颈…

人员定位系统的功能,你知道多少呢?

在此前的文章中&#xff0c;说到了人员定位系统用于化工厂定位这一用途来完善工厂管理&#xff0c;但同时&#xff0c;基于人员定位系统的强大功能&#xff0c;该系统的应用范围也要宽范的多&#xff0c;那么&#xff0c;本篇文章就来为大家介绍一下吧。 人员定位系统的功能简介…

阿里云存储的降本增效与运维

小浩负责公司存储架构层&#xff0c;需要确保存储层不会成为公司业务系统的性能瓶颈&#xff0c;让数据读写达到最佳性能。那么小浩可以从哪些方面着手优化性能呢&#xff1f;他继续求助系统架构师大雷。 小浩&#xff1a;雷哥&#xff0c;PD反馈公司系统最近响应很慢&#xff…

电子设备常用的胶水有哪些?

目录 1、502胶水 2、703胶水 3、704胶水 4、AB胶 5、红胶 6、Underfill 7、导电胶 8、UV胶 9、热熔胶 10、环氧树脂胶 11、硅酮胶 12、聚氨酯胶 13、丙烯酸胶 14、丁基胶 1、502胶水 502胶水&#xff0c;也被称为瞬间胶或快干胶&#xff0c;是一种非常常见的粘合…

加密与安全_密钥体系的三个核心目标之不可否认性解决方案

文章目录 Pre概述不可否认性数字签名&#xff08;Digital Signature&#xff09;证书是什么证书使用流程 PKICA证书层级多级证书证书链是如何完成认证的&#xff1f; 其他疑问1. Alice能直接获取Bob的公钥&#xff0c;是否还需要证书&#xff1f;2. 为什么即使能直接获取公钥也…