当前位置: 首页 > news >正文

redis数据库实验

实验一:Redis 安装与操作基础

一、环境准备和redis安装

实验环境

  • Redis版本:3.0.504
  • 操作系统:Windows 64位
  • 默认端口:6379,修改后端口:6381

1. 启动Redis服务与客户端

C:\Users>cd /d d:\redis
d:\redis>redis-server.exe redis.windows.conf
d:\redis>redis-cli
127.0.0.1:6379> ping
PONG

服务启动日志:

Redis 3.0.504 (00000000/0)64bit
Running in standalone mode
Port:6379
PID:228252
[228252]30Apr 08:16:38.651#Server started,Redis version 3.0.504
[228252]30Apr 08:16:38.652*DB Loaded from disk:0.001 seconds
[228252]30Apr 08:16:38.652*The server is now ready to accept connections on port 6379

查看服务信息:

127.0.0.1:6379>INFO server
#Server
redis_version:3.0.504
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:a4f7a6e86f2d60b3
redis_mode :standalone
os:Windows
arch_bits: 64
multiplexing_api:WinSock_IOCP
process_id:228252
tcp_port:6379
config_file:d:\redis\redis.windows.conf

2. 修改配置:端口+连接密码

  1. 修改配置文件redis.windows.conf
requirepass lxj345066
  1. 修改端口为6381,重启服务
Redis3.0.504 (00000000/0)64bit
Running in standalone mode
Port:6381
PID:242132
[242132]06 May 08:54:07.485 #Server started, Redis version 3.0.504
[242132]06 May 08:54:07.487* DB Loaded from disk:0.002seconds
[242132]06 May 08:54:07.487*The server is now ready to accept connections on port 6381
  1. 指定端口和密码登录客户端
d:\redis> redis-cli -p 6381 -a lxj345066
127.0.0.1:6381>

二、Redis基础命令操作

1 字符串(String)操作

命令汇总表

命令分类 命令 功能说明 示例
基础读写 SET key value 设置单个键值对 SET university "ccnu"
GET key 获取单个键的值 GET university
MSET k1 v1 k2 v2 ... 批量设置多个键值对 MSET k1 "v1" k2 "v2" k3 "v3"
MGET k1 k2 ... 批量获取多个键的值 MGET k1 k2 k3
数值增减 INCR key 数值自增1 INCR count
DECR key 数值自减1 DECR count
INCRBY key step 按指定步长增减 INCRBY count 5 / INCRBY count -20
条件/过期设置 SETNX key value 键不存在才赋值 SETNX flag "1"
SETEX key seconds value 设置带过期时间键 SETEX code 60 "8848"
TTL key 查看剩余过期秒数 TTL code
分布式锁 SET key value NX EX seconds 原子创建限时锁 SET order_lock:99 1 NX EX 10

实操命令

image

2 哈希(Hash)操作

适用:存储用户、对象等结构化数据,节省内存

命令汇总

命令 功能说明 示例 结果/说明
HSET key field value 设置单个字段 HSET user:1 name "Tom" (integer)1,新增字段
HGET key field 获取单个字段 HGET user:1 name "Tom"
HMGET key f1 f2 批量查字段 HMGET user:1 name age 依次返回字段值
HGETALL key 获取全部字段 HGETALL user:1 返回所有field-value
HINCRBY key field step 字段数值增减 HINCRBY user:1 score 15 返回修改后数值
HEXISTS key field 判断字段存在 HEXISTS user:1 name 存在返回1

实操

image

批量导入问题:txt导入出现中文乱码,原因为中文输入法、配置多余注释;切换英文输入法、删除注释后正常导入。

3 列表(List)操作

双向链表;LPUSH+LPOP=栈(后进先出),RPUSH+LPOP=队列(先进先出)

分类 命令 功能说明 示例 执行结果说明
基础操作 DEL key 删除列表 DEL mylist 0 = 键不存在
LPUSH key value 头部插入 LPUSH mylist A 返回列表长度
RPUSH key value 尾部插入 RPUSH mylist C 返回列表长度
LRANGE key start stop 区间遍历 LRANGE mylist 0 -1 -1 代表末尾
弹出操作 LPOP key 头部弹出 LPOP mylist 返回弹出元素
阻塞弹出 BLPOP key timeout 阻塞弹出 BLPOP mylist 0 0 表示永久阻塞

