本文学习知识点
redis五大数据类型数据类型:string、hash、list、set、sorted_set
五大类型各自的应用场景 咔咔整理了一个路线图,打造一份面试宝典,准备按照这样的路线图进行编写文章,后期发现没有补充到的知识点在进行添加。也期待各位伙伴一起来帮助补充一下。评论区见哦! 添加 / 修改数据: 获取数据: 删除数据: 添加 / 修改多个数据: 获取多个数据: 追加信息到原始数据后边(不存在时则添加): 设置数值增加指定范围的值: 「应用场景」 控制数据库表主键id,为数据库表提供主键生成策略,保证数据表主键的一致性。 设置过期时间: 「应用场景」 实现限制时间投票功能:例如一个微信一个小时可以投一次
实现热点信息:例如电商行业热门商品、新闻网站热门新闻 微博大V主页高频的访问,对于粉丝数、关注数、微博数都需要时时更新。这个就属于高频信息了,我们就可以使用redis的string类型来解决 我们还可以使用另外一种方式来实现,就是键后边直接跟一个结构,例如 添加 / 修改数据: 获取数据: 删除数据: 添加 / 修改多个数据: 获取多个数据: 获取表中字段数量: 获取表中是否存在某个字段: 获取hash表中所有的字段值: 获取hash表中所有的字段值: 设置指定字段的数值增加指定范围的值: 此图来源于网络非自制,只是模拟购物车场景 这里实现了一个添加购物车和获取购物车,keys的命名为 表名+主键+主键值 数据存储需求:存储多个数据,并对数据进行存储空间的顺序进行区分
需要的数据结构:一个存储空间保存多个数据,且通过数据可以体现进入顺序
list类型:保存多个数据,底层使用双向链表存储结构实现 添加 / 修改数据: 获取数据: 删除数据: 在规定时间内获取并移除数据: 这个功能简单的写一个案例,容易理解 左边这个终端指令执行后会等待30秒的时间返回删除的数据 当右边的添加指令执行后左边会直接返回返回删除的数据 在上边我们知道了list的基础操作 执行 lpop key 或者 rpop key可以从做或者从右进行删除,但是现在有个场景是朋友圈点赞业务,然后从中间取消数据。案例如下图 我们先往list5里边添加 a b c d
然后移除c
在查看就剩下a b d了 新的存储需求:存储大量的数据,在查询方便提供更高的效率
需要的存储结构:能够保存大量的数据,高效的内部存储机制,便于查询
set类型:与hash存储结构完全相同,仅存储键,不存储值(nil),并且值是不允许重复的 添加 / 修改数据: 获取数据: 删除数据: 获取集合数据总量: 判断集合中是否包含指定数据: 随机获取集合中指定数量的数据: 随机获取集合中某个数据并将改数据集移除集合: 随机推送热点信息、热点新闻、热卖旅游、应用app推荐、关注推荐等 由于最近咔咔在写discuz,这个案例就以实现关注推荐。 案例一:根据一定的推荐机制往set里边存放对应的用户,然后每次进行随机获取2位需要推荐的用户 案例二:根据一定的推荐机制往set里边存放对应的用户,然后根据日期每天推荐的用户都不能重复 俩个集合的交、并、差集 俩个集合的交、并、差集并存储到指定集合中 就根据上述案例,我们可以使用差集来实现qq的有可能认识的好友。 PV直接使用string类型的incr统计即可 UV和IP都是独立不重复的,使用set来操作。 在上边我们知道set有一个特性就是不能重复,我们就可以根据这一点来轻松实现这个功能。然后使用scard key 来统计数量。 至于UV是独立访客,使用本地的cookie来实现就可以,方法一样把cookie传给redis做记录即可 在之前的四个类型中都不支持排序的,下来咱们看的sorted_set类型是既支持存储大数据,也支持排序功能 添加数据: 获取数据: 删除数据: 条件删除数据: 获取集合数据总量: 集合交、并操作: 获取数据对应的索引: socre值获取与修改: 以上就是redis数据类型的简单介绍和具体应用,在后文中会针对具体需求在进行实战。 坚持学习、坚持写博、坚持分享是咔咔从业以来一直所秉持的信念。希望在偌大互联网中咔咔的文章能带给你一丝丝帮助。我们下期再见。
❝
前言
❝

