0

0

深入解析Redis中的数据结构,聊聊应用场景

青灯夜游

青灯夜游

发布时间:2022-01-18 09:51:45

|

2218人浏览过

|

来源于掘金社区

转载

本篇文章带大家深入了解一下redis中的数据结构,看看这些数据结构的应用场景,希望对大家有所帮助!

深入解析Redis中的数据结构,聊聊应用场景

Redis数据类型和应用场景

Redis是一个Key-Value的存储系统,使用ANSI C语言编写。 key的类型是字符串。【相关推荐:Redis视频教程

value的数据类型8种数据类型:

  • 常见数据类型

    • string字符串类型

    • list列表类型

    • set集合类型

    • sortedset(zset)有序集合类型

    • hash类型

  • 不常见数据类型

    • bitmap位图类型

    • geo地理位置类型

    • stream类型

  • 注意

    Redis中命令是忽略大小写,(set SET),key是不忽略大小写的 (NAME name)

1.png

string字符串类型

Redis的String能表达3种值的类型:字符串、整数、浮点数 100.01 是个六位的串

常用命令

命令名称 命令格式 命令描述
set set key value 赋值
get get key 取值
getset getset key value 取值并赋值
mset MSET key1 value1 key2 value2 .. keyN valueN 设置多个 key 的值为各自对应的 value。
mget MGET KEY1 KEY2 .. KEYN 返回所有(一个或多个)给定 key 的值
EXPIRE EXPIRE   key  seconds 设置一个键的过期时间(秒)
append append key value 向尾部追加值
strlen strlen key 获取字符串长度
setnx setnx key value 当value不存在时采用赋值
set key value NX PX 3000 原子操作,px 设置毫秒数
incr incr key 递增数字
incrby incrby key increment 增加指定的整数
decr decr key 递减数字
decrby decrby key decrement 减少指定的整数

应用场景

  • 1、对象缓存

  • 2、单值缓存

  • 3、incr用于乐观锁 incr:递增数字,可用于实现乐观锁 watch(事务)

  • 4、setnx用于分布式锁 当value不存在时采用赋值,可用于实现分布式锁

  • 5、计数器

  • 6、Web集群session共享

常用方法举例

dockerRedis:0>keys *
dockerRedis:0>append testName 2
"1"
dockerRedis:0>exists testName
"1"
dockerRedis:0>append testName " 1234"
"6"
dockerRedis:0>get testName
"2 1234"
dockerRedis:0>set testName1 "testName1"
"OK"
dockerRedis:0>get testName1
"testName1"
dockerRedis:0>getset testName2 "testName2"
null
dockerRedis:0>get testName2
"testName2"
dockerRedis:0>strlen testName
"6"
dockerRedis:0>set incrTest "10"
"OK"
dockerRedis:0>incr incrTest
"11"
dockerRedis:0>get incrTest
"11"
dockerRedis:0>decr incrTest
"10"
dockerRedis:0>decrby incrTest 5
"5"
dockerRedis:0>mset set01 1 set02 2 set03 3
"OK"
dockerRedis:0>mget set01 set02 set03
1) "1"
2) "2"
3) "3"

list列表类型

list列表类型可以存储有序、可重复的元素获取头部或尾部附近的记录是极快的 list的元素个数最多为2^32-1个(40亿)

常用命令

命令名称 命令格式 命令描述
lpush lpush key v1 v2 v3 ... 从左侧插入列表
lpop lpop key 从列表左侧取出
rpush rpush key v1 v2 v3 ... 从右侧插入列表
rpop rpop key 从列表右侧取出
lpushx lpushx key value 将值插入到列表头部
blpop blpop key timeout 从列表左侧取出,当列表为空时阻塞,可以设置最大阻塞时间,单位为秒
llen llen key 获得列表中元素个数
lrange lrange key start end 返回列表中指定区间的元素,区间通过start和end指定
lset lset key index value 将列表index位置的元素设置成value的值
rpoplpush rpoplpush key1 key2 从key1列表右侧弹出并插入到key2列表左侧
rpushx rpushx key 将值插入到列表尾部 value
brpop blpop key 从列表右侧取出,当列表为空时阻塞,可以设置最大阻塞时 timeout 间,单位为秒
 lindex lindex key value 获得列表中下标为index的元素 index从0开始 index
ltrim ltrim key start end 对列表进行修剪,只保留start到end区间 end
brpoplpush brpoplpush 从key1列表右侧弹出并插入到key2列表左侧,会阻塞 key1 key2
linsert linsert key BEFORE/AFTER pivot value 将value插入到列表,且位于值pivot之前或之后

应用场景

  • 1、Stack(栈)=LPUSH + LPOP

  • 2、Queue(队列)=LPUSH + RPOP

  • 3、Blocking MQ(阻塞队列)=LPUSH + BRPOP

  • 4、用户列表、商品列表、评论列表

    阿里妈妈·创意中心
    阿里妈妈·创意中心

    阿里妈妈营销创意中心

    下载

set集合类型

Set:无序、唯一元素 集合中最大的成员数为 2^32 - 1

常用命令

