`

Redis排序

阅读更多

1、SORT命令

 

SORT命令可以对列表类型、集合类型和有序集合类型键进行排序,并且可以完成与关系数据库中的连接查询相类似的任务。

 

在对有序集合进行排序时会忽略元素的分数,只针对元素自身的值进行排序。

 

除了可以排列数字外,SORT命令还可以通过 ALPHA 参数实现按照字典顺序排列非数字元素。

 

SORT mylist ALPHA

 

SORT mylist DESC 倒序

 

SORT mylist LIMIT offset count 表示跳过前offset个元素并获取之后的count个元素。

 

2、BY 参数

 

BY  参考键参考键可以是字符串类型键或者是散列类型键的某个字段(表示为键名--->字段名)。如果提供了BY参数,SORT命令将不再依据元素自身的值进行排序,而是对每个元素使用元素的值替换参考键中的第一个“*”并获取其值,然后依据该值对元素排序。

 

SORT tag:ruby:posts BY post:*->time 散列类型

 

SORT sortbuylist BY itemscore:* DESC 字符串类型

 

当参考键名不包含“*”时(既常量键名,与元素值无关),SORT命令将不会执行排序操作,应为Redis认为这种情况是没有意义的(因为所有要比较的值都一样)。

 

如果几个元素的参考键值相同,则SORT命令会再比较元素本身的值来决定元素的顺序。

 

3、GET 参数

 

Get参数不影响排序,它的作用是使SORT命令的返回结果不再是元素自身的值,而是GET参数中指定的键值。GET参数的规则和BY参数一样,也支持字符串类型和散列类型的键,并使用“*”作为占位符。

 

SORT tag:ruby:posts BY post:*->time DESC GET post:*->title

 

在一个SORT命令中可以有多个GET参数(而BY参数只能有一个)

 

SORT tag:ruby:posts BY post:*->time DESC GET post:*->title GET post:*->time

 

有N个GET参数,每个元素返回的结果就有N行。

 

4、STORE 参数

 

默认情况下SORT会直接返回排序结果,如果希望保存排序结果,可以使用STORE参数。如果希望把结果保存到 sort.result 键中:

 

SORT tag:ruby:posts BY post:*->time DESC GET post:*->title GET post:*->time STORE sort.result

 

保存后的键的类型为列表类型,如果键已经存在则会覆盖他。加上 STORE 参数后 SORT 命令的返回值为结果的个数。

 

STORE 参数常用来结合EXPIRE命令缓存排序结果。

 

5、性能优化

 

SORT是Redis中最强大最复杂的命令之一,如果使用不好很容易成为性能瓶颈。SORT命令的时间复杂度是 O(n + mlog(m)),其中n表示要排序的列表(集合或有序集合)中的元素个数,m表示要返回的元素个数。

 

使用SORT命令时需要注意以下几点:

 

尽可能减少待排序键中元素的数量;使用 LIMIT 参数只获取需要的数据;如果要排序的数据量较大,尽可能使用 STORE 参数将结果缓存。

 

分享到:
评论

相关推荐

    lua-zset, redis排序集相同的lua数据结构.zip

    《lua-zset:Redis排序集在Lua中的实现与应用》 在计算机科学中,数据库管理系统的数据结构设计至关重要,尤其在高性能、高并发的场景下。Redis作为一个内存型的键值存储系统,其丰富的数据结构如哈希表、集合、...

    基于redis分页和排序设计(根据redis的数据类型设计)

    基于redis分页和排序设计(根据redis的数据类型设计)

    redis面试题之排序.zip

    面试中,Redis 的排序能力是常见的话题,因为这一特性对于构建各种应用至关重要。让我们深入探讨 Redis 中的排序机制及其在面试中的相关问题。 首先,Redis 提供了两种主要的数据结构——`Sorted Set`(有序集合)...

    Redis配置及使用资料整理

    #### 三、Redis排序 **3.1 排序操作** - Redis提供了`SORT`命令来进行排序操作。 - 可以对列表(List)、集合(Set)和有序集合(Sorted Set)进行排序,并可以指定返回结果的偏移量和数量。 #### 四、Redis事务 **4.1...

    通过Key前缀分析Redis的内存占用按内存大小排序导出结果到csv文件

    本篇文章将围绕“通过Key前缀分析Redis的内存占用并按内存大小排序导出结果到csv文件”这一主题,详细介绍相关的技术知识点。 首先,我们需要理解Redis的内存管理。Redis中每个键值对都有一个内存开销,包括键的...

    redis-ratelimit:基于redis排序集的滑动窗口速率限制器

    使用Redis进行速率限制/限制 var slidingWindow = require ( 'redis-ratelimit' ) . slidingWindow var async = require ( 'async' ) var count = 0 ; async . doWhilst ( function ( done ) { slidingWindow . ...

    Redis基础架构与数据类型 Redis键值操作与命令 Redis字符串与列表数据结构 Redis哈希与集合数据结构

    Redis排序集合与使用场景 Redis持久化策略与RDB Redis持久化策略与AOF Redis主从复制与集群配置 Redis事务与Lua脚本 Redis性能优化与监控 Redis内存管理与优化 Redis高可用与故障转移 Redis地理空间索引与应用 Redis...

    RedisSortingSpike:调查使用 Redis 进行排序和分页的性能的峰值

    要求Redis 2.8.x Maven运行测试 $ mvn test测试数据大小目标是能够以合理的性能对 Redis 中的 1,000,000 个实体进行排序和分页。方法一:设置和SORT 将 ID 存储在一个并使用进行排序和分页。 这种方法使用较少的内存...

    go-zset:go与redis排序集相同的数据结构

    golang的sorted set实现,其中skiplist的实现基本和redis一致(参考) 关于持久化可参考 与redis类似,fork后写文件,不同的是redis是rdb格式,我使用的是json格式,由于选择多,在go-zset没有提供。 test go test

    redis实战 红豆出品 兄弟连redis

    Redis是一款开源的高性能键值对存储数据库,由意大利软件开发者Salvatore Sanfilippo创造,后被VMware公司收购。它支持存储的值包括字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、有序集合...

    redis,phpredis中文手册

    PHPRedis是Redis的一个PHP扩展模块,提供了丰富的API接口用于与Redis实例交互,该模块效率高,支持链表排序等功能,非常适合用于创建内存级别的模块业务关系。 phpredis的使用方法相对直观,用户可以通过phpredis...

    Redis和RedisDesktop

    而有序集合则允许根据分数排序元素。 Redis还支持多种操作命令,如原子操作(如INCR、DECR)、订阅/发布(Pub/Sub)系统、事务(Transactions)以及Lua脚本执行。这些特性使得Redis不仅可以作为简单的键值存储,还...

    redis window最新免安装版本

    Redis 提供数据结构,例如字符串、散列、列表、集合、带有范围查询的排序集、位图、超日志、地理空间索引和流。Redis 具有内置复制、 Lua 脚本编写、 LRU 垃圾清理、事务处理和不同级别的磁盘持久性,并通过 Redis ...

    Redis Desktop Manager redis的可视化工具压缩包,解压即用

    3. **数据操作**:支持对各种数据类型的增删改查操作,如设置、获取、删除键值,以及对列表、集合和有序集合的添加、删除、排序等操作。 4. **命令行工具**:内置了Redis命令行接口,可以直接输入命令执行操作,对于...

    redisredis redis redis redis

    每种类型都有独特的用法,例如字符串可以用来存储简单值,哈希可以存储键值对,列表可以处理顺序元素,集合存储无序不重复元素,而有序集合则带有分数排序的成员。 2. **持久化**:Redis 提供两种持久化方式:RDB...

Global site tag (gtag.js) - Google Analytics