脚本导入执行

d:\redis>redis-cli -p 6381 -a lxj345066<d:\List.txt

image

4 集合(Set):无序、元素唯一,支持交并差运算

分类 命令 功能说明 示例 执行结果说明
基础 DEL key 删除集合 DEL myset 0代表无此集合
SADD key member 添加元素(自动去重) SADD myset A 成功返回新增数量
SISMEMBER key member 判断元素存在 SISMEMBER myset A 存在返回1
集合运算 SINTER k1 k2 交集 SINTER setA setB 返回共有元素
SUNION k1 k2 并集 SUNION setA setB 合并去重
SDIFF k1 k2 差集 SDIFF setA setB k1独有元素
随机 SPOP key 随机删除元素 SPOP pool 3.0版本不支持SPOP key num参数

实操

image
由于下载的版本太低无法传入多个参数,只能一个个传入:
image

5 有序集合(ZSet)操作

元素唯一,根据score分数自动排序,常用于排行榜、延时队列

分类 命令 功能说明 示例 执行结果说明
基础 ZADD key score member 添加带分数元素 ZADD leaderboard 1500 "PlayerA" 返回新增个数
排名 ZRANK key member 升序索引排名 ZRANK leaderboard "PlayerB" 返回下标
ZREVRANK key member 降序索引排名 ZREVRANK leaderboard "PlayerB" 倒序下标
范围 ZRANGE start stop 按下标升序取 ZRANGE leaderboard 0 2 升序元素列表
ZRANGEBYSCORE min max 按分数筛选 ZRANGEBYSCORE 1000 2000 区间内数据
分数 ZSCORE key member 查询分数 ZSCORE leaderboard "PlayerB" 返回对应分值
ZINCRBY num member 分数增减 ZINCRBY leaderboard 100 "PlayerA" 返回新分数
延时队列 ZADD key ts task 时间戳做分数 ZADD delay_queue 1715000000 "task:1" 到期自动筛选

实操

image

6 综合场景实操

#文章浏览计数
INCR article:1001:views
#登录会话(过期1h)
SETEX session:token123 3600 "{\"userId\":88,\"role\":\"admin\"}"
#购物车Hash
HSET cart:u123 item:992 2
HINCRBY cart:u123 item:992 1
#用户信息流List
LPUSH feed:userA "weibo:12345" "weibo:12346" "weibo:12347"
#热搜排行榜ZSet
ZINCRBY hotsearch 1 "Redis"
ZINCRBY hotsearch 1 "MongoDB"
ZINCRBY hotsearch 1 "Cassandra"
ZREVRANGE hotsearch 0 9 WITHSCORES

image

三、思考题

1 业务键命名规范:业务域:实体类型:实体ID:属性

37ec2390369f882d3c5be4ac2d5c11fe_720

场景 命令
用户昵称Alice SET mall:user:1001:nickname "Alice"
订单状态paid SET mall:order:2024A001:status "paid"
商品库存100 SET mall:goods:9527:stock 100

2 手机验证码实现

79f78c19c1a45a3a2281e7b180d25644_720

设置倒计时

#设置60秒过期验证码
SET phone:verify:19855123449:code "6688" EX 60
#判断验证码是否存在
EXISTS phone:verify:13800138000:code
#查看剩余过期时间
TTL phone:verify:13800138000:code

3 字符串批量优化

MSET k1v1,k2v2,k3v3
MSET app:name "MyApp" app:version "1.0" app:author "DevTeam"

image

4 Hash与String(JSON)选型对比

存储方式 优点 缺点 适用场景
String(JSON) 1.结构简单
2.方便全量读取
修改单个字段需全量覆盖 极少修改字段、整对象读取
Hash 1.单字段原子更新
2.按需读取节省带宽
不支持多层嵌套JSON 频繁局部修改对象属性

实操对比:

#String json存储
SET user:info:1001 "{\"name\":\"zhangsan\",\"age\":20}"
#Hash存储
HMSET user:1001 name zhangsan age 20 city beijing score 0
HINCRBY user:1001 score 10
HGETALL user:1001

5 List实现栈&队列

左为首部,左进左出-》先进后出-》栈
右侧插入,左侧取出-》队列

BLPOP 会直接从左侧弹出第一个元素 task1,并返回:
第一行:tasks(弹出的元素来自哪个列表)
第二行:task1(弹出的元素内容)
执行后,列表变成:[task1, task2, task3]

