解决Redis Cluster模式下的排序问题

通常的redis排序我们可以这么做:

比如按商品价格排序:sort goods_id_set by p_*_price

这样在非集群模式下是没问题的,但如果在集群模式下,就会报错:

说是在集群模式下不能用sort的by子句,因为在集群模式下,上面的p_*_price匹配的key可能分布在不同的节点的slot中,所以无法做到排序。

那怎么办咧?别急,办法还是有的,我们就用 SortedSet

怎么用呢?很简单,看代码:

我们先添加几个商品,并赋上价格

zadd goods_prices 10 1 //商品id为1,价格为10元

zadd goods_prices 20 2 //商品id为2,价格为20元

zadd goods_prices 15 3 // 商品id为3,价格为15元

zadd goods_prices 5 4  // 商品id为4 价格为5元

然后排序:

1. zrange goods_prices 0,9999999 //按价格从低到高排序

2. zrevrange goods_prices 0,9999999 //按价格从高到低排序

打印结果:

1.  4,1,3,2

2.  2,3,1,4

然后再通过这些id去get商品信息就可以了

时间: 2024-08-06 03:38:27

解决Redis Cluster模式下的排序问题的相关文章

第31课:Spark资源调度分配内幕天机彻底解密:Driver在Cluster模式下的启动、两种不同的资源调度方式源码彻底解析、资源调度内幕总结

本課主題 Master 资源调度的源码鉴赏 Spark 的 Worker 是基于什么逻辑去启动 Executor 资源调度管理 任務調度與資源是通過 DAGScheduler.TaskScheduler.SchedulerBackend 等進行的作業調度 資源調度是指應用程序如何獲得資源 任務調度是在資源調度的基礎上進行的,沒有資源調度那麼任務調度就成為了無源之水無本之木 Master 资源调度的源码鉴赏 因為 Master 負責資源管理和調度,所以資源調度方法 scheduer 位於 Mast

Apache Spark源码走读之19 -- standalone cluster模式下资源的申请与释放

欢迎转载,转载请注明出处,徽沪一郎. 概要 本文主要讲述在standalone cluster部署模式下,Spark Application在整个运行期间,资源(主要是cpu core和内存)的申请与释放. 构成Standalone cluster部署模式的四大组成部件如下图所示,分别为Master, worker, executor和driver,它们各自运行于独立的JVM进程. 从资源管理的角度来说 Master  掌管整个cluster的资源,主要是指cpu core和memory,但Ma

ZooKeeper源码学习笔记(3)--Cluster模式下的ZooKeeper

Cluster集群模式 前一篇文章 介绍了当配置文件中只有一个server地址时,Standalone模式的启动流程以及ZooKeeper的节点模型和运行逻辑.在本节中,我会针对Cluster的运行模式进行详细讲解. 启动流程 public synchronized void start() { loadDataBase(); cnxnFactory.start(); startLeaderElection(); super.start(); } QuorumPeerMain::runFromC

Driver在Cluster模式下的启动、两种不同的资源调度方式源码彻底解析、资源调度内幕总结(DT大数据梦工厂)

内容: 1.分配 Driver(Cluster): 2.为Application分配资源: 3.两种不同的资源分配方式彻底解密: 4.Spark资源分配的思考: Spark最最重要的,这个内容每个IMF成员必须掌握,后面的性能优化全部跟这个有关. ==========任务调度与资源调度的区别============ 1.任务调度是通过DAGScheduler.TaskScheduler.SchedulerBackend等进行的作业调度: 2.资源调度是指应用程序如何获取资源: 3.任务调度是在资

解决简单恢复模式下产生的日志增长

简介 最近测试服务器进行数据归档,其间程序员发现一个问题,空间不足,我查看原因发现日志文件暴涨.然后将数据库改为简单恢复模式,但是依然存在这个问题.经过查询资料发现了日志文件在简单模式下依然增加的原因. Simple概念 Simple恢复模式也叫做”Checkpoint with truncate log“,其实这个名字更形象,在Simple模式下,SQL Server会在每次checkpoint或backup之后自动截断log,也就是丢弃所有的闲置日志记录,仅保留用于实例启动时自动发生的ins

解决Redis cluster的jedis驱动在高并发下的拥塞问题

redis cluster发布后我们项目中使用了cluster,使用驱动是jedis,但是在压力测试过程中发现有一定数量的redis访问非常缓慢高达几十秒数分钟,经过分析jedis驱动JedisClusterInfoCache中加锁造成 private Map<String, JedisPool> nodes = new HashMap<String, JedisPool>();  private Map<Integer, JedisPool> slots = new

【Redis】Redis学习(五) Redis cluster模式详解

一般情况下,使用主从模式加Sentinal监控就可以满足基本需求了,但是当数据量过大一个主机放不下的时候,就需要对数据进行分区,将key按照一定的规则进行计算,并将key对应的value分配到指定的Redis实例上,这样的模式简称Redis集群. Redis分区也称作Redis分片,或者Redis集群,这都是一个意思. 一.Redis集群 1.1 Redis集群的搭建 集群方面的教程也是有很多的,找了几个觉得还不错的,有需要的可以去看看: 有个入门教程挺不错的,可以看一看:http://doc.

解决idea debug模式下修改代码却不能生效

IDEA环境下使用devtools实现热加载与热部署实现修改代码不需重启 1.引入devtools的maven依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> 2.在 pl

Go 1.14解决Go Modules模式下更新私有库问题

在Go 1.11之后推出了依赖包管理工具Go Modules之后,Go项目可以在 GOPATH 之外的位置创建,当项目中仅使用了公有库作为依赖时,使用 go get 或 go mod 更新依赖一切如初,没有任何问题. 由于Go Modules默认使用代理去更新依赖,所以当使用了私有仓库作为依赖时,Go更新依赖的相关命令将不再可用. 通过以下配置,可以实现更新支持https协议的私有库依赖. 1. 设置 GOPRIVATE 环境变量 go env -w GOPRIVATE=private.repo