技术实践第三期|HashTag在Redis集群环境下的使用

简介:欢迎了解友盟+技术干货第三期内容:Redis集群环境如何按照前缀批量删除缓存。希望能对开发者们在实际应用中有所帮助。

一、背景

数据源列表添加缓存支持,types字段可传多值,如app, mini, web等,会构建如下缓存key,

  • application_list:123456:app
  • application_list:123456:mini
  • application_list:123456:web
  • application_list:123456:app,mini
  • application_list:123456:app,web
  • application_list:123456:mini,web
  • application_list:123456:app,mini,web
  • ...

当创建应用,更新应用或删除应用的时候,需要批量删除旧版本缓存。

二、思路

1.按照前缀 `application_list:123456`,查询所有相关的key

2.遍历keys,执行删除

/*** 移除缓存** @param prefix prefix*/
public static void deleteByPrefix(String prefix) {long start = System.currentTimeMillis();Set<String> keys;try {keys = jedisCluster.keys(CacheKeyUtils.buildCacheKey(prefix, "*"));LOGGER.info("cache keys {} with prefix {}", keys, prefix);if (keys != null && !keys.isEmpty()) {jedisCluster.del(keys.toArray(new String[keys.size()]));}} catch (Exception e) {LOGGER.error("cache deleteByPrefix error, prefix = {}", prefix, e);throw new BusinessException(CoreErrorEnum.CACHE_DELETE_ERROR, prefix);}long end = System.currentTimeMillis();LOGGER.info("cache deleteByPrefix success, prefix = {}, cost {} ms", prefix, (end - start));
}

三、问题

按照这个写完,执行报错,"JedisCluster only supports KEYS commands with patterns containing hash-tags ( curly-brackets enclosed strings )"

1.jpg

Redis Cluster 采用虚拟槽分区,所有的根据哈希函数映射到 0~16383 整数槽内,计算公式:slot = CRC16(key) % 16384。每个节点负责维护一部分槽以及槽所映射的键值数据,如图所示:

2.jpg

四、方案

使用HashTag生成缓存Key

if (StringUtils.isNotEmpty(platform)) {cacheKey = CacheKeyUtils.buildCacheKey(CacheKeyUtils.buildHashTag(CacheConstant.APPLICATION_LIST, String.valueOf(userId)), "platform",platform);
} else if (types != null && !types.isEmpty()) {cacheKey = CacheKeyUtils.buildCacheKey(CacheKeyUtils.buildHashTag(CacheConstant.APPLICATION_LIST, String.valueOf(userId)), "types",types.stream().sorted().collect(Collectors.joining(",")));
} else {cacheKey = CacheKeyUtils.buildCacheKey(CacheKeyUtils.buildHashTag(CacheConstant.APPLICATION_LIST, String.valueOf(userId)));
}
  • {application_list:123456}:app
  • {application_list:123456}:mini
  • {application_list:123456}:web
  • {application_list:123456}:app,mini
  • {application_list:123456}:app,web
  • {application_list:123456}:mini,web
  • {application_list:123456}:app,mini,web
  • ...

缓存用户下全量的数据源

每次从缓存或者数据库查询当前用户下的所有数据源,按照参数筛选。

原文链接

本文为阿里云原创内容,未经允许不得转载。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/511712.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android java加密_Android Java字符串加密

Java字符串加密学习笔记Java字节码字节码生成Java2bitcode由Java源代码生成字节码的过程如下图(图片来源于网络)JVM执行不是热代码直接走字节码解释器热代码&#xff1a;多次调用&#xff0c;多次执行的循环体&#xff0c;会被JIT优化成机器码字节码执行方法调用在JVM中即是字节…

数据质量漫谈

简介&#xff1a; 数据质量问题无处不在&#xff0c;本文尝试找到一种方法&#xff0c;能够尽可能的发现数据质量问题并解决之。 作者 | 茂才 来源 | 阿里技术公众号 一 概述 1 数据质量问题无处不在 基本上每个用数据的同学&#xff0c;都遇到过以下类似的问题。 表没有按…