如果列表为空:它会一直阻塞,直到:插入了新元素,它就会立刻弹出
超时时间到( BLPOP tasks 5,就是最多等 5 秒),超时后返回 nil。

  • 栈(后进先出)LPUSH + LPOP
  • 队列(先进先出)RPUSH + LPOP
  • BLPOP阻塞弹出:无数据阻塞等待,BLPOP key 0永久阻塞;BLPOP key 5最多等待5s超时返回nil
LPUSH tasks "task1" "task2" "task3"
LPOP tasks
RPUSH tasks "task1" "task2" "task3"
BLPOP tasks 0

image

6 Set实现社交共同好友

利用SINTER交集计算双方共同好友、SUNION好友推荐、SDIFF独有好友。
image

7 ZSet游戏排行榜

玩家 初始分数 加分后分数 倒序排名
PlayerB 2300 2300 0(第1名)
PlayerC 1800 1800 1(第2名)
PlayerA 1500 1700 2(第3名)
ZADD game:ranking 1500 "PlayerA" 2300 "PlayerB" 1800 "PlayerC"
ZREVRANK game:ranking "PlayerB"
ZINCRBY game:ranking 200 "PlayerA"
ZREVRANGE game:ranking 0 1 WITHSCORES

image

http://www.jsqmd.com/news/1051121/

相关文章:

  • 数据库实验-MongoDB安装和操作
  • 如何快速掌握BlenderGIS:从零开始创建专业级3D地理可视化模型
  • 2026汕头代理记账公司价目详解:了解服务内容与费用 - 企业品牌
  • vLLM技术架构优化:构建企业级高性能LLM推理引擎的完整方案
  • 嵌入式GUI开发:emWin SWIPELIST控件实战指南与性能优化
  • 2026汕头代理记账公司靠谱吗?业内专家权威解答 - 企业品牌
  • Barlow字体贡献指南:如何参与越南语支持等本地化开发
  • MMKV如何解决移动端键值存储的性能瓶颈:跨平台存储架构深度解析
  • 嵌入式GUI开发实战:emWin中HEADER与ICONVIEW控件详解
  • 10分钟掌握AlphaFold3-PyTorch:从零开始预测蛋白质三维结构
  • 番禺大型搬家公司推荐 市桥大石南村全域搬迁服务指南 - 从来都是英雄出少年
  • 黄埔区正规搬家公司精选 知识城新塘就近上门搬迁指南 - 从来都是英雄出少年
  • CANN/GE内存模型描述获取API
  • 推荐一款超级实用的软件抖掌柜 我做抖店选品搬家上货一件代发的高效工具 - 抖掌柜
  • 综合性品牌控价公司推荐:2026全渠道、全品类、全链路综合治理标杆 - GrowthUME
  • 黄江企业如何在豆包获得推荐排名?2026年GEO优化实战全攻略 - 东莞选校指南
  • m4s-converter:如何5分钟内将B站缓存视频变成真正的个人数字资产
  • MySQL高频考题之事务并发类
  • Qwen3.5-9B原生多模态模型:笔记本级部署与跨模态推理实战
  • CSS缓动函数完全掌握:从新手到专家的情感化动画设计指南
  • 2026汕头代理记账公司服务详解:提高效率的秘诀是什么? - 企业品牌
  • 2026年东莞精密线切割模具加工厂家精选指南:工艺稳定与交期靠谱的精密加工供应商选择指南 - 海棠依旧大
  • 番茄小说离线阅读神器:三步打造你的个人数字图书馆
  • Gemini Omni Flash异步API实战:0.035元/秒视频生成方案
  • 实测整理:南京GEO服务商避坑清单,6月最新套路预警与靠谱机构盘点 - 936品牌测评网
  • 合肥高科经济技工学校招生办电话、报名入口、择校指南完整版 - 教育为先
  • 抖店一件代发上货软件推荐:抖掌柜,新手到店群全阶段适配的合规铺货工具 - 抖掌柜
  • 7步精通Nintendo Switch转储工具:NxDumpTool完整操作指南
  • LyricsX桌面歌词插件:打造你的Mac音乐沉浸式体验
  • 技术突破:PyWxDump如何破解现代即时通讯数据解析的技术壁垒