zoukankan      html  css  js  c++  java
  • C#缓存-----理解随记

    缓存:为了快速获取结果,在第一次获取数据后存起来,下次直接用
    缓存依托内存,系统重启后,缓存会重启
    缓存究竟用在哪里?
    1会重复请求,2数据相对稳定 3 耗时,耗资源4 体积不大


    配置文件,菜单--权限,省市区,类别数据,热搜(二八原则),分页(只要数据不是经常变),
    公告,技能属性,数据字典
    如果一个数据缓存一次,能被有效的查询4次,就是值得的
    (大型系统的时候,为了性能,为了压力,更多缓存)

    缓存一般是会有延迟的,这个很难避免,因为缓存的本质决定了是使用上一次的结果
    缓存本身是共享的,应该是唯一的
    本地缓存空间小,不能跨进程共享
    小项目可以随意缓存
    中大型不够用的,一般会用分布式缓存

    一旦数据修改怎么处理?
    1、一个用户权限----用户-角色-菜单 查询比较麻烦,也很频繁,相对稳定,所以为每个用户缓存一个
    假如修改了某个用户的角色, 缓存数据的其实失效了
    这时只有某一个数据的权限数据失效,则Remove掉
    Remove不是update的原因:缓存只是一个临时存储,不是数据源

    2、删除一个菜单,会影响一大批用户,
    若:菜单-角色-用户,然后拼装出全部的key,然后遍历删除?- - 成本太高,缓存应该是提升性能
    若:全部删除 ,RemoveALL ,会误删别的缓存,造成缓存穿透
    想:清楚跟菜单有关的数据
    在key里做文章,把缓存数据分类
    只要缓存跟菜单有关的额数据都加上_Menu_
    想:只删除那一个MenuID ,--不可能,控制不了那么细致

    3、定时作业更新了数据---远程接口更新了数据,更多的时候是我们不知道数据变了
    给系统提供了一个接口,更新数据也来通知下系统(能解决少量场景)
    缓存是沿用上一次的结果,根本不会去数据源的----肯定有误差
    可以做一下过期,加个时间有效性,数据延迟来换取性能,需要抉择
    只要在有效期内,不管数据源有没有变化,都以缓存为准
    只要超过有效期,不管数据源有没有变化,都去重新获取
    主动清理:只要是过期,最多超过10分钟,一定会被清理
    被动清理:除非我们去访问这条缓存,才会去清理,任何过期的数据,都不可以被查到


    4、自定义缓存
    多线程并发了,插入数据,删除,查询会不会冲突?? 肯定会的
    加锁,基本全部环节都是需要lock的,操作并不是很耗时间但是锁很耗时间

    线程安全的字段ConcurrentDictionary 多线程操作时候不冲突,内部实现了锁的
    如果要线程安全,对一块内存的操作,必须是单线程的

  • 相关阅读:
    java前端学习步骤
    安装Sublime Text 3插件的方法(转自Rising的博文)
    LibSVM学习详细说明
    class 2-3 小项目练习
    class 2-2 小项目练习
    class 2-1 小项目练习
    class 1-1 python开发环境配置
    Class
    class 10 文件和异常
    class
  • 原文地址:https://www.cnblogs.com/Yida-Tingting/p/12924343.html
Copyright © 2011-2022 走看看