Redis学习6:sorted_set类型、拓展操作、应用场景等

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 新的存储需求:类似排行榜:就是需要有利于数据的展示,根据一些自身特征进行排序的方式。

sorted_set类型


新的存储需求:类似排行榜:就是需要有利于数据的展示,根据一些自身特征进行排序的方式。

775f66c062f0b7f317f79cd363243329_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_14,color_FFFFFF,t_70,g_se,x_16.png


score不用来存数据,而是用它排序特征的!真正的数据存储还是放在前面的。

基本操作


添加、删除、基本查询


d698e789fe44f0a3e59d9267f2859a81_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png

按条件获取、条件删除等等

887b9163e1d897fa70e40d3b4991ee9d_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png

这里的min和max就类似区间操作的查询,而limit就是类似linux中的索引功能。

操作如下图。

04bb86460c52bdd82c00e6c99554d8bd_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png

adf13ff00b885ed63daea6813f227388_b6138e55331a42808562505014e2ed61.png

1655492cbb70aca78ce7c051fbfb3ae3_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png

4490bebbced85b6f686fb73f7f16cf4a_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_13,color_FFFFFF,t_70,g_se,x_16.png

求交的时候,只有三方都有才会做,并且做了一个求和的操作。

37a94a95bd48792d37c7295b013664c6_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_18,color_FFFFFF,t_70,g_se,x_16.png

还可以用来做求最大值、最小值。

应用场景:排序

f27a49d9d27aebe3fd95a8b9bfb0ab99_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png


也就是说 除了需要计数,最重要的还是排序。

b571f468c6ba71682118d8790b72070d_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png

操作注意事项

2e3059ce4fb0c8cd8867496f54eaaaa4_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_18,color_FFFFFF,t_70,g_se,x_16.png

479147a41f8a576be4966fba28ac9ce8_8c5c83c094034c7c98617890fd7ac665.png

返回的失败,但是会值确实会被改了。

应用场景:基于时效性的管理

154c5d08631ce9fab8022b69c368a9ca_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_18,color_FFFFFF,t_70,g_se,x_16.png

93f994edb139b7804f4eb65a8998ee96_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_17,color_FFFFFF,t_70,g_se,x_16.png

就是说先将一小时的处理完, 然后处理一天内的中抽出一些来做。

time 是可以获取单位时间的值。

3d30daea5eac149437e081759fe586e6_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_15,color_FFFFFF,t_70,g_se,x_16.png


当到了这个时间的时候,就处理这个任务,然后到下一个任务。

但是不要期望用一个sorted-set处理完全部,根据时间长短来分段,就可以方便很多!

当本部分的操作完了,从下一个部分选一部分来操作。

应用场景:消息队列之权重消息


26e084aa067cce79d5fb536f46aecbb5_ce6ab6ce218946a093639067b1d5550b.png

fd54b45b059c06ba1c10e8ae67bc4ced_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_20,color_FFFFFF,t_70,g_se,x_16.png

但这个操作过程中可能会涉及到原子操作,也就是说可能操作的过程中会有别人更高级的任务插进来了。

c772315770c8fcbb312dca4172535c97_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_18,color_FFFFFF,t_70,g_se,x_16.png

e82c0580e643958119fba729e20fdcc9_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA572R5LqL6ZqP6aOOMjAxNw==,size_8,color_FFFFFF,t_70,g_se,x_16.png


注意一些坑,可能会出现的问题。

比如说如果长度不统一,并且不补0,那么就容易出错。

所以长度统一是必须要确定好的,也就是通过补0来完成。因为本身是依赖数字的大小完成的。


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
打赏
0
0
0
0
23
分享
相关文章
Redis 集合(Set)
10月更文挑战第17天
70 5
如何用Redis高效实现点赞功能?用Set?还是Bitmap?
在众多软件应用中,点赞功能几乎成为标配。本文从实际需求出发,探讨如何利用 Redis 的 `Set` 和 `Bitmap` 数据结构设计高效点赞系统,分析其优缺点,并提供 PHP 实现示例。通过对比两种方案,帮助开发者选择最适合的存储方式。
96 3
Redis数据结构:List类型全面解析
Redis数据结构——List类型全面解析:存储多个有序的字符串,列表中每个字符串成为元素 Eelement,最多可以存储 2^32-1 个元素。可对列表两端插入(push)和弹出(pop)、获取指定范围的元素列表等,常见命令。 底层数据结构:3.2版本之前,底层采用**压缩链表ZipList**和**双向链表LinkedList**;3.2版本之后,底层数据结构为**快速链表QuickList** 列表是一种比较灵活的数据结构,可以充当栈、队列、阻塞队列,在实际开发中有很多应用场景。
Redis 有序集合(sorted set)
10月更文挑战第17天
203 4
redis 的List类型 实现 排行榜
【10月更文挑战第8天】
79 2
|
5月前
|
redis-set类型
【10月更文挑战第6天】
78 1
Redis的ZSet底层数据结构,ZSet类型全面解析
Redis的ZSet底层数据结构,ZSet类型全面解析;应用场景、底层结构、常用命令;压缩列表ZipList、跳表SkipList;B+树与跳表对比,MySQL为什么使用B+树;ZSet为什么用跳表,而不是B+树、红黑树、二叉树
【c++丨STL】基于红黑树模拟实现set和map(附源码)
本文基于红黑树的实现,模拟了STL中的`set`和`map`容器。通过封装同一棵红黑树并进行适配修改,实现了两种容器的功能。主要步骤包括:1) 修改红黑树节点结构以支持不同数据类型;2) 使用仿函数适配键值比较逻辑;3) 实现双向迭代器支持遍历操作;4) 封装`insert`、`find`等接口,并为`map`实现`operator[]`。最终,通过测试代码验证了功能的正确性。此实现减少了代码冗余,展示了模板与仿函数的强大灵活性。
29 2
哈希表模拟封装unordered_map和unordered_set
哈希表模拟封装unordered_map和unordered_set