首页 > 解决方案 > 在 Java 中使用 Redisson 在 Redis 中创建 SQL 类型表的任何替代解决方案

问题描述

在 Java 应用程序中使用 Redisson 在 Redis 中创建 SQL 表结构的任何替代解决方案。例如说产品表。

标准流程是实例化 RMapCache 并将产品添加到其中 - 像这样

    // save the prod to ProdTableCache
    final RMapCache<String, Product> prodMap;
    String prodMapKey = "ProductTable";
    final TypedJsonJacksonCodec prodCodec = new TypedJsonJacksonCodec(String.class, Product.class, new ObjectMapper());
    prodMap = redisson.getMapCache(prodMapKey, prodCodec);

    Product prod1 = new Product("Prod101", "Mobile", 1000);
    Product prod2 = new Product("Prod102", "Tablet", 2000);
    
    prodMap.put(prod1.id, prod1, 2, TimeUnit.DAYS);
    prodMap.put(prod2.id, prod2, 2, TimeUnit.DAYS);

这在 Redis 中会导致这样的结果

hscan "ProductTable" 0
1) "0"
2) 1) "\"Prod101\""
   2) "\x00\x00\x00\x00\x00\x00\x00\x00-\x00\x00\x00\x00\x00\x00\x00{\"id\":\"Prod101\",\"name\":\"Mobile\",\"price\":1000}"
   3) "\"Prod102\""
   4) "\x00\x00\x00\x00\x00\x00\x00\x00-\x00\x00\x00\x00\x00\x00\x00{\"id\":\"Prod102\",\"name\":\"Tablet\",\"price\":2000}"

虽然这解决了眼前的问题,但出现了 2 或 3 个问题

  1. 执行 get 命令时 - prodRet = prodMap.get("Prod101");Redis 是否需要进行 2 步查找 - 首先找到“ProductTable”,然后在其中找到 prod 键?这不贵吗?
  2. 在 Redis 集群环境中,整个“ProductTable”将在 1 个节点中的 1 个 SLOT 中结束。那么跨集群分片有什么用呢?是的,可能有其他表可能会转到其他节点,但不能保证。

如果有人对此有更好的解决方案或更好的见解,请分享。或者我在这里错过了什么?

感谢你的帮助...

标签: hashredisredis-clusterredisson

解决方案


推荐阅读