简介:欢迎了解友盟+技术干货第三期内容: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 )"

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

四、方案

使用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
  • ...

缓存用户下全量的数据源

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

原文链接

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

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

  1. 2W 字详解 Redis 集群环境搭建实践

    点击上方 "终端研发部"关注, 星标或置顶一起成长 本文是Redis集群学习的实践总结(基于Redis 6.0+),详细介绍逐步搭建Redis集群环境的过程,并完成集群伸缩的实践. ...

  2. Redis集群环境搭建实践

    本文是Redis集群学习的实践总结(基于Redis 6.0+),详细介绍逐步搭建Redis集群环境的过程,并完成集群伸缩的实践. Redis集群简介 Redis集群(Redis Cluster) 是R ...

  3. 集群环境下_Docker环境下秒建Redis集群,连SpringBoot也整上了!

    为了提高Redis的存储容量和响应速度,有时候我们需要搭建Redis集群.本文主要讲述Redis集群环境的搭建步骤以及如何在SpringBoot中整合使用Redis集群. SpringBoot实战电商 ...

  4. redis常用命令及安全Redis集群环境搭建

    2019独角兽企业重金招聘Python工程师标准>>> redis 安装 在centos 上很简单 yum install redis 即可完成redis的安装 安装redis cd ...

  5. 集群空间服务器接收不到消息,解决Redis集群条件下键空间通知服务器接收不到消息的问题...

    解决Redis集群条件下键空间通知服务器接收不到消息的问题 键空间通知介绍 键空间通知使得客户端可以通过订阅频道或模式, 来接收那些以某种方式改动了 Redis 数据集的事件. 可以通过对redis的 ...

  6. Redis集群环境之linux搭建多机版---已完结,跟着一步一步来你就可以集群成功

    上一篇踩着各种坑写了Redis集群环境之linux搭建单机版,这一篇准备就多机版集群进行搭建,主要目的一来是在上一篇的基础上进行精华提粹总结,二来是把单机版与多机版的区别进行记录. 首先软硬件环境: ...

  7. 【基于唯品会MP平台】集群环境下session共享技术方案及分布式单点登录

    背景 传统的B/S架构的系统中,一般为单点部署,并不存在集群,所以也不存在session丢失的问题.那么,由于单点部署一旦宕机,无法保证系统可用性,那我们就想到把它扩展为多台服务器部署,这样既保证了系 ...

  8. 关于Redis集群模式下,使用mget通过keys批量获取value时的解决方案

    关于Redis集群模式下,使用mget通过keys批量获取value时的解决方案 今天在做项目的时候,需要使用到mget命令,通过一个批量的key去获取对应的value集合,但是取值的时候,报了这个错 ...

  9. Java技术分享:集群环境下的定时任务

    定时任务的实现方式有多种,例如JDK自带的Timer+TimerTask方式,Spring 3.0以后的调度任务(Scheduled Task),Quartz框架等. Timer+TimerTask是 ...

最新文章

  1. spring中这些能升华代码的技巧,可能会让你爱不释手
  2. stun 协议 NAT穿透方式 简介
  3. PHP快速入门 如何操作MySQL
  4. 调用webservice时提示对操作的回复消息正文进行反序列化时出错
  5. Python面试题(二)
  6. 2015年第六届蓝桥杯 - 省赛 - C/C++大学C组 - B. 立方尾不变
  7. 未成年人可以申请贷款吗?
  8. Ubuntu 10.04 使用libfetion
  9. Excel Video Game Sales视频游戏销售分析
  10. VBA 工作簿和工作表的简单操作
  11. 谷歌浏览器下载速度很慢,怎么解决?
  12. 基于Spring boot的云客服系统实现
  13. sqlserver分组统计最新一条数据
  14. 三星原生android手机,非原生系统??三星Android Go手机曝光
  15. 威斯康星大学硕士计算机科学,2020年威斯康星大学-麦迪逊分校硕士热门专业
  16. 淘宝Tmall,1688,拼多多API商品详情接口
  17. *关键字retry:很像goto语句,跳到标记处
  18. 随机验证码生成(生成一个含有n位随机数字的字符串)
  19. css3斜切加颜色,CSS斜切角
  20. LTE RACH过程

热门文章

  1. 软件加入使用时间_你有了抢口罩软件,电商也进行了升级,我们又有了新软件(3月2日更新)...
  2. IOC操作Bean管理XML方式(注入内部 bean 和 级联赋值)
  3. 如何检查私钥和公钥是否配对_如何检查家具是否有臭虫
  4. c++ 二维数组_【技术篇】C指针与二维数组深度辨析
  5. 微信网页开发教程 php,PHP实现微信网页授权开发教程,php授权教程_PHP教程
  6. android 浮动按钮拖拽,小程序拖拽浮动按钮
  7. python里元组和列表的共同点和不同点_Python元组与列表的相同点与区别
  8. 小程序webview不全屏_小程序不在小(深度)
  9. 双路服务器cpu必须型号相同,双路主板存在使用不同型号的cpu之说吗?还是必须使用一模一样相同的cpu型号?...
  10. iis7 php5 isapi配置,Windows7 IIS7下以FastCgi和ISAPI方法安装配置PHP5教程