一、Redis全局命令详解

1.1 键查看与管理

  • dbsize:高效获取键总数(O(1)操作)

127.0.0.1:6379> dbsize
(integer) 8
  • keys:生产环境避免使用(O(n)操作)

# 查找user开头的键(不推荐生产使用)
127.0.0.1:6379> keys user:*
  • exists:检查键是否存在

127.0.0.1:6379> exists user:1
(integer) 1

1.2 键删除与过期

  • del:删除单个或多个键

# 删除多个键
127.0.0.1:6379> del user:1 user:2
(integer) 2
  • expire:设置过期时间(秒)

127.0.0.1:6379> set session:1 "data"
OK
127.0.0.1:6379> expire session:1 300
(integer) 1
  • ttl:查看剩余生存时间

127.0.0.1:6379> ttl session:1
(integer) 287  # 剩余秒数

1.3 高级过期控制

  • pexpire:毫秒级过期设置

127.0.0.1:6379> pexpire temp:key 5000
(integer) 1
  • expireat:指定时间戳过期

# 设置今晚22:00过期
127.0.0.1:6379> expireat event:1 1730000000
(integer) 1

过期时间陷阱:修改键值会清除过期时间

127.0.0.1:6379> set user:1 "John" ex 60
OK
127.0.0.1:6379> ttl user:1
(integer) 57
127.0.0.1:6379> set user:1 "Mike"
OK
127.0.0.1:6379> ttl user:1
(integer) -1  # 永久有效

1.4 键重命名注意事项

  • rename:可能覆盖现有键

127.0.0.1:6379> set old_key "value1"
OK
127.0.0.1:6379> set new_key "value2"
OK
127.0.0.1:6379> rename old_key new_key
OK
127.0.0.1:6379> get new_key
"value1"  # 原值被覆盖
  • renamenx:安全重命名(仅当新键不存在时)

127.0.0.1:6379> renamenx safe_key new_key
(integer) 0  # 重命名失败

二、Redis数据类型深度解析

2.1 字符串(String)

核心命令:

# 批量操作提升性能
127.0.0.1:6379> mset counter:1 100 counter:2 200
OK# 原子计数器
127.0.0.1:6379> incr counter:1
(integer) 101# 分布式锁实现
127.0.0.1:6379> setnx lock:order 1
(integer) 1  # 获取锁成功

使用场景:

  • 缓存热点数据

  • 分布式Session存储

  • 计数器(点击量/浏览量)

  • 简单限流系统

2.2 哈希(Hash)

对象存储最佳实践:

# 存储用户对象
127.0.0.1:6379> hmset user:1001 name "John" age 30 city "New York"
OK# 获取部分字段
127.0.0.1:6379> hmget user:1001 name age
1) "John"
2) "30"# 字段自增
127.0.0.1:6379> hincrby user:1001 age 1
(integer) 31

vs 字符串存储方案:

方案优点缺点
哈希存储字段级访问,内存效率高不支持复杂查询
JSON序列化直观,结构清晰读写需序列化,无法部分更新
多键存储灵活,支持独立过期键数量膨胀,管理复杂

2.3 列表(List)

实现队列与栈:

# 消息队列实现
# 生产者
127.0.0.1:6379> lpush msg:queue "task1"
(integer) 1# 消费者(阻塞式)
127.0.0.1:6379> brpop msg:queue 30
1) "msg:queue"
2) "task1"# 栈实现
127.0.0.1:6379> lpush stack "A"
127.0.0.1:6379> lpush stack "B"
127.0.0.1:6379> lpop stack
"B"

高级应用:

  • 文章分页列表

  • 最近联系人列表

  • 有限集合(LTRIM)

2.4 集合(Set)

标签系统实现:

# 用户标签
127.0.0.1:6379> sadd user:1001:tags "sports" "music"
(integer) 2# 内容标签
127.0.0.1:6379> sadd news:1001:tags "politics" "economics"# 查找共同兴趣
127.0.0.1:6379> sinter user:1001:tags user:1002:tags
1) "sports"