7招,实现安全高效的流水线管理

简介&#xff1a;云效团队多年来为阿里巴巴内部&#xff08;Aone&#xff09;和云上企业用户&#xff08;云效&#xff09;分别提供研发运维工具&#xff0c;并致力于打造企业级一站式的 DevOps 平台&#xff0c;更多关注不同类型的企业用户在使用过程中的管理与协作场景&#…

字节跳动最新音乐检索系统ByteCover2,检索速度提高八倍

翻唱识别&#xff08;CSI&#xff09;是音乐信息检索&#xff08;MIR&#xff09;领域的一项重要任务&#xff0c;在歌曲搜索&#xff0c;音乐分发&#xff0c;曲库整理&#xff0c;智能推荐等场景下有着重要作用&#xff0c;被誉为下一代音乐识别技术。 近期&#xff0c;字节…

Serverless 场景排查问题利器 : 函数实例命令行操作

简介&#xff1a;实例命令行功能的推出希望能消除用户使用 Serverless 的“最后一公里”&#xff0c;直接将真实的函数运行环境展现给用户。 背景介绍 全托管的 Serverless 计算平台能给用户带来更少的运维代价、更强的稳定性和更快的弹性能力&#xff0c;在 Serverless 落地…

从运维域看 Serverless 真的就是万能银弹吗?

简介&#xff1a;极客时间《Serverless 入门课》作者秦粤最新文章: 再次讨论正当时的 Serverless。文章分为三个部分&#xff0c;分别是 复杂化for 云开发商; 简化 for 开发者&#xff0c;以及团队使用 Serverless 的最佳场景。 作者说 在开始本篇内容前我想与各位开发者达成几…

多任务学习模型之ESMM介绍与实现

简介&#xff1a;本文介绍的是阿里巴巴团队发表在 SIGIR’2018 的论文《Entire Space Multi-Task Model: An Effective Approach for Estimating Post-Click Conversion Rate》。文章基于 Multi-Task Learning (MTL) 的思路&#xff0c;提出一种名为ESMM的CVR预估模型&#xff…

java pinyin4j 首字母_通讯录之按汉字首字母排序 --java--pinyin4J

最近开发手机端OA系统通讯录时遇到了用汉字首字母排序的问题&#xff0c;各种谷歌后发现了一个轮子pinyin4J&#xff0c;这个轮子是可以将汉字转换成字母拼音&#xff0c;个人觉得很好用&#xff0c;完美的解决了排序的问题&#xff0c;分享一下。一.工具介绍pinyin4j是一个支持…

助力开源生态繁荣,统信软件建设中国桌面操作系统根社区

继 React、SUSE、RedHat 宣布对俄罗斯停服后&#xff0c;近日 Ubuntu 开发商 Canonical 在俄乌冲突下也宣布对俄罗斯企业停止支持和专业服务。 这给我们敲醒了警钟&#xff1a;因为Ubuntu 事件瞄准桌面操作系统&#xff0c;桌面操作系统用户庞大&#xff0c;其安全性属于系统级…

一文详解 | 开放搜索兼容Elasticsearch做召回引擎

简介&#xff1a;开放搜索发布开源兼容版&#xff0c;支持阿里云Elasticsearch做搜索召回引擎&#xff0c;本文详细介绍阿里云ES用户如何通过接入开放搜索兼容版丰富行业分词库&#xff0c;提升查询语义理解能力&#xff0c;无需开发、算法投入&#xff0c;即可获得淘系同款搜索…

人人都是 Serverless 架构师 | 现代化 Web 应用开发实战

简介&#xff1a;本篇实战将介绍如何以超低成本构建动态的 Web 站点&#xff0c;并且实现灵活扩展&#xff0c;限流等效果&#xff0c;最后再跟大家聊一聊“现代应用”的相关概念。 相信很多同学都有过想要拥有自己的 Web 站点的想法&#xff0c;但是如果想要搭建动态的站点&a…

