redis的hash tag在业务开发中的应用

背景:最近在做业务开发时候,需要根据活动列表,获取一批营销活动的详情,循环每一次获取一个的话,会比较耗时,在活动详情存储时,用city_id作为tag可以节省时间;因为在redis的批量操作命令对集群都不友好,因为Redis的官方集群方案是把key通过crc16计算hash映射到16384个桶上,落到哪个桶上就落到哪个机器上。网上的《缓存无底洞问题》讲了几种在集群下使用mget的方案:一是拆成多次get,二是根据机器节点顺序查询,三是根据节点并行查询,四是使用hash tag。

具体实现方式参考文章:redis+mget+java,Redis集群下的mget(Spring RedisTemplate版)_五个橘核的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java使用Redis存储hashhash的数据,可以通过使用RedisHash数据结构来实现。Hash数据结构可以存储键值对的集合,其每个键都是唯一的,并且与一个值相关联。 要在Redis存储hashhash的数据,可以按照以下步骤进行操作: 1. 导入RedisJava客户端库,例如Jedis或Lettuce。 2. 创建Redis连接并获取Redis客户端实例。 3. 使用客户端实例选择要操作的数据库(如果需要)。 4. 使用`hmset`命令将外层hash的键值对存储到Redis。该命令接受一个外层hash的键名和一个Map对象作为参数,其Map对象表示内层hash的键值对。 5. 遍历内层hash的键值对,使用`hmset`命令将每个内层hash存储到Redis。内层hash的键名可以使用外层hash的键名加上一个特定的前缀来表示,以区分不同的内层hash。 6. 关闭Redis连接。 下面是一个示例代码,演示了如何在Java使用Jedis库将hashhash的数据存储到Redis: ```java import redis.clients.jedis.Jedis; public class RedisHashNestedHashExample { public static void main(String[] args) { // 创建Redis连接 Jedis jedis = new Jedis("localhost"); // 选择数据库(可选) jedis.select(0); // 外层hash的键名 String outerHashKey = "outerHash"; // 内层hash的前缀 String innerHashPrefix = "innerHash:"; // 外层hash的键值对 jedis.hmset(outerHashKey, Map.of( "innerHash1", innerHashPrefix + "1", "innerHash2", innerHashPrefix + "2" )); // 内层hash的键值对 jedis.hmset(innerHashPrefix + "1", Map.of( "field1", "value1", "field2", "value2" )); jedis.hmset(innerHashPrefix + "2", Map.of( "field3", "value3", "field4", "value4" )); // 关闭Redis连接 jedis.close(); } } ``` 请注意,上述示例代码仅演示了如何将hashhash的数据存储到Redis,如果需要查询或更新这些数据,可以使用Redis提供的相应命令进行操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值