当前位置: 首页 > 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.gsyq.cn/news/1563037.html

相关文章:

  • MMKV如何解决移动端键值存储的性能瓶颈:跨平台存储架构深度解析
  • 推荐一款超级实用的软件抖掌柜 我做抖店选品搬家上货一件代发的高效工具 - 抖掌柜
  • 黄埔区正规搬家公司精选 知识城新塘就近上门搬迁指南 - 从来都是英雄出少年
  • 番禺大型搬家公司推荐 市桥大石南村全域搬迁服务指南 - 从来都是英雄出少年
  • CANN/GE内存模型描述获取API
  • m4s-converter:如何5分钟内将B站缓存视频变成真正的个人数字资产
  • Qwen3.5-9B原生多模态模型:笔记本级部署与跨模态推理实战
  • 合肥高科经济技工学校招生办电话、报名入口、择校指南完整版 - 教育为先
  • 2026年值得信赖英国留学机构推荐:五家优选深度解析 - 科技焦点
  • 终极Lens日志监控指南:3步实现Kubernetes应用高效运维
  • 老邮票长效保存科普,养护到位有效保值 - 深鉴新闻
  • DiskGenius 彻底清除扇区数据
  • VisionPro之位置修正
  • 2026年美国留学申请机构推荐:五家优选品牌深度解析 - 科技焦点
  • 进阶 WireShark 流量分析|完整业务流量数据包深度解析实训
  • 如何快速无损转换B站缓存视频:m4s转MP4终极方案
  • 大湾区医疗健康EMBA实测解析与科学选型指南
  • 基于 Harmony 6.0 应用的共享单车寻车应用首页实现
  • emWin抗锯齿与Unicode多语言支持:嵌入式GUI专业级开发实战
  • PNX2015时钟检测与中断机制:嵌入式系统时钟安全实战指南
  • Gemini 3.1 Flash-Lite实战指南:轻量大模型的快省平衡术
  • 手把手教程:Ubuntu 使用 kubeadm 从零搭建 Kubernetes v1.33 集群(含 Calico 网络、cri-docker)
  • Seedance 2.0 实战指南:Web端AI视频生成的输入逻辑与参数控制
  • 一站式解决Windows运行库问题:VisualCppRedist AIO完全指南
  • 收藏!2026年AI大模型就业指南:小白也能入局的高薪赛道
  • 2026年进口高端工业仪器仪表国产平替:五家优选深度解析 - 科技焦点
  • Cover Letter黄金三步法:用Gemini 3.1 Pro这三步编辑一眼决定送审!
  • SAP PI/PO Proxy Runtime 附件机制深度解析,MessageSpecifier 如何让业务消息带上文档、图片与二进制内容
  • AtCoder Beginner Contest 463 C - Tallest at the Moment 题解
  • 如何在3分钟内免费体验完整三国杀游戏:无名杀网页版终极指南