抽奖系统:

# 参与抽奖
127.0.0.1:6379> sadd lottery:2023 "user1001" "user1002" "user1003"# 随机抽取3名中奖者
127.0.0.1:6379> srandmember lottery:2023 3
1) "user1002"
2) "user1001"
3) "user1003"

2.5 有序集合(Zset)

排行榜实现:

# 添加玩家分数
127.0.0.1:6379> zadd leaderboard 3500 "player1"
127.0.0.1:6379> zadd leaderboard 4200 "player2"# 更新分数
127.0.0.1:6379> zincrby leaderboard 500 "player1"
"4000"# 获取Top3
127.0.0.1:6379> zrevrange leaderboard 0 2 withscores
1) "player2"
2) "4200"
3) "player1"
4) "4000"

多维度评分:

# 计算用户综合评分(50%行为分+50%消费分)
127.0.0.1:6379> zinterstore user:composite 2 user:behavior_scores user:spending_scores weights 0.5 0.5 aggregate sum

三、Redis最佳实践

3.1 键命名规范

推荐格式: 业务名:对象名:id[:属性]
示例: ecommerce:user:1001:profile

优势:

  • 避免键冲突

  • 结构清晰可维护

  • 支持部分匹配查询

3.2 性能优化要点

  1. 避免大Key:

    • 字符串值 < 10KB

    • 集合元素 < 5000

  2. 批量操作:

    # 低效方式
    for i in {1..100}; do redis-cli set key:$i value; done# 高效方式
    redis-cli mset $(printf "key:%d value " {1..100})
  3. 合理使用数据结构:

    场景推荐结构
    对象存储Hash
    排行榜Zset
    消息队列List
    标签系统Set

3.3 高级特性应用

位图(Bitmap):

# 用户签到系统
127.0.0.1:6379> setbit sign:user:1001 0 1  # 第1天签到
127.0.0.1:6379> bitcount sign:user:1001    # 总签到次数

地理空间(Geo):

# 添加位置
127.0.0.1:6379> geoadd shops 116.404 39.915 "shopA"# 查找5km内的店铺
127.0.0.1:6379> georadius shops 116.400 39.910 5 km
1) "shopA"

四、实战:电商场景Redis应用

4.1 购物车实现(Hash)

# 添加商品
127.0.0.1:6379> hset cart:user1001 prod1001 2
(integer) 1# 增加数量
127.0.0.1:6379> hincrby cart:user1001 prod1001 1
(integer) 3# 获取全部商品
127.0.0.1:6379> hgetall cart:user1001
1) "prod1001"
2) "3"

4.2 秒杀系统(String+List)

# 商品库存预热
127.0.0.1:6379> set stock:prod2023 100# 扣减库存(Lua脚本保证原子性)
local stock = redis.call('get', KEYS[1])
if stock and tonumber(stock) > 0 thenredis.call('decr', KEYS[1])redis.call('lpush', 'seckill:success', ARGV[1])return 1
end
return 0

4.3 好友推荐(Set)

# 计算共同好友
127.0.0.1:6379> sinter friends:user1001 friends:user1002# 推荐可能认识的人
127.0.0.1:6379> sdiff friends:user1002 friends:user1001

总结

Redis作为高性能的内存数据库,其核心价值在于合理利用不同数据结构解决特定场景问题:

  1. 字符串:简单缓存、计数器首选

  2. 哈希:对象存储最佳选择,节省内存

  3. 列表:消息队列、最新列表实现

  4. 集合:标签系统、社交关系处理

  5. 有序集合:排行榜、优先级队列场景

提示:本文所有命令均在Redis 6.x版本验证,不同版本命令支持可能略有差异。生产环境建议使用连接池管理连接,避免频繁创建连接开销。

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【网络】Linux 内核优化实战 - net.ipv4.tcp_mem