1. string类型
1-1 string类型数据的基本操作
set key valueget keydel keymset key value key1 value1mget key key1append key value
1-2 string类型 增减操作
incr key 默认每次加1 | incrby key value 每次新增value设置数据减少指定范围:decr key | decrby key value 跟新增是一回事
1-3 string类型 时效操作
setex key seconds value
1-4 string类型的应用场景
在redis中为大V设定用户信息,以用户主键和属性为键值,以下为实现案例。
在这里需要简单的说一下key的命名规则:以表名+主键+主键值+字段 :字段值。以这样的规则来命名就可以很好的来管理我们的键值。
以上的俩种方式都是可以实现的,只是第一种可以很方便的对任意一个值进行管理,第二种是改一个都得改一次,看业务场景,定时刷新就行。
2. hash类型
2-1 hash类型数据的基本操作
hset key field valuehget key field | hgetall keyhdel key field field1hmset key field value field1 value1hmget key field field1hlen keyhexists key field
2-2 hash类型数据的扩展操作
hkeys keyhvals keyhincrby key field increment | hincrbyfloat key field increment
2-3 hash业务场景之购物车
在上图中,我们可以看到购物车里的信息,下来咱们使用redis来对这个购物车的实现。
在上图中,我们会有一个问题就是商品信息存储会大量重复,所有我们也需要将商品单独给一直hash。如下图,只存储商品id
这里提供了俩种设置方式,一种是设置多个字段,一种是直接存储为json。信息不经常变动的话可以使用json
给大家在提供一个方法hsetnx key field value,如果有则不进行添加,没有则添加。这个功能就使用在不同的用户添加同样的商品时不会执行覆盖和无用操作
3. list类型
3-1 list类型数据的基本操作
lpush key value value1 | rpush key value value1lrange key start end | lindex key index | llen keyrpop key | lpop key
3-2 list类型数据的扩展操作
blpop key1 key2 timeout | brpop key1 key2 timeout
3-3 list业务场景

4. set类型

4-1 set类型数据的基本操作
sadd key member member1smembers keysrem key member1scard keysismember key member
4-2 set类型数据扩展操作
srandmember key countspop key
4-3 set类型业务场景推荐信息


4-4 set类型业务场景挖掘用户关系
<span style="display: block; background: url(https://my-wechat.mdnice.com/point.png); height: 30px; width: 100%; background-size: 40px; background-repeat: no-repeat; background-color: #272822; margin-bottom: -7px; border-radius: 5px; background-position: 10px 10px;"></span><code class="hljs" style="overflow-x: auto; padding: 16px; color: #ddd; display: -webkit-box; font-family: Operator Mono, Consolas, Monaco, Menlo, monospace; font-size: 12px; -webkit-overflow-scrolling: touch; letter-spacing: 0px; padding-top: 15px; background: #272822; border-radius: 5px;"><span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">sinter</span> <span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">key</span> <span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">key1</span><br/><span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">sunion</span> <span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">key</span> <span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">key1</span><br/><span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">sdiff</span> <span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">key</span> <span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">key1</span><br/></code>
<span style="display: block; background: url(https://my-wechat.mdnice.com/point.png); height: 30px; width: 100%; background-size: 40px; background-repeat: no-repeat; background-color: #272822; margin-bottom: -7px; border-radius: 5px; background-position: 10px 10px;"></span><code class="hljs" style="overflow-x: auto; padding: 16px; color: #ddd; display: -webkit-box; font-family: Operator Mono, Consolas, Monaco, Menlo, monospace; font-size: 12px; -webkit-overflow-scrolling: touch; letter-spacing: 0px; padding-top: 15px; background: #272822; border-radius: 5px;"><span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">sinterstore</span> <span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">destination</span> <span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">key1</span> <span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">key2</span><br/><span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">sunionstore</span> <span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">destination</span> <span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">key1</span> <span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">key2</span><br/><span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">sdiffstore</span> <span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">destination</span> <span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">key1</span> <span class="hljs-selector-tag" style="color: #f92672; font-weight: bold; line-height: 26px;">key2</span><br/></code>
案例:我们需要挖掘一个信息的共同好友。例如微信公众号的共同关注好友数量、QQ添加新好友的推荐机制、深度挖掘用户直接的联系
4-5 set类型业务场景 实现网站的PV UV IP的记录

5. sorted_set类型
5-1. sorted_set类型基本操作
zadd key score memberzrange key start stop | zrevrange key start stopzrem key member
按条件获取数据:zrangebyscore key min max limit | zrevrangescore key max minzremrangebyrank key start stop | zremrangebyscore key min maxzcard key | zcount key min maxzinterstore destination numkeys key | zunionstore destination numkeys key(这个指令就不做演示了,可以自己查看文档。跟set有点类似,只不过会把所有交集的和给加起来。然后这里边有个numkeys这个参数是一共几个key进行计算 后边的key就需要几个)zrank key member | zrevrank key memberzscore key member | zincrby key increment member相关推荐:《<a href="https://www.php.cn/redis/" target="_blank">redis教程</a>》
总结
❝
0
0
相关文章
Redis如何处理AOF重写期间的内存消耗_监控aof_rewrite_buffer占用情况
Redis如何实时观察客户端正在执行的指令
Redis怎样理解近似LRU与真实LRU的性能差异
Redis怎样获取当前活跃的频道列表
Redis如何构建可靠的分布式消息队列_利用Streams数据类型及其消费组机制
相关标签:
本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门AI工具
相关专题
本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。
2
2026.03.10
本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。
24
2026.03.09
本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。
80
2026.03.06
本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。
187
2026.03.05
本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。
339
2026.03.04
2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!
116
2026.03.04
本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。
180
2026.03.03
本专题围绕 C++ 在高性能网络服务开发中的应用展开,深入讲解 Socket 编程、多路复用机制、Reactor 模型设计原理以及线程池协作策略。内容涵盖 epoll 实现机制、内存管理优化、连接管理策略与高并发场景下的性能调优方法。通过构建高并发网络服务器实战案例,帮助开发者掌握 C++ 在底层系统与网络通信领域的核心技术。
31
2026.03.03
Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。
81
2026.02.28
热门下载
相关下载
精品课程
最新文章
