缓存

优质
小牛编辑
117浏览
2023-12-01

有些服务的数据不会经常更新,或者需要提高服务的性能,采用缓存是最好的解决方案,Uragano目前集成了对Redis和Memory缓存的支持。缓存是加持在客户端的,所以只有在客户端启用缓存才会生效,并且只有有返回值的服务方法才会有缓存。

Redis缓存

Redis普通缓存

service.AddUragano(context.Configuration, builder =>
                    {
                        builder.AddClient<LoadBalancingPolling>();
                        builder.AddConsul();
                        builder.AddRedisCaching();
                    });

Redis分区缓存

service.AddUragano(context.Configuration, builder =>
                    {
                        builder.AddClient<LoadBalancingPolling>();
                        builder.AddConsul();
                        builder.AddRedisPartitionCaching((key,connections)=>{
                            //实现自己的分区算法
                            return connections.First();
                        });
                    });

AddRedisPartitionCaching方法进行了重载,可以自定义分区算法,分区策略非必须的,Uragano默认采用一致性Hash算法。

配置

"Uragano": {
    "Caching": {
      "Redis": {
        "KeyPrefix": "Uragano",
        "ExpireSeconds": 60,
        "ConnectionStrings": [
          {
            "Host": "localhost",
            "Port": 6379,
            "Password": "123456",
            "DefaultDatabase": 13,
            "PoolSize": 50,
            "SSL": false,
            "ConnectionTimeout": -1,
            "PreHeat": true,
            "WriteBuffer": 10240,
            "TryIt": 0,
            "Name": ""
          }
        ]
      },
      "Memory": {
        "ExpireSeconds": 60
      }
    }
  }

Memory缓存

service.AddUragano(context.Configuration, builder =>
                    {
                        builder.AddClient<LoadBalancingPolling>();
                        builder.AddConsul();
                        builder.AddMemoryCaching();
                    });

缓存Key

默认系统以:{前缀}:{服务路由}:{MD5(服务参数)}作为缓存的Key,你可以通过实现ICachingKeyGenerator接口来自定义生成器。

自定义属性

如果有个别服务需要自定义key的名字或过期时间,可以使用CachingAttribute属性来定义

属性说明
Key自定义key的名字,例如:customKey:{0}:{1},里面的占位符是具体服务方法对应的参数的值(ToString),下标不能超过参数的数量
ExpireSeconds缓存的过期时间(秒)

禁用缓存

使用NonCachingAttribute属性来禁用缓存