命令名称 命令格式 命令描述
sadd sadd key value1 value2 .... 往集合key中存入元素,元素存在则忽略,若key不存在则新建
srem srem key value1 value2 .... 从集合key中删除元素
smembers smembers key 获得集合中所有元素
spop spop key count 从集合key中选出count个元素,元素从key中删除
srandmember srandmember key count 从集合key中选出count个元素,元素不从key中删除
scard scard key 获取集合key的元素个数
sismember sismember key member 判断member元素是否存在于集合key中
sinter sinter key1 key2 key3 求多集合的交集
sdiff sdiff key1 key2 key3 求多集合的差集
sunion sunion key1 key2 key3 求多集合的并集

应用场景

  • 微信抽奖小程序

  • 微博点赞、收藏、标签

  • 微博微信关注模型

  • 电商商品筛选

zset有序集合类型

SortedSet(ZSet) 有序集合: 元素本身是无序不重复的 每个元素关联一个分数(score) 可按分数排序,分数可重复

常用命令

命令名称 命令格式 命令描述
zadd zadd key score1 member1 score2 member2 ... 往有序集合key中加入带分值元素
zrem zrem key mem1 mem2 .... 从有序集合key中删除元素
zcard zcard key 获得有序集合中的元素数量
zcount zcount key min max 返回集合中score值在[min,max]区间 的元素数量
zincrby zincrby key increment member 为有序集合key中元素member的分值加上increment
zscore zscore key member 返回有序集合key中元素member的分值
zrank zrank key member 获得集合中member的排名(按分值从 小到大)
zrange zrange key start end 正 序获取有序集合key从start下标到stop下标的元素
zrevrank zrevrank key member 获得集合中member的排名(按分值从 大到小)
zrevrange  zrevrange key start end 倒序获取有序集合key从start下标到stop下标的元素

应用场景

  • 点击排行榜、销量排行榜、关注排行榜

hash类型

Redis hash是一个string类型的field和value的映射表,它提供了字段和字段值的映射。每个 hash 可以存储 2^32-1键值对(40多亿)。

2.png

  • 优点

    • 1、同类数据归类整合储存,方便数据管理

    • 2、相比string操作消耗内存与cpu更小

    • 3、相比string储存更节省空间

  • 缺点

    • 1、过期功能不能使用在field上,只能用在key上

    • 2、Redis集群架构下不适合大规模使用

常用命令

命令名称 命令格式 命令描述
hset hset key field value 存储一个哈希表key的键值
hmset hmset key field1 value1 field2 value2 在一个哈希表key中存储多个键值对
hget hget key field 查看某个field是否存在
hmget hmget key field1 field2 ... 获取一个字段值
hsetnx hsetnx key field value 存储一个不存在的哈希表key的键值
hexists hexists key filed 判断filed是否存在
hgetall hgetall key 获取多个字段值
hdel hdel key field1 field2... 删除指定字段
hincrby hincrby key field increment 指定字段自增increment
hlen hlen key 获得字段数量

应用场景

  • 对象缓存

  • 购物车操作

bitmap位图类型

bitmap是进行位操作的 通过一个bit位来表示某个元素对应的值或者状态,其中的key就是对应元素本身。 bitmap本身会极大的节省储存空间。

常用命令

命令名称 命令格式 命令描述
setbit setbit key offset value 设置key在offset处的bit值(只能是0或者 1)。
getbit getbit key offset 获得key在offset处的bit值
bitcount bitcount key 获得key的bit位为1的个数
bitpos bitpos key value 返回第一个被设置为bit值的索引值
bitop bitop and[or/xor/not] destkey key [key ...] 对多个key 进行逻辑运算后存入destkey 中

应用场景

  • 1、用户每月签到,用户id为key , 日期作为偏移量 1表示签到
  • 2、统计活跃用户, 日期为key,用户id为偏移量 1表示活跃
  • 3、查询用户在线状态, 日期为key,用户id为偏移量 1表示在线

geo地理位置类型

geo是Redis用来处理位置信息的。在Redis3.2中正式使用。主要是利用了Z阶曲线、Base32编码和geohash算法

常用命令

命令名称 命令格式 命令描述



geoadd geoadd key 经度 纬度 成员名称1 经度1 纬度1 成 员名称2 经度2 纬度 2 ... 添加地理坐标
geopos geopos key 成员名称1 成员名称2... 返回成员经纬度
geodist geodist key 成员1 成员2 单位 计算成员间距离
georadiusbymember georadiusbymember key 成员 值单位 count 数 asc[desc] 根据成员查找附近的成员
geohash geohash key 成员名称1 成员名称2... 返回标准的 geohash串

应用场景

1、记录地理位置 

2、计算距离 

3、查找"附近的人"

stream数据流类型

stream是Redis5.0后新增的数据结构,用于可持久化的消息队列。

几乎满足了消息队列具备的全部内容,包括:

  • 消息ID的序列化生成
  • 消息遍历
  • 消息的阻塞和非阻塞读取
  • 消息的分组消费
  • 未完成消息的处理
  • 消息队列监控

每个Stream都有唯一的名称,它就是Redis的key,首次使用 xadd 指令追加消息时自动创建

应用场景

消息队列的使用

更多编程相关知识,请访问:编程入门!!

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

49

2026.03.13

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

89

2026.03.12

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

276

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

59

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

99

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

105

2026.03.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

230

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

619

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

173

2026.03.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
进程与SOCKET
进程与SOCKET

共6课时 | 0.4万人学习

Redis+MySQL数据库面试教程
Redis+MySQL数据库面试教程

共72课时 | 7.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号