目录 参数结构与含义与缓冲区大小参数的区别内存管理机制详解1. 内存使用状态与触发逻辑2. 与其他参数的协同关系 典型调整场景与配置示例场景 1&#xff1a;高并发低带宽服务&#xff08;如 API 网关&#xff0c;数万连接但单连接流量小&#xff09;场景 2&#xff1a;高带宽低…

插入排序的简单介绍

今天给大家简单介绍一下插入排序。 插入排序&#xff0c;其基本思想是将未排序的数据逐步插入到已排序序列中的合适位置&#xff0c;从而使整个序列逐渐有序。 下面我们看一个排序的过程&#xff08;升序&#xff09;&#xff0c;给定一个int类型的数组&#xff0c;利用插入排…

docker搭建minio和python使用minio

1 准备工作 1.创建目录 [rootk8s-storage tmp]# mkdir -pv minio/{data,conf} mkdir: created directory ‘minio’ mkdir: created directory ‘minio/data’ mkdir: created directory ‘minio/conf’[rootk8s-storage minio]# chmod 777 -R *2.生成https证书 openssl req…

开源代码修复新标杆——月之暗面最新开源编程模型Kimi-Dev-72B本地部署教程,自博弈修复 Bug

一、介绍 Kimi-Dev-72B是由月之暗面&#xff08;Moonshot AI&#xff09;最新开源的AI编程模型&#xff0c;专为软件工程任务设计&#xff0c;并登顶 SWE-bench Verified 基准测试榜首&#xff0c;超越 DeepSeek-R1 等模型&#xff0c;成为当前开源代码模型的 SOTA&#xff1a…

微服务架构之基本设计原则

作为系统架构师&#xff0c;在进行架构设计时需要遵循一系列经过实践验证的核心原则&#xff0c;这些原则贯穿于需求分析、模块划分、技术选型和系统演进的全流程。以下从核心设计原则、架构特性原则、工程实践原则三个维度&#xff0c;结合具体案例展开说明&#xff1a; 一、…

Wpf布局之WrapPanel面板!

文章目录 前言一、引言二、使用步骤 前言 Wpf布局之WrapPanel面板&#xff01; 一、引言 WrapPanel面板以一次一行或一列的方式布置控件&#xff01; 二、使用步骤 WrapPanel面板Orientation属性默认是"Horizontal"&#xff0c;将控件从左向右进行排列&#xff…

QEMU运行RISCV版Ubuntu

宿主机为ubuntu20.04&#xff0c;推荐ubuntu 20.04 risc-v版&#xff0c; 宿主机为ubuntu24.04&#xff0c;推荐ubuntu 24.04 risc-v版&#xff0c; 安装ubuntu 24.04 risc-v基本步骤&#xff1a; 1&#xff0c; sudo apt update sudo apt install opensbi qemu-system-misc…

【LeetCode 热题 100】239. 滑动窗口最大值——(解法一)滑动窗口+暴力解

Problem: 239. 滑动窗口最大值 题目&#xff1a;给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值 。 文章目录 整体思路完整代码时空…

攻防世界-MISC-red_green

知识点 1.pngLSB隐写 步骤 方法一&#xff1a;zsteg 打开附件&#xff0c;是一张图片&#xff0c;打开看不懂&#xff08;其实由两种颜色构成&#xff0c;0和1&#xff09;&#xff0c;用zsteg查看&#xff0c;发现隐写了一张jpg图片&#xff0c;使用zsteg提取。打开jpg图片…

归因问答-如何进行自动评估

归因模型函数g的形式化表示 输入&#xff1a;用户问题q 输出&#xff1a;(a, p), 其中a为答案&#xff0c;p为原始文章中支持答案a的段落。 1&#xff09;单样本归因 针对输入问题q&#xff0c;如何评估归因模型g输出中段落p是对答案a的正确归因。 在论文arributed qa中&…

基于vue+View UI的组织机构选择

1、效果 1、代码 <template><Button type"primary" click"modal true">点击选择</Button><div v-if"selectedArr.length > 0"><p>已选择项&#xff1a;</p><div v-for"(item, index) in sel…

人大金仓Kingbase数据库KSQL 常用命令指南

人大金仓Kingbase数据库KSQL 常用命令指南 1. 连接与基本操作 1.1 连接数据库 # 基础语法 ksql -U 用户名 -d 数据库名 -h 主机名 -p 端口号 # 示例 ksql -U system -d testdb -h 127.0.0.1 -p 543211.2 执行SQL脚本 # 基础语法 ksql -U <用户名> -W -f <SQL脚本文…

从萌芽到领航:广州华锐互动的 AR 奋进之路​

在 AR 技术这片充满无限可能的领域中&#xff0c;广州华锐互动数字科技有限公司宛如一颗耀眼的新星&#xff0c;熠熠生辉。广州华锐互动成立于 2008 年&#xff0c;在那个 AR 技术尚处于萌芽阶段、大众认知度还较低的时期&#xff0c;广州华锐互动便凭借着前瞻性的战略眼光和对…

redisson看门狗实现原理

Redisson 看门狗&#xff08;Watch Dog&#xff09;机制实现原理 Redisson 的 Watch Dog 机制是分布式锁的核心组件之一&#xff0c;用于 自动续期 锁的过期时间&#xff0c;防止业务逻辑执行时间超过锁的持有时间&#xff0c;导致锁提前释放而引发并发问题。以下是其实现原理…

C++中explicit详解

文章目录 1. **防止隐式类型转换**示例1&#xff1a;没有使用explicit示例2&#xff1a;使用explicit 2. **防止拷贝初始化**示例1&#xff1a;没有使用explicit示例2&#xff1a;使用explicit 3. **防止隐式类型转换的链式调用**示例1&#xff1a;没有使用explicit示例2&#…

代码部落 20250629 CSP-J复赛 模拟赛

网址&#xff1a;代码部落 一&#xff1a; 相濡以沫 β&#xff08;代码请自写&#xff09; 签到题&#xff0c;如果a[i]<a[i1] a[i]a[i1],反之&#xff0c;直接输出No 二 共同富裕&#xff08;代码请自写&#xff09; 签到题&#xff0c;用sort前缀和 如果最富有的个…

零基础学习RabbitMQ(5)--工作模式(1)

在前面的章节中我们简单介绍过一些RabbitMQ的工作模式&#xff0c;RabbitMQ共提供了七种工作模式进行消息传递&#xff0c;这里我们来详细介绍。 1. Simple(简单模式) P&#xff1a;生产者 C&#xff1a;消费者 特点&#xff1a;一个生产者一个消费者&#xff0c;消息只能被…

Android Liunx ffmpeg交叉编译

本文的交叉编译在window上安装VMware&#xff0c;使用Ubuntu20.4进行的编译。 一、安装NDK&#xff1a; 1、下载解压&#xff1a; 在NDK 下载 | Android NDK | Android Developers下载Liunx平台的NDK。 本人下载的是android-ndk-r27c-linux.zip版本的。 解压android-ndk-r…

极海G32R501双向数字电源解决方案 赋能AI服务器及电源应用创新

6月26日&#xff0c;Big-Bit商务网主办的2025中国电子热点解决方案创新峰会在东莞召开&#xff0c;峰会以“核心智变、能效跃迁”为主题&#xff0c;聚焦光储充、800V超充、AI服务器、BMS、智能汽车照明与汽车中小电机电控应用。 峰会期间&#xff0c;珠海极海半导体有限公司&a…

【修电脑的小记录】连不上网

问题概述 问题表现为&#xff1a;电脑连接网络后&#xff0c;显示已连接但无法上网。 环境信息&#xff1a; - DNS 修改无效&#xff0c;ping 外网&#xff08;8.8.8.8&#xff09;失败 - 尝试重置网络参数、多种命令无果 &#x1f50d; 排查过程 1. 执行以下命令重置网络&a…