缓存键中的通配符

时间:2014-08-25 19:05:51

标签: java caching

我有一个场景,我将3个参数发送到外部服务并期望得到结果。我想找到一种优雅的方法来缓存结果。

问题是3个参数之间有层次结构。类似的东西:

  1. 建筑
  2. 我希望能够在比#34; City"更低的级别上使用通配符进行缓存。例如:

    • 缓存包含密钥" NY,*,453"和关键" NY,16st,*"
    • 请求使用params" NY,15st,453"这是一个热门,纽约,第15,444和#34;那是一个小姐。

    仅使用普通对象' *'标记通配符会导致有很多" if" s以检查条件。我考虑过覆盖equalstoString方法,但我无法找到正确的方法。

1 个答案:

答案 0 :(得分:1)

老实说,我认为尝试将此作为简单的字符串会对N度感到痛苦。

我建议采用不同的解决方案。

不是Java开发人员,我不能给你准确的语法,但P代码应该足够接近。

class Address {

   // Properties.
   City: string,
   Street: string,
   Building: string
}

class Addresses {
    Add: List<Address>

     public bool GetHit(city, street, building) {
       foreach(var add in Add) {
         if (add.city == city) && (add.street == street) && (add.building == building) {
           return true;
         }
       }
       return false;
     }


    public bool GetHitByKey(city, street, building) {
      // First, check to see if there is a wildcard on the street
      if GetHit(city, "*", building) {
        return true;
      }

      if GetHit(city, "*", "*") {
        return true;
      }

      return GetHit(city, street, building);
    }
}

<强> TODO:

  • 传递一个对象而不是三个参数
  • 使用二分搜索而不是线性搜索。