• Redisson 的 watchdog 什么情况下可能会失效?
    Redisson 的 watchdog 什么情况下可能会失效?
  • Redisson 中为什么要废弃 RedLock,该用啥?
    Redisson 中为什么要废弃 RedLock,该用啥?
  • Redis Cluster 中使用事务和 Iua 有什么限制?
    Redis Cluster 中使用事务和 Iua 有什么限制?
  • Redisson解锁失败,watchdog会不会一直续期下去?
    在redis中,Redisson解锁失败,watchdog会不会一直续期下去?
  • [问题求助] Redis如何高效安全的遍历所有key?
    Redis如何高效安全的遍历所有key?
  • [问题求助] redis实现分布式锁的时候,哪些问题需要去考虑呢?
    redis实现分布式锁的时候,哪些问题需要去考虑呢?
  • [问题求助] 如何用setnx实现一个可重入锁?
    如果用setnx来实现分布式锁比较容易,但是如何用setnx实现一个可重入锁?
  • [问题求助] 如何使用redis来实现乐观锁呢?
    如何使用redis来实现乐观锁呢?
  • [问题求助] 为什么redis不支持回滚?
    为什么redis不支持回滚?如果出现了错误也无法回滚,这是为啥?这么设计有什么好处吗?
  • [问题求助] Redisson的lock和tryLock有什么区别?
    Redisson的lock和tryLock有什么区别?
  • [问题求助] Redis的事务和Lua之间有哪些区别?
    Redis的事务和Lua之间有哪些区别?lua脚本可以保证原子性吗?这个原子性和mysql中的原子性是一样的吗?
  • [问题求助] redis的Pipeline是什么?
    redis的Pipeline是什么?它保证原子性吗?和事务又有什么区别呢?
  • [技术干货] Redis入门教程:从基础到实战的完整指南
    Redis入门教程:从基础到实战的完整指南作为当今最流行的内存数据库,Redis凭借其极致的性能、丰富的数据结构和灵活的部署方式,已成为高并发场景下的标配组件。本文将从安装部署、核心概念、基础命令到实战案例,为开发者提供一站式入门指南。一、环境部署:5分钟快速启动1. Linux系统安装(Ubuntu示例)# 添加官方PPA仓库 sudo add-apt-repository ppa:redislabs/redis sudo apt update # 安装Redis服务器与客户端 sudo apt install redis-server # 启动服务并验证 sudo systemctl start redis-server redis-cli ping # 返回"PONG"即安装成功 2. Docker容器化部署(推荐开发环境)docker run --name my-redis -p 6379:6379 -d redis:latest # 进入容器交互终端 docker exec -it my-redis redis-cli3. 配置文件关键参数# /etc/redis/redis.conf 核心配置 bind 0.0.0.0 # 允许远程连接(生产环境建议限制IP) protected-mode no # 关闭保护模式(需配合密码使用) requirepass yourpassword # 设置认证密码 maxmemory 2gb # 内存限制 maxmemory-policy allkeys-lru # 内存淘汰策略 appendonly yes # 开启AOF持久化二、核心数据结构与操作1. 字符串(String)场景:缓存、计数器、分布式锁# 基本操作 SET username "redis_user" EX 3600 # 设置带过期时间的键 GET username INCR page_views # 原子递增 MSET key1 "val1" key2 "val2" # 批量设置 MGET key1 key2 # 实战案例:短信验证码 SETEX sms:13800138000 300 "1234" # 5分钟有效期 GET sms:138001380002. 哈希(Hash)场景:存储对象属性# 用户信息存储 HSET user:1001 name "Alice" age 28 email "alice@example.com" HGETALL user:1001 HINCRBY user:1001 age 1 # 字段递增 HMGET user:1001 name age # 性能对比:相比String存储JSON,Hash减少序列化开销 3. 列表(List)场景:消息队列、最新消息、排序集合# 微博时间线 LPUSH user:1001:timeline "post1" "post2" "post3" LRANGE user:1001:timeline 0 2 # 获取最新3条 RPOP user:1001:timeline # 消费队列消息 # 阻塞式弹出(实现任务队列) BLPOP task_queue 10 # 等待10秒 4. 集合(Set)场景:标签系统、去重、共同关注# 用户兴趣标签 SADD user:1001:tags "music" "sports" "reading" SMEMBERS user:1001:tags SINTER user:1001:tags user:1002:tags # 交集计算 # 抽奖系统实现 SRANDMEMBER winners 5 # 随机抽取5个中奖者 5. 有序集合(ZSet)场景:排行榜、优先级队列、范围查询# 游戏排行榜 ZADD leaderboard "player1" 1000 "player2" 850 "player3" 1200 ZREVRANGE leaderboard 0 2 WITHSCORES # 显示前3名 ZINCRBY leaderboard "player1" 50 # 增加分数 ZCOUNT leaderboard 900 1100 # 分数段统计 三、高级特性实战1. 持久化机制方案RDB(快照)AOF(日志)触发方式手动/定时自动每条命令追加文件格式二进制压缩文本协议恢复速度快(单文件加载)慢(需重放命令)数据安全性可能丢失最后一次快照后数据最多丢失1秒数据(fsync策略)配置建议:# 混合持久化(Redis 4.0+) aof-use-rdb-preamble yes2. 发布订阅模式# 频道订阅 SUBSCRIBE news:sports # 客户端1订阅 PUBLISH news:sports "World Cup Final" # 客户端2发布 # 模式匹配(支持通配符) PSUBSCRIBE news.* # 订阅所有新闻频道 3. Lua脚本编程场景:原子操作、复杂事务-- 库存扣减脚本(避免超卖) local stock = tonumber(redis.call('GET', KEYS[1])) if stock and stock >= tonumber(ARGV[1]) then redis.call('DECRBY', KEYS[1], ARGV[1]) return 1 end return 0 执行方式:EVAL "script内容" 1 product:1001 5 # 参数:脚本、键数量、键、参数 4. 集群部署方案# 使用redis-cli创建3主3从集群 redis-cli --cluster create 192.168.1.1:6379 \ 192.168.1.2:6379 192.168.1.3:6379 \ 192.168.1.1:6380 192.168.1.2:6380 \ 192.168.1.3:6380 --cluster-replicas 1 # 集群管理命令 CLUSTER NODES # 查看节点信息 CLUSTER KEYSLOT "user:1001" # 计算键的槽位 四、生产环境最佳实践1. 性能优化技巧内存管理:# 查看内存使用详情 INFO memory # 使用压缩列表优化小集合存储 config set hash-max-ziplist-entries 512 连接池配置(Java示例):JedisPoolConfig poolConfig = new JedisPoolConfig(); poolConfig.setMaxTotal(100); // 最大连接数 poolConfig.setMaxIdle(20); // 最大空闲连接 JedisPool jedisPool = new JedisPool(poolConfig, "localhost", 6379); 2. 安全防护措施防火墙规则:ufw allow from 192.168.1.0/24 to any port 6379 数据加密:使用Stunnel封装TLS连接考虑Twemproxy等代理层加密3. 监控告警方案Prometheus监控指标:# prometheus.yml配置 scrape_configs: - job_name: 'redis' static_configs: - targets: ['redis-server:9121'] # redis_exporter地址 关键监控项:instantaneous_ops_per_sec:QPSused_memory_rss:实际内存占用keyspace_hits:缓存命中率五、常见问题解决方案缓存穿透:方案:布隆过滤器 + 空值缓存# 使用Redis模块实现布隆过滤器 BF.ADD user:filter "non_exist_id" BF.EXISTS user:filter "non_exist_id" 缓存雪崩:方案:多级缓存 + 随机过期时间# 设置随机过期时间(Lua脚本示例) local expire = math.random(300, 900) redis.call('SETEX', KEYS[1], expire, ARGV[1]) 大Key处理:识别命令:redis-cli --bigkeys -i 0.1 # 扫描大键(低流量时段执行) 拆分方案:将大Hash拆分为多个小Hash结语Redis的强大不仅体现在其多样化的数据结构,更在于其作为分布式系统基石的生态体系。从本文介绍的单机部署到集群方案,开发者可以逐步构建起支持百万级QPS的缓存系统。建议进一步探索:Redis Stream实现消息队列RediSearch全文搜索引擎模块RedisTimeSeries时序数据库模块掌握Redis不仅是掌握一个缓存工具,更是获得了解高性能系统设计的关键视角。立即开始您的Redis实战之旅,解锁分布式系统的无限可能!
  • 华为云中间件部署和资源管理方面的问题
    各位专家,有几个关于华为云中间件部署和资源管理方面的问题,还请帮忙解答下:1.当前中间件组件(如 Kafka、Redis 等)是采用 Kubernetes 还是 Docker 进行容器化部署?底层运行环境是物理机还是虚拟机?2.当前中间件集群是通过 Operator 进行生命周期管理,还是使用了自研的平台产品?如果是后者,平台产品名称是什么,具备哪些管理能力?3.中间件组件的资源是否与其他业务系统共享?还是为其划分了独立的物理资源池或专属节点?是否存在混部的情况?
  • [优秀博文] Redis持久化机制深度解析:RDB与AOF的完美平衡
    Redis作为内存数据库,其持久化机制是确保数据安全的关键。本文将全面剖析Redis的两种持久化方式——RDB和AOF,帮助您根据业务场景选择最佳方案。一、Redis持久化概述Redis提供两种主要的持久化方式:RDB(Redis Database):定时生成数据快照AOF(Append Only File):记录所有写操作命令两种方式可单独使用,也可组合使用(Redis 4.0+推荐)二、RDB持久化详解核心机制通过SAVE(阻塞)或BGSAVE(后台)命令创建数据快照二进制压缩存储,文件名为dump.rdb触发方式# 手动触发 SAVE # 同步保存,阻塞其他操作 BGSAVE # 异步保存,fork子进程处理 # 自动触发(redis.conf配置) save 900 1 # 900秒内至少1个key变化 save 300 10 # 300秒内至少10个key变化 save 60 10000 # 60秒内至少10000个key变化 优势与局限优点:紧凑的单文件备份恢复速度快(大数据量场景优势明显)最大化Redis性能(不影响主进程)缺点:可能丢失最后一次快照后的数据大数据量时fork操作可能阻塞服务三、AOF持久化详解核心机制记录每个写操作命令(文本格式)支持三种同步策略:appendfsync always # 每个写命令都同步 appendfsync everysec # 每秒同步(默认) appendfsync no # 由操作系统决定 文件重写机制定期压缩AOF文件(移除冗余命令)触发方式:# 手动触发 BGREWRITEAOF # 自动触发(redis.conf配置) auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb优势与局限优点:数据安全性更高(最多丢失1秒数据)可读性强(文本格式)后台重写不影响服务缺点:文件体积通常大于RDB恢复速度较慢(需要重放所有命令)四、混合持久化(Redis 4.0+)创新方案结合RDB和AOF优势重写时先以RDB格式保存当前数据,再将增量命令以AOF格式追加配置方式:aof-use-rdb-preamble yes 五、生产环境最佳实践关键配置建议# RDB配置 dbfilename dump.rdb dir /var/lib/redis stop-writes-on-bgsave-error yes # AOF配置 appendonly yes appendfilename "appendonly.aof" 灾难恢复方案定期备份RDB/AOF文件到异地使用redis-check-aof和redis-check-rdb工具验证文件完整性性能调优技巧# 当内存超过此值时启用RDB压缩 rdbcompression yes rdbchecksum yes # AOF重写期间不做fsync no-appendfsync-on-rewrite yes 六、选型决策指南考量维度RDB优势场景AOF优势场景数据安全性允许分钟级丢失要求秒级保护恢复速度大数据量快速恢复小数据量适用写入性能更高稍低(取决于配置)存储空间更紧凑通常更大运维复杂度简单需要监控文件增长推荐方案:多数生产环境使用RDB+AOF混合模式,兼顾安全性与性能。七、常见问题排查Q:AOF文件过大怎么办?A:手动执行BGREWRITEAOF或调整自动重写阈值Q:持久化导致性能下降?A:检查磁盘IO性能,考虑使用SSD;调整appendfsync策略Q:如何从RDB切换到AOF?# 1. 备份当前RDB文件 # 2. 修改配置启用AOF # 3. 执行CONFIG SET appendonly yes # 4. 等待首次AOF文件生成 结语Redis的持久化机制如同数据的"双保险",理解其工作原理和适用场景对构建可靠系统至关重要。建议开发者根据业务对数据安全性和性能的要求,选择合适的持久化策略,并通过监控工具定期检查持久化状态,确保万无一失。
总条数:553 到第 页
上滑加载中