当前位置: 首页 > news >正文

从哪个网站设置宽带主机济南网站设计报价

从哪个网站设置宽带主机,济南网站设计报价,做网站去哪里找模板,除了个性化阶段背景 业界第三方缓存框架一般为redis#xff0c;本地缓地ehcache或guava#xff0c;一般通过spring提供的restTemplate操作缓存 然而这样会存在以下问题#xff1a; 与缓存中间件强耦合需手动整合多级缓存不支持注解数据更新时无法自动刷新缓存存在缓存穿透、缓存击穿、缓…背景 业界第三方缓存框架一般为redis本地缓地ehcache或guava一般通过spring提供的restTemplate操作缓存 然而这样会存在以下问题 与缓存中间件强耦合需手动整合多级缓存不支持注解数据更新时无法自动刷新缓存存在缓存穿透、缓存击穿、缓存雪崩风险日志不足 改造方案 基于上述问题针对每点问题提出修复/优化方案 1、与缓存中间件强耦合 对外仅暴露一个接口cacheService操作缓存调用方无需关心内部实现但需要通过配置开启第三方缓存 2、需手动整合多级缓存 自动整合两级缓存redis guava 3、不支持注解 增加自定义注解 4、数据更新时无法自动刷新缓存未实现 使用阿里开源框架canal监听mysql的binlog日志将变更通过MQ广播到消费端由消费端实时更新缓存 1MQ划分两个组集群组与机器组分别用于处理第三方缓存刷新只需一台机器处理和本地缓存刷新每台机器都要处理 2canal收到binlog变更后发送一条消息到集群组 3收到消息的机器先判断缓存是否开启了本地缓存若是则向机器组发送一条消息然后判断是否开启了第三方缓存若有则刷新最新数据 4收到本地缓存消息的机器刷新本地缓存最新数据 5、存在缓存穿透、缓存击穿、缓存雪崩风险 缓存穿透增加NULL值缓存较短的时间 缓存击穿增加锁同步数据获取过程 缓存雪崩增加预警参数提前异步刷新热点缓存监控 6、日志不足 增加统一日志方便排查问题 详细设计 模块组成 类图 配置类 支持两级缓存一级为本地缓存使用guava实现二级为分布式缓存使用redis redisson实现 二级缓存需要添加分布式服务配置而一级缓存在缓存单位中配置即可实时更新依赖MQ服务 1、服务配置 redisson配置类RedissonConfiguration用于redis相关配置 详细配置项参考附录 2、缓存单位配置 同一前缀为一个缓存单位新增配置文件cache-config.yml参考cache-config-demo.yml对缓存参数进行定义服务启动后会解析该文件将配置保存到CacheConfiguration中 注意支持依赖jar内配置cache-config.yml若key冲突则在启动时报错 caches:# 业务空间非必填application: mc# L1并发级别即同时支持多少个线程非必填l1ConcurrencyLevel: 10# 单个缓存配置cache:# 前缀必填唯一prefix: user_# 版本非必填用于缓存结构改变后升级reload最新内容version: v1# 缓存时间必填支持d/h/m/s默认sexpired: 5m# 预警时间非必填支持d/h/m/s默认s用于提前更新alarm: 2m# 序列化方式非必填支持hessian/jdk默认hessianserializer: hessian# 开启一级缓存非必填一二级至少开启其一L1:# 初始容量非必填Guava扩容代价大尽量指定所需容量initialCapacity: 100# 最大容量必填maximumSize: 1000# 并发级别非必填优先级高于l1ConcurrencyLevelconcurrencyLevel: 10# 开启二级缓存非必填一二级至少开启其一L2:# 指定配置名称必填否则无法解析为对象用于多分布式缓存源为空使用默认配置ref: xxxConfig# 实时更新配置非必填未实现reload:# 订阅的表必填多个用逗号分隔table: user, lesson# reload操作非必填UPDATE更新/DELETE删除默认/RELOAD(重新刷新)operation: UPDATE# key拼接方式非必填数据库记录用小括号作动态替换key: _(id) 模块服务类 1、存储实体 实体字段如下 public class CacheEntity implements Serializable {private static final long serialVersionUID 1L;// 真实内容通过hession/jdk进行序列化/反序列化private String value;// 缓存时间private long cacheTime;// 预警时间private long alarmTime; } 2、缓存操作 包括常规的get()、set()、add()、del()外增加带LoadingCache功能的get方法提供分布式锁方法DLock()、unDLock()由redisson实现 public T T get(String prefix, String key, LoadingCache loader, Object ... params) {CacheEntity entity null;T value null;// 获取缓存单位配置Config config CacheConfiguration.getConfig(prefix);if (config.hasL1() ! null) {// 获取L1结果entity getL1();}if (entity null) {if (config.hasL2() ! null) {// 获取L2结果entity getL2();}}if (entity null loader ! null) {// 获取数据value loader.load(params);if (value ! null) {// 设置缓存set(prefix, key, value);} else {// 设置NULL值setNull(prefix, key);}return value;}return serializer.deserialize(value); } 3、提前更新 缓存未到expired但已到alarm时在返回内容之前开启异步线程提前更新缓存内容 private void alarmUpdate(Config config, CacheEntity entity, LoadingCache loader) {long time System.currentTimeMillis() entity.getCacheTime();if (time entity.getAlarmTime()) {T value loader.load();if (value ! null) {// 设置缓存set(prefix, key, value);}} } 4、注解配置 支持在方法上增加自定义注解在调用时自动走缓存 // 获取单个缓存 MethodCache(user_) public List getList(int id, String name) {// ... } // 获取批量缓存 // 注意第一个参数必须为key的list集合返回以key分组 MultipleMethodCache(CacheServiceTest.l1Prefix) public MapString, CacheTestB getMultiAutoIncrement(ListString keys, String value, int num) {// ... } 注意只能增强由spring管理的类方法 5、实时更新未实现 使用阿里开源框架canal监听mysql的binlog日志将变更通过MQ广播到消费端具体参考Canal Kafka RocketMQ QuickStart 服务收到消息后对消息进行解析处理 public boolean consumer(byte[] bytes) {Message message JsonUtil.fromStr(bytes, Message.class);String table message.getTable();// 获取reload配置ReloadConfig reloadConfig CacheConfiguration.getReloadConfig(table);if (reloadConfig ! null) {String key reloadConfig.getKey();if (reloadConfig.getOperation() DELETE) {// 删除缓存del(key);} else {// 更新缓存update(key, message);}} } 6、其它 增加debug级别日志打印增加是否使用缓存配置用于测试用例 待实现功能 目前仅支持byte数组存储后期将开放redis其它类型的实现部分redis独有的类型geo等如真有需求是否考虑直接提供client这样子就增加了耦合性基于canal自动刷新缓存热点数据统计 附录 源码 基于spring boot通用多级缓件组件: 业界第三方缓存框架一般为redis本地缓地ehcache或guava一般通过spring提供的restTemplate操作缓存然而这样会存在一些问题期望通过此组件解决问题 redis配置 以redisson作为前缀开启redis配置redisson.open.flagtrue 单机版redis #单Redis节点模式 redisson.singleServerConfig.address127.0.0.1:6379 集群模式 集群模式除了适用于Redis集群环境也适用于任何云计算服务商提供的集群模式例如AWS ElastiCache集群版、Azure Redis Cache和阿里云Aliyun的云数据库Redis版。 #集群模式 redisson.modelCLUSTER #redis机器.一直累加下去 redisson.multiple-server-config.node-addresses[0]127.0.0.1:6379 redisson.multiple-server-config.node-addresses[1]127.0.0.1:6380 redisson.multiple-server-config.node-addresses[2]127.0.0.1:6381 云托管模式 云托管模式适用于任何由云计算运营商提供的Redis云服务包括亚马逊云的AWS ElastiCache、微软云的Azure Redis 缓存和阿里云Aliyun的云数据库Redis版 #云托管模式 redisson.modelREPLICATED #redis机器.一直累加下去 redisson.multiple-server-config.node-addresses[0]127.0.0.1:6379 redisson.multiple-server-config.node-addresses[1]127.0.0.1:6380 redisson.multiple-server-config.node-addresses[2]127.0.0.1:6381 哨兵模式 redisson.modelSENTINEL #主服务器的名称是哨兵进程中用来监测主从服务切换情况的。 redisson.multiple-server-config.master-namemymaster #redis机器.一直累加下去 redisson.multiple-server-config.node-addresses[0]127.0.0.1:6379 redisson.multiple-server-config.node-addresses[1]127.0.0.1:6380 redisson.multiple-server-config.node-addresses[2]127.0.0.1:6381 主从模式 redisson.modelMASTERSLAVE #第一台机器就是主库.其他的为从库 redisson.multiple-server-config.node-addresses[0]127.0.0.1:6379 redisson.multiple-server-config.node-addresses[1]127.0.0.1:6380 redisson.multiple-server-config.node-addresses[2]127.0.0.1:6381 属性列表 基本都是官方参数.我将参数整合了下.分为 公共参数,单例模式参数,集群模式参数 1.公共参数 属性名 默认值 备注 redisson.name default 配置名称必须保证唯一否则配置将被覆盖 redisson.password 用于节点身份验证的密码。 redisson.attemptTimeout 10000L 等待获取锁超时时间,-1则是一直等待 redisson.lockModel 单个key默认可重入锁 多个key默认联锁 锁的模式.如果不设置, REENTRANT(可重入锁),FAIR(公平锁),MULTIPLE(联锁),REDLOCK(红锁),READ(读锁), WRITE(写锁) redisson.model SINGLE 集群模式:SINGLE(单例),SENTINEL(哨兵),MASTERSLAVE(主从),CLUSTER(集群),REPLICATED(云托管) redisson.codec org.redisson.codec.JsonJacksonCodec Redisson的对象编码类是用于将对象进行序列化和反序列化以实现对该对象在Redis里的读取和存储 redisson.threads 当前处理核数量 * 2 这个线程池数量被所有RTopic对象监听器RRemoteService调用者和RExecutorService任务共同共享。 redisson.nettyThreads 当前处理核数量 * 2 这个线程池数量是在一个Redisson实例内被其创建的所有分布式数据类型和服务以及底层客户端所一同共享的线程池里保存的线程数量。 redisson.transportMode NIO TransportMode.NIO,TransportMode.EPOLL - 需要依赖里有netty-transport-native-epoll包Linux TransportMode.KQUEUE - 需要依赖里有 netty-transport-native-kqueue包macOS redisson.idleConnectionTimeout 10000 如果当前连接池里的连接数量超过了最小空闲连接数而同时有连接空闲时间超过了该数值那么这些连接将会自动被关闭并从连接池里去掉。时间单位是毫秒 redisson.connectTimeout 10000 同任何节点建立连接时的等待超时。时间单位是毫秒。 redisson.timeout 3000 等待节点回复命令的时间。该时间从命令发送成功时开始计时。 redisson.retryAttempts 3 如果尝试达到 retryAttempts命令失败重试次数 仍然不能将命令发送至某个指定的节点时将抛出错误。如果尝试在此限制之内发送成功则开始启用 timeout命令等待超时 计时。 redisson.retryInterval 1500 在一条命令发送失败以后等待重试发送的时间间隔。时间单位是毫秒。 redisson.subscriptionsPerConnection 5 每个连接的最大订阅数量。 redisson.clientName 在Redis节点里显示的客户端名称。 redisson.sslEnableEndpointIdentification true 开启SSL终端识别能力。 redisson.sslProvider JDK 确定采用哪种方式JDK或OPENSSL来实现SSL连接。 redisson.sslTruststore 指定SSL信任证书库的路径。 redisson.sslTruststorePassword 指定SSL信任证书库的密码。 redisson.sslKeystore 指定SSL钥匙库的路径。 redisson.sslKeystorePassword 指定SSL钥匙库的密码。 redisson.lockWatchdogTimeout 30000 监控锁的看门狗超时时间单位为毫秒。该参数只适用于分布式锁的加锁请求中未明确使用leaseTimeout参数的情况。如果该看门口未使用lockWatchdogTimeout去重新调整一个分布式锁的lockWatchdogTimeout超时那么这个锁将变为失效状态。这个参数可以用来避免由Redisson客户端节点宕机或其他原因造成死锁的情况。 redisson.keepPubSubOrder true 通过该参数来修改是否按订阅发布消息的接收顺序出来消息如果选否将对消息实行并行处理该参数只适用于订阅发布消息的情况。 单例模式参数 属性名 默认值 备注 redisson.singleServerConfig.address 服务器地址,必填ip:port redisson.singleServerConfig.database 0 尝试连接的数据库编号。 redisson.singleServerConfig.subscriptionConnectionMinimumIdleSize 1 用于发布和订阅连接的最小保持连接数长连接。Redisson内部经常通过发布和订阅来实现许多功能。长期保持一定数量的发布订阅连接是必须的。 redisson.singleServerConfig.subscriptionConnectionPoolSize 50 用于发布和订阅连接的连接池最大容量。连接池的连接数量自动弹性伸缩。 redisson.singleServerConfig.connectionMinimumIdleSize 32 最小保持连接数长连接。长期保持一定数量的连接有利于提高瞬时写入反应速度。 redisson.singleServerConfig.connectionPoolSize 64 连接池最大容量。连接池的连接数量自动弹性伸缩。 redisson.singleServerConfig.dnsMonitoringInterval 5000 用来指定检查节点DNS变化的时间间隔。使用的时候应该确保JVM里的DNS数据的缓存时间保持在足够低的范围才有意义。用-1来禁用该功能。 集群模式 属性名 默认值 备注 redisson.multiple-server-config.node-addresses 服务器节点地址.必填 redisson.multiple-server-config.node-addresses[0]127.0.0.1:6379 redisson.multiple-server-config.node-addresses[1]127.0.0.1:6380 redisson.multiple-server-config.node-addresses[2]127.0.0.1:6381 redisson.multiple-server-config.loadBalancer org.redisson.connection.balancer.RoundRobinLoadBalancer 在多Redis服务节点的环境里可以选用以下几种负载均衡方式选择一个节点 org.redisson.connection.balancer.WeightedRoundRobinBalancer - 权重轮询调度算法 org.redisson.connection.balancer.RoundRobinLoadBalancer - 轮询调度算法 org.redisson.connection.balancer.RandomLoadBalancer - 随机调度算法 redisson.multiple-server-config.slaveConnectionMinimumIdleSize 32 多从节点的环境里每个 从服务节点里用于普通操作非 发布和订阅的最小保持连接数长连接。长期保持一定数量的连接有利于提高瞬时读取反映速度。 redisson.multiple-server-config.slaveConnectionPoolSize 64 多从节点的环境里每个 从服务节点里用于普通操作非 发布和订阅连接的连接池最大容量。连接池的连接数量自动弹性伸缩。 redisson.multiple-server-config.masterConnectionMinimumIdleSize 32 多节点的环境里每个 主节点的最小保持连接数长连接。长期保持一定数量的连接有利于提高瞬时写入反应速度。 redisson.multiple-server-config.masterConnectionPoolSize 64 多主节点的环境里每个 主节点的连接池最大容量。连接池的连接数量自动弹性伸缩。 redisson.multiple-server-config.readMode SLAVE 设置读取操作选择节点的模式。 可用值为 SLAVE - 只在从服务节点里读取。 MASTER - 只在主服务节点里读取。 MASTER_SLAVE - 在主从服务节点里都可以读取。 redisson.multiple-server-config.subscriptionMode SLAVE 设置订阅操作选择节点的模式。 可用值为 SLAVE - 只在从服务节点里订阅。 MASTER - 只在主服务节点里订阅。 redisson.multiple-server-config.subscriptionConnectionMinimumIdleSize 1 用于发布和订阅连接的最小保持连接数长连接。Redisson内部经常通过发布和订阅来实现许多功能。长期保持一定数量的发布订阅连接是必须的。 redisson.multiple-server-config.subscriptionConnectionPoolSize redisson.multiple-server-config.dnsMonitoringInterval 5000 监测DNS的变化情况的时间间隔。 redisson.multiple-server-config.scanInterval 1000 (集群,哨兵,云托管模特特有) 对Redis集群节点状态扫描的时间间隔。单位是毫秒。 redisson.multiple-server-config.database 0 (哨兵模式,云托管,主从模式特有)尝试连接的数据库编号。 redisson.multiple-server-config.masterName (哨兵模式特有)主服务器的名称是哨兵进程中用来监测主从服务切换情况的。 多redis源配置 以multiple.redisson为前缀sources为多源以key/value配置value与上面的配置一致去掉redission 例 multiple.redisson.sources.test2.singleServerConfig.address10.8.104.71:6379 multiple.redisson.sources.test2.threads1 即reftest2时使用上述配置
http://www.w-s-a.com/news/222735/

相关文章:

  • 大连零基础网站建设培训电话郎溪做网站
  • 成都科技网站建设注册公司最少需要多少注册资金
  • 找公司做网站注意事项麻城建设局网站停办
  • 沧州企业做网站wordpress 消息通知
  • 网站开发外包计入什么科目怎样申请网站空间
  • 西安建设局网站小孩把巴塘网站建设
  • 做网站 客户一直要求改郑州做优惠券网站的公司
  • 专门做特卖的网站是什么东北石油大学秦皇岛吧
  • 网站建设需要云主机吗wordpress 下载数据表插件
  • 集团网站建设哪个好石龙镇仿做网站
  • 网站建设费税率是多少项目备案信息查询
  • 网站开发php有哪些权威发布型舆情回应
  • 凡科建站有哪些弊端百度手机怎么刷排名多少钱
  • 南山网站公司在招聘网站做销售工资高吗
  • 百度联盟怎么加入赚钱合肥seo按天收费
  • 网站建设与用户需求分析加盟店排行榜加盟项目排行榜
  • 柳州市诚信体系建设网站wordpress建手机网站吗
  • 网站策划书是什么水产公司网站源码
  • 温州做网站多少钱网站服务器机房
  • 网站公司设计 网站首页什么网站专门做图片
  • 书店网站怎么做网站点击快速排名
  • 太阳镜商城网站建设公司做网站
  • 如何制作个人作品网站宣传片拍摄合同
  • 关于微网站策划ppt怎么做做插画的网站
  • 做设计网上揽活哪个网站最好中企动力算大厂吗
  • 电子商务网站开发常用工具牡丹江吧
  • 四川成都网站制作公司wordpress 获取某个分类的文章
  • wordpress 编辑器推动门户网站建设不断优化升级
  • 做游戏网站的前景温江区建设局网站
  • 济南做微网站推广做网站seo优化总结