Redis日常学习(一)
我的Redis学习笔记:从命令行到性能调优
Redis
Redis(Remote Dictionary Server)本质上是一个基于内存的键值存储系统.
安装配置Redis的过程非常简单:
# Ubuntu/Debian安装Redis
sudo apt-get update
sudo apt-get install redis-server# 启动Redis服务
sudo systemctl start redis# 检查Redis状态
redis-cli ping
# 输出应为: PONG
Redis的核心数据结构与命令
初学Redis最重要的是理解其核心数据结构。与其他数据库不同,Redis提供了多种数据类型,每种类型都有其特定用途和相应的命令集。
1. 字符串(Strings)
字符串是Redis最基本的数据类型,可以存储文本、序列化的对象或二进制数据。
# 设置键值对
SET user:1001 "{"name":"张三","email":"zhangsan@example.com"}"# 获取值
GET user:1001# 设置带过期时间的键值对(3600秒后过期)
SETEX session:token123 3600 "user_session_data"# 原子递增操作
SET counter 0
INCR counter # 返回1
INCRBY counter 10 # 返回11
2. 哈希表(Hashes)
哈希表适合存储对象,比字符串更节省内存,且允许单独操作对象的字段。
# 存储用户信息
HMSET user:1001 name "张三" email "zhangsan@example.com" age 28 active 1# 获取特定字段
HGET user:1001 name # 返回 "张三"# 获取所有字段
HGETALL user:1001# 增加数值字段的值
HINCRBY user:1001 age 1 # 年龄+1
3. 列表(Lists)
列表是简单的字符串链表,适合实现队列或栈结构。
# 左侧推入元素(栈)
LPUSH tasks "task1"
LPUSH tasks "task2"# 右侧推入元素(队列)
RPUSH messages "message1"
RPUSH messages "message2"# 左侧弹出元素
LPOP tasks # 返回 "task2"# 获取列表范围元素
LRANGE messages 0 -1 # 获取所有元素
4. 集合(Sets)
集合是无序的字符串集合,支持复杂的集合操作。
# 添加集合成员
SADD tags:article:1 "redis" "database" "nosql"# 获取所有成员
SMEMBERS tags:article:1# 判断成员是否存在
SISMEMBER tags:article:1 "redis" # 返回1表示存在# 集合间操作
SADD user:1:follows 1001 1002 1003
SADD user:2:follows 1001 1003 1004
SINTER user:1:follows user:2:follows # 交集,返回共同关注
5. 有序集合(Sorted Sets)
有序集合是集合的增强版,每个成员关联一个分数用于排序。
# 添加带分数的成员
ZADD leaderboard 100 "player1"
ZADD leaderboard 200 "player2"
ZADD leaderboard 150 "player3"# 获取排名(从高到低)
ZREVRANGE leaderboard 0 2 WITHSCORES # 前三名及分数# 增加成员分数
ZINCRBY leaderboard 50 "player1" # player1分数+50# 获取成员排名
ZREVRANK leaderboard "player2" # 返回player2的排名(从0开始)
高级特性实践
1. 事务操作
Redis的事务可以确保命令序列的原子性执行。
MULTI # 开始事务
SET balance:user1 500
DECRBY balance:user1 200
INCRBY balance:user2 200
EXEC # 执行事务
2. 键过期与淘汰策略
在内存有限的生产环境中,合理设置键过期时间和选择适当的内存淘汰策略至关重要。
# 设置过期时间
EXPIRE user:session:123 1800 # 30分钟过期# 查看剩余过期时间
TTL user:session:123# 修改Redis配置使用LRU淘汰策略
# 在redis.conf中设置
# maxmemory 2gb
# maxmemory-policy allkeys-lru
3. 发布/订阅模式
Redis的发布/订阅功能可用于构建简单的消息系统。
# 终端1:订阅频道
SUBSCRIBE notifications# 终端2:发布消息
PUBLISH notifications "系统将于今晚10点进行维护"
Redis集群实践
当单个Redis实例无法满足需求时,我开始研究Redis集群方案。以下是我搭建主从复制和哨兵模式的简要步骤:
1. 主从复制(Master-Slave Replication)
# 在从节点配置(slave)
slaveof 192.168.1.10 6379
2. 哨兵模式(Sentinel)
创建sentinel.conf文件:
sentinel monitor mymaster 192.168.1.10 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
启动哨兵:
redis-sentinel sentinel.conf
3. Redis Cluster
Redis Cluster需要更复杂的配置,但提供了更好的水平扩展能力:
# 在每个节点的配置中添加
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000# 创建集群
redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 --cluster-replicas 1
踩坑记录
学习过程中难免会遇到一些问题,以下是我的一些踩坑经历:
-
内存碎片化问题:长时间运行后,Redis可能出现内存碎片。可以通过执行
INFO memory命令查看碎片率,必要时执行MEMORY PURGE或重启实例。 -
大键问题:一次发现系统响应变慢,排查后发现是一个包含数百万元素的hash键造成的。解决方案是拆分大键并使用
SCAN命令进行分批处理。 -
网络超时:在AWS上部署Redis时,经常遇到网络超时问题。增加
tcp-keepalive参数和调整客户端超时设置后解决。
2025.4.20记录我与Redis共同成长的几天
相关文章:
Redis日常学习(一)
我的Redis学习笔记:从命令行到性能调优 Redis Redis(Remote Dictionary Server)本质上是一个基于内存的键值存储系统. 安装配置Redis的过程非常简单: # Ubuntu/Debian安装Redis sudo apt-get update sudo apt-get install red…...
Pytorch图像数据转为Tensor张量
PyTorch的所有模型(nn.Module)都只接受Tensor格式的输入,所以我们在使用图像数据集时,必须将图像转换为Tensor格式。PyTorch提供了torchvision.transforms模块来处理图像数据集。torchvision.transforms模块提供了一些常用的图像预…...
Java 加密与解密:从算法到应用的全面解析
Java 加密与解密:从算法到应用的全面解析 一、加密与解密技术概述 在当今数字化时代,数据安全至关重要。Java 加密与解密技术作为保障数据安全的关键手段,被广泛应用于各个领域。 加密是将明文数据通过特定算法转换为密文,使得…...
Java基础系列-HashMap源码解析2-AVL树
文章目录 AVL树左旋右旋左旋右旋的4种情况LL 型RR 型LR 型RL 型 实际插入时怎么判断是那种类型?插入时注意事项删除节点 AVL树 为避免BST树退化成链表的极端情况, AVL 树应运而生。 平衡因子取值(-1,0,1)…...
蓝桥杯 19. 最大比例
最大比例 原题目链接 题目描述 X 星球的某个大奖赛设了 M 级奖励。每个级别的奖金是一个正整数。 并且,相邻两个级别间的比例是一个固定值,也就是说:所有级别的奖金构成一个等比数列。 例如: 奖金数列为 16, 24, 36, 54&…...
前端加密介绍与实战
前端数据加密 文章目录 前端数据加密前端数据加密介绍为什么需要前端数据加密?前端数据加密的常见方式前端数据加密的实现场景:加密用户密码并发送到后端步骤 1:安装加密库步骤 2:实现加密逻辑步骤 3:后端解密 实战总结…...
Zookeeper是什么?基于zookeeper实现分布式锁
zookeeper听的很多,但实际在应用开发中用的不错,主要是作为中间件配合使用的,例如:Kafka。 了解zk首先需要知道它的数据结构,可以想象为树、文件夹目录。每个节点有基本的信息,例如:创建时间、…...
Kafka 主题设计与数据接入机制
一、前言:万物皆流,Kafka 是入口 在构建实时数仓时,Kafka 既是 数据流动的起点,也是后续流处理系统(如 Flink)赖以为生的数据源。 但“消息进来了” ≠ “你就能处理好了”——不合理的 Topic 设计、接入方…...
gem5-gpu教程05 内存建模
memory-modeling|Details on how memory is modeled in gem5-gpu gem5-gpu’s Memory Simulation gem5-gpu在很大程度上避开了GPGPU-Sim的单独功能模拟,而是使用了gem5的执行中执行模型。因此,当执行存储/加载时,内存会被更新/读取。没有单独的功能路径。(顺便说一句,这…...
MySQL的日志--Redo Log【学习笔记】
MySQL的日志--Redo Log 知识来源: 《MySQL是怎样运行的》--- 小孩子4919 MySQL的事务四大特性之一就是持久性(Durability)。但是底层是如何实现的呢?这就需要我们的Redo Log(重做日志)闪亮登场了。它记录着…...
【AI应用】免费代码仓构建定制版本的ComfyUI应用镜像
免费代码仓构建定制版本的ComfyUI应用镜像 1 创建代码仓1.1 注册登陆1.2 创建代码仓1.5 安装中文语言包1.4 拉取ComfyUI官方代码2 配置参数和预装插件2.1 保留插件和模型的版本控制2.2 克隆插件到代码仓2.2.1 下载插件2.2.2 把插件设置本仓库的子模块管理3 定制Docker镜像3.1 创…...
MineWorld,微软研究院开源的实时交互式世界模型
MineWorld是什么 MineWorld是微软研究院开发并开源的一个基于《我的世界》(Minecraft)的实时互动世界模型。该模型采用了视觉-动作自回归Transformer架构,将游戏场景和玩家动作转化为离散的token ID,并通过下一个token的预测进行…...
被裁20240927 --- 视觉目标跟踪算法
永远都像初次见你那样使我心荡漾 参考文献目前主流的视觉目标跟踪算法一、传统跟踪算法1. 卡尔曼滤波(Kalman Filter)2. 相关滤波(Correlation Filter,如KCF、MOSSE)3. 均值漂移(MeanShift/CamShift&#x…...
Agentic AI——当AI学会主动思考与决策,世界将如何被重塑?
一、引言:2025,Agentic AI的元年 “如果ChatGPT是AI的‘聊天时代’,那么2025年将开启AI的‘行动时代’。”——Global X Insights[1] 随着Agentic AI(自主决策型人工智能)的崛起,AI系统正从被动应答的“工具…...
Ollama API 应用指南
1. 基础信息 默认地址: http://localhost:11434/api数据格式: application/json支持方法: POST(主要)、GET(部分接口) 2. 模型管理 API (1) 列出本地模型 端点: GET /api/tags功能: 获取已下载的模型列表。示例:curl http://lo…...
PNG透明免抠设计素材大全26000+
在当今的数字设计领域,寻找高质量且易于使用的素材是每个设计师的日常需求。今天,我们将为大家介绍一个超全面的PNG透明免抠设计素材大全,涵盖多种风格、主题和应用场景,无论是平面设计、网页设计还是多媒体制作,都能轻…...
4.多表查询
SQL 多表查询:数据整合与分析的强大工具 文章目录 SQL 多表查询:数据整合与分析的强大工具一、 多表查询概述1.1 为什么需要多表查询1.2 多表查询的基本原理 二、 多表查询关系2.1 一对一关系(One-to-One)示例: 2.2 一…...
MCP 基于 TypeScript 的完整示例,包含stdio、sse多种用法和调试,对于构建自己的API工具链很有用
typescript-mcp-demo 这是一个基于 Model Context Protocol (MCP) 的 TypeScript 示例项目,展示了如何创建一个简单的 MCP 服务器,包含基本的工具(tools)和资源(resources)功能。 官网:https:…...
位运算知识
位运算是一种直接对整数在内存中的二进制位进行操作的运算方式。计算机中的整数是以二进制形式存储的,位运算通过操作这些二进制位来实现高效的计算。位运算通常比普通的算术运算更快,因为它直接作用于硬件层面。 以下是几种常见的位运算符及其功能&…...
mybatis高级查询:一对多配置,一次性查出主表和子表中的数据
一、MyBatis高级查询:一对多 MyBatis是一款强大的持久层框架,提供了多种方式来处理关联查询,其中包括一对一和一对多的情况。在本文中,我们将深入探讨一对多关联查询的实现方式。 在MyBatis中配置一对多关系通常涉及到associati…...
美团2024年春招第一场笔试 C++
目录 1,小美的平衡矩阵 2,小美的数组询问 3,小美的MT 4,小美的朋友关系 1,小美的平衡矩阵 【题目描述】 给定一个n*n的矩阵,该矩阵只包含数字0和1。对于 每个i(1<i<n),求在该矩阵中&am…...
XHTMLConverter把docx转换html报java.lang.NullPointerException异常
一.报错 1.报错信息 org.apache.poi.xwpf.converter.core.XWPFConverterException: java.lang.NullPointerExceptionat org.apache.poi.xwpf.converter.xhtml.XHTMLConverter.convert(XHTMLConverter.java:77)at org.apache.poi.xwpf.converter.xhtml.XHTMLConverter.doConve…...
OpenCV 图形API(52)颜色空间转换-----将 NV12 格式的图像数据转换为 RGB 格式的图像
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 将图像从 NV12 (YUV420p) 色彩空间转换为 RGB。该函数将输入图像从 NV12 色彩空间转换到 RGB。Y、U 和 V 通道值的常规范围是 0 到 255。 输出图…...
pojovoDto等概念
Java 中的数据模型概念 POJO (Plain Old Java Object) POJO 是最简单的 Java 对象,不依赖于特定的框架,不实现任何特殊的接口,也不继承特定的类。 特点 具有无参构造函数属性使用 private 修饰提供公共的 getter 和 setter 方法可序列化 …...
COdeTop-206-反转链表
题目 206. 反转链表 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1]示例 2: 输入:head [1,2] 输出:[2,1]示例 …...
线段树讲解(小进阶)
目录 前言 一、线段树知识回顾 线段树区间加减 区间修改维护: 区间修改的操作: 区间修改update: 线段树的区间查询 区间查询: 区间查询的操作: 递归查询过程: 区间查询query: 代码&…...
4082P 信号/频谱分析仪
——新利通仪器仪表—— 4082P丨信号/频谱分析仪 2Hz~110GHz Ceyear 4082系列信号/频谱分析仪在显示平均噪声电平、相位噪声、互调抑制、动态范围、幅度精度和测试速度等方面具备极佳的射频性能。具备强大的频谱分析、符合标准的功率测量套件、I/Q分析、瞬态分析…...
夏季跑步注意
夏季跑步注意 医学专家警示:大众跑者需以安全为先,警惕高温环境下“盲目冲刺”的风险。一些事件再次印证马拉松适宜气温为6-15℃,超过20℃时需主动降速并增加补水量。 所以建议每一位跑友,为了健康的跑步,每年除了做…...
openharmony5.0.0中C++公共基础类测试-线程相关(一)
C公共基础类测试及源码剖析 延续传统,show me the code,除了给出应用示例还重点分析了下openharmony中的实现。 简介 openharmony中提供了C公共基础类库,为标准系统提供了一些常用的C开发工具类,本文分析其实现,并给…...
TDengine 数据订阅设计
简介 数据订阅作为 TDengine 的一个核心功能,为用户提供了灵活获取所需数据的能力。通过深入了解其内部原理,用户可以更加有效地利用这一功能,满足各种实时数据处理和监控需求。 基本概念 主题 与 Kafka 一样,使用 TDengine 数…...
