欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

26. 缓存 要点 有大用

image.png


image.png



image.png

image.png


Sticky Session 就是粘性的Session,因为session保存在某一服务器上,集群情况下,如果上一个请求是某服务器,下一个请求还得是同一个服务器

image.png



注册内存缓存  (InMemory Cache)

image.png





注入内存缓存

image.png




MemoryCacheEntryOptions

    ●绝对过期时间,Absolute expiration time

    ●Sliding expiration time   #可调的过期时间,请求访问到这个缓存之后,就会重置缓存的过期时间

    ●缓存优先级

    ●PostEvictionDelegate            #缓存里面那块数据被清除之后,被调用

image.png




image.png



image.png



image.png



image.png



image.png




image.png


image.png





image.png




image.png














image.png



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


image.png







image.png





第一次运行走到这个断点了

image.png




image.png






image.png






30秒之后刷后页面,又走到断点了

image.png





因为30秒后不取缓存了,又因为 断网了 ,所以执行   @await Component.InvokeAsync("InternetStatus")  会报错了

image.png








image.png


image.png




分布式缓存

    ●IlDistributedCache

    ●Get, GetAsync

    ●Set, SetAsync,

    ●Refresh, RefreshAsync

    ●Remove, RemoveAsync


image.png




分布式缓存

    ●分布式Memory Cache         #开发时使用,实际上不太分布式

    ●分布式Sql Server Cache        #生产时使用

    ●分布式Redis Cache        #生产时使用,实际中一般用它



image.png








#  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表示容器停止之后,就把这个容器删除

image.png



image.png


image.png




image.png









安装一下分布式缓存

image.png


image.png










image.png






image.png



var serializedString = JsonConvert.SerializeObject( cachedAlbums );    #给对象进行序列化,串行化

byte[] encodedAlbums = Encoding. UTF8.GetBytes( serializedString );   #把字符串转成字节数组


string serializedString = Encoding.UTF8.GetString(encodedAlbums);        #把字节数组转换成字符串

var cacedALbums = JsonConvert.Deserialize0bject<List<Album>>(serializedString);    #把字符串反序列化成对象

image.png





redis 连接不上,可能容器的端口 没有暴露

image.png



暴露一下端口

# docker run - -name second-redis -d -p 6379:6379 redis

image.png




image.png





RESPONSE缓存            #把响应给缓存一下

    ●基于Header

    ●客户端缓存

    ●使用ResponseCache这个Attribute


image.png




RESPONSE缓存参数

    ●Location        #设置缓存在哪,要么是any?要么是client?,设置为none,就不会进行缓存了

    ●Duration        #设置缓存时间的长短

    ●NoStore         #表示不应该进行缓存,就需要把header 设置成 no store no cache,

    ●VaryByHeader        #可以设置到底检查哪个header 的值来决定是否使用缓存


image.png








image.png






[ResponseCache(Duration = 30,Location = ResponseCacheLocation.Client)]   #浏览器前进后退,缓存才起作用,当刷新浏览器时,缓存不起作用

image.png





image.png






压缩

    ●压缩传输的数据

image.png


压缩

image.png




app. UseResponseCompression( );默认是gzip的压缩,,方法里面的参数可以改压缩的格式或者级别

image.png













































普通分类: