欢迎各位兄弟 发布技术文章
这里的技术是共享的
Sticky Session 就是粘性的Session,因为session保存在某一服务器上,集群情况下,如果上一个请求是某服务器,下一个请求还得是同一个服务器
注册内存缓存 (InMemory Cache)
注入内存缓存
MemoryCacheEntryOptions
●绝对过期时间,Absolute expiration time
●Sliding expiration time #可调的过期时间,请求访问到这个缓存之后,就会重置缓存的过期时间
●缓存优先级
●PostEvictionDelegate #缓存里面那块数据被清除之后,被调用
CACHE TAG HELPER属性
●enabled #启用
●expires-on #绝对的过期时间, 比如某年某月某日
●expires-after #这个属性的值是一个时间长度 timespan
●expires-sliding #可调的过期时间,也是一个 timespan
●vary-by-header #比如我们设置 vary-by-header 等于 user agent,下一次如果访问的时候, user agent的值变了,那么缓存就需要刷新,,,,如果是监控的是好几个 header 的话,那么每个 header 之间用逗号分开就可以了
●vary-by-query
●vary-by-route
●vary-by-cookie
●vary-by-user
●vary-by
●priority
第一次运行走到这个断点了
30秒之后刷后页面,又走到断点了
因为30秒后不取缓存了,又因为 断网了 ,所以执行 @await Component.InvokeAsync("InternetStatus") 会报错了
分布式缓存
●IlDistributedCache
●Get, GetAsync
●Set, SetAsync,
●Refresh, RefreshAsync
●Remove, RemoveAsync
分布式缓存
●分布式Memory Cache #开发时使用,实际上不太分布式
●分布式Sql Server Cache #生产时使用
●分布式Redis Cache #生产时使用,实际中一般用它
# docker images #没看到 redis
# docker pull redis #把 redis 镜像拉下来
# docker run --name my-redis -d redis #运行一个容器,建立一个容器
# docker ps #看看 docker 运行的状态
# docker run -it --link my-redis:my-redis --rm redis redis-cli -h my-redis -p 6379 #连redis,并使用redis-cli,,, -it就是interactive???--rm表示容器停止之后,就把这个容器删除
安装一下分布式缓存
var serializedString = JsonConvert.SerializeObject( cachedAlbums ); #给对象进行序列化,串行化
byte[] encodedAlbums = Encoding. UTF8.GetBytes( serializedString ); #把字符串转成字节数组
string serializedString = Encoding.UTF8.GetString(encodedAlbums); #把字节数组转换成字符串
var cacedALbums = JsonConvert.Deserialize0bject<List<Album>>(serializedString); #把字符串反序列化成对象
redis 连接不上,可能容器的端口 没有暴露
暴露一下端口
# docker run - -name second-redis -d -p 6379:6379 redis
RESPONSE缓存 #把响应给缓存一下
●基于Header
●客户端缓存
●使用ResponseCache这个Attribute
RESPONSE缓存参数
●Location #设置缓存在哪,要么是any?要么是client?,设置为none,就不会进行缓存了
●Duration #设置缓存时间的长短
●NoStore #表示不应该进行缓存,就需要把header 设置成 no store no cache,
●VaryByHeader #可以设置到底检查哪个header 的值来决定是否使用缓存
[ResponseCache(Duration = 30,Location = ResponseCacheLocation.Client)] #浏览器前进后退,缓存才起作用,当刷新浏览器时,缓存不起作用
压缩
●压缩传输的数据
压缩
app. UseResponseCompression( );默认是gzip的压缩,,方法里面的参数可以改压缩的格式或者级别