缓存
优质
小牛编辑
130浏览
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属性来禁用缓存