Gartner:如何在中国成功应用多云模式

作者 | Gartner研究总监 杜勇 供稿 | Gartner 当前&#xff0c;中国政府鼓励行业企业通过云计算技术来实施数字化转型&#xff0c;从而加速经济增长。许多企业机构已部署了私有云和单一供应商混合云&#xff0c;以实现这一目标。为了满足全球业务和本地业务需要分别部署在不同的…

java socket 线程池_程序员:java使用线程池和TCP实现简单多轮聊天系统

最近在做物联网项目,需要使用TCP和传感器进行双向交互,通过这种渠道,找到了下面的代码,写成博客主要也是为了记录一下,以后用到随时可以看。代码实现服务端package com.tcp;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.…

阿里云李飞飞:中国数据库的时与势

简介&#xff1a;数据库、操作系统和中间件并列为三大基础软件&#xff0c;无论是在银行存取款&#xff0c;还是进行健康码查询&#xff0c;我们的日常应用和企业业务背后都离不开数据库。可以说&#xff0c;没有数据库&#xff0c;就难以构建数字化底座。过去的40多年&#xf…

阿里巴巴超大规模 Kubernetes 基础设施运维体系介绍

简介&#xff1a;ASI 作为阿里集团、阿里云基础设施底座&#xff0c;为越来越多的云产品提供更多专业服务&#xff0c;托管底层 K8s 集群&#xff0c;屏蔽复杂的 K8s 门槛、透明几乎所有的基础设施复杂度&#xff0c;并用专业的产品技术能力兜底稳定性&#xff0c;让云产品只需…

数据库资深“学霸”再启程,专访数据库初创公司矩阵起源全球 CTO 田丰博士

师出名门&#xff0c;工业界履历从大厂首席工程师到创业公司 CTO&#xff0c;并能一直从事底层系统的核心研发工作&#xff0c;可能是很多优秀技术人向往的光鲜履历。不过抛弃大厂的光鲜稳定工作和成功的创业项目&#xff0c;再次加入初创公司&#xff0c;则需要比常人更大的魄…

Spring官方RSocket Broker 0.3.0发布: 快速构建你的RSocket架构

简介&#xff1a;Spring官方的RSocket Broker其实开发已经非常久了&#xff0c;我以为会伴随着Spring Cloud 2021.0发布的&#xff0c;但是没有发生。不过Spring RSocket Broker还是发布了最新的0.3版本&#xff0c;虽然还是预览版&#xff0c;但目前已经可用&#xff0c;考虑官…

Redis 6 中的多线程是如何实现的!?

作者 | 张彦飞allen来源 | 开发内功修炼Redis 是一个高性能服务端的典范。它通过多路复用 epoll 来管理海量的用户连接&#xff0c;只使用一个线程来通过事件循环来处理所有用户请求&#xff0c;就可以达到每秒数万 QPS 的处理能力。下图是单线程版本 Redis 工作的核心原理图单…

如何构建流量无损的在线应用架构 | 专题开篇

简介&#xff1a;本篇是整个《如何构建流量无损的在线应用架构》系列的第一篇&#xff0c;这一系列共三篇&#xff0c;旨在使用最为朴素的语言将影响在线应用流量稳定性的技术问题做一个归类&#xff0c;这些问题的解决方案有的只是一些代码层面的细节&#xff0c;有的需要工具…

云原生时代的运维体系进化

简介&#xff1a;基于容器、Kubernetes 等云原生技术&#xff0c;提供的开放社区标准、不可变基础设施、声明式 API 会成为企业 CloudOps 的最佳实践&#xff0c;也将在这个基础上推进数据化、智能化体系建设&#xff0c;将运维复杂性进一步下沉&#xff0c;让企业可以聚焦于自…