Java 缓存密钥中的通配符

Java 缓存密钥中的通配符,java,caching,Java,Caching,我有一个场景,其中我向一个外部服务发送了3个参数,并期望得到一个结果。我想找到一种优雅的方法来缓存结果 问题是这3个参数之间有层次结构。比如: 城市 街头 建筑 我希望能够在比“城市”级别更低的级别上缓存通配符。例如: 缓存包含键“NY,*,453”和键“NY,16st,*” 对于参数为“NY,15st,453”的请求是成功的,而对于“NY,15st,444”的请求是失败的 仅使用带有“*”标记通配符的普通对象将导致使用许多“如果”来检查条件。我曾想过重写equals和toString方法,

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

问题是这3个参数之间有层次结构。比如:

  • 城市
  • 街头
  • 建筑
  • 我希望能够在比“城市”级别更低的级别上缓存通配符。例如:

    • 缓存包含键“NY,*,453”和键“NY,16st,*”
    • 对于参数为“NY,15st,453”的请求是成功的,而对于“NY,15st,444”的请求是失败的

    仅使用带有“*”标记通配符的普通对象将导致使用许多“如果”来检查条件。我曾想过重写
    equals
    toString
    方法,但我找不到正确的方法。

    老实说,我认为尝试将其作为简单字符串来执行会非常痛苦

    我推荐一种不同的解决方案

    作为一名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);
        }
    }
    
    类地址{
    //财产。
    城市:字符串,
    街道:弦,
    建筑物:字符串
    }
    班级地址{
    Add:列表
    公共bool GetHit(城市、街道、建筑){
    foreach(变量外接程序外接程序){
    如果(add.city==城市)&&(add.street==街道)&&(add.building==大楼){
    返回true;
    }
    }
    返回false;
    }
    公共bool GetHitByKey(城市、街道、建筑){
    //首先,检查街道上是否有通配符
    如果GetHit(城市,“*”,建筑){
    返回true;
    }
    如果GetHit(城市,“*”,“*”){
    返回true;
    }
    返回GetHit(城市、街道、建筑);
    }
    }
    
    待办事项:

    • 传递一个对象而不是3个参数
    • 使用二进制搜索而不是线性搜索

    如果“NY,*,453”的所有元素都不适合您的主内存怎么办?请使用MongoDB/JSONDB@Leo-我不确定我的问题是否正确,但我的想法是只保留带有通配符的键,而不是所有适合该键的元素。@ControlAltDel-我在代码级别上寻找一些东西,而不是存储。错误。。。那你到底打算缓存什么呢?钥匙?