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

做网站 绑定域名网站建设销售客户开发

做网站 绑定域名,网站建设销售客户开发,页面设计读书笔记1500,代发网站建设前言 之前在做 秒杀架构实践 时有提到对 distributed-redis-tool 的一次小升级#xff0c;但是没有细说。 其实主要原因是#xff1a; 秒杀时我做压测#xff1a;由于集成了这个限流组件#xff0c;并发又比较大#xff0c;所以导致连接、断开 Redis 非常频繁。 最终导致获… 前言 之前在做 秒杀架构实践 时有提到对 distributed-redis-tool 的一次小升级但是没有细说。 其实主要原因是 秒杀时我做压测由于集成了这个限流组件并发又比较大所以导致连接、断开 Redis 非常频繁。 最终导致获取不了 Redis connection 的异常。 池化技术 这就是一个典型的对稀缺资源使用不善导致的。 何为稀缺资源常见的有 线程数据库连接网络连接等这些资源都有共同的特点创建销毁成本较高。 这里涉及到的 Redis 连接也属于该类资源。 我们希望将这些稀有资源管理起来放到一个池子里当需要时就从中获取用完就放回去不够用时就等待或返回。 这样我们只需要初始化并维护好这个池子就能避免频繁的创建、销毁这些资源也有资源长期未使用需要缩容的情况。 通常我们称这项姿势为池化技术如常见的 线程池各种资源的连接池等。为此我将使用到 Redis 的 分布式锁、分布式限流 都升级为利用连接池来获取 Redis 的连接。 这里以分布式锁为例 将使用的 api 修改为 原有 Configuration public class RedisLockConfig {Beanpublic RedisLock build(){//Need to get Redis connection RedisLock redisLock new RedisLock() ;HostAndPort hostAndPort new HostAndPort(127.0.0.1,7000) ;JedisCluster jedisCluster new JedisCluster(hostAndPort) ;RedisLock redisLock new RedisLock.Builder(jedisCluster).lockPrefix(lock_test).sleepTime(100).build();return redisLock ;}} 现在 Configuration public class RedisLockConfig {private Logger logger LoggerFactory.getLogger(RedisLockConfig.class);Autowiredprivate JedisConnectionFactory jedisConnectionFactory;Beanpublic RedisLock build() {RedisLock redisLock new RedisLock.Builder(jedisConnectionFactory,RedisToolsConstant.SINGLE).lockPrefix(lock_).sleepTime(100).build();return redisLock;} } 将以前的 Jedis 修改为 JedisConnectionFactory后续的 Redis 连接就可通过这个对象获取。 并且显示的传入使用 RedisCluster 还是单机的 Redis。 所以在真正操作 Redis 时需要修改 public boolean tryLock(String key, String request) {//get connectionObject connection getConnection();String result ;if (connection instanceof Jedis){result ((Jedis) connection).set(lockPrefix key, request, SET_IF_NOT_EXIST, SET_WITH_EXPIRE_TIME, 10 * TIME);((Jedis) connection).close();}else {result ((JedisCluster) connection).set(lockPrefix key, request, SET_IF_NOT_EXIST, SET_WITH_EXPIRE_TIME, 10 * TIME);try {((JedisCluster) connection).close();} catch (IOException e) {logger.error(IOException,e);}}if (LOCK_MSG.equals(result)) {return true;} else {return false;}}//获取连接private Object getConnection() {Object connection ;if (type RedisToolsConstant.SINGLE){RedisConnection redisConnection jedisConnectionFactory.getConnection();connection redisConnection.getNativeConnection();}else {RedisClusterConnection clusterConnection jedisConnectionFactory.getClusterConnection();connection clusterConnection.getNativeConnection() ;}return connection;} 最大的改变就是将原有操作 Redis 的对象T extends JedisCommands改为从连接池中获取。 由于使用了 org.springframework.data.redis.connection.jedis.JedisConnectionFactory 作为 Redis 连接池。 所以需要再使用时构件好这个对象 JedisPoolConfig config new JedisPoolConfig();config.setMaxIdle(10);config.setMaxTotal(300);config.setMaxWaitMillis(10000);config.setTestOnBorrow(true);config.setTestOnReturn(true);RedisClusterConfiguration redisClusterConfiguration new RedisClusterConfiguration();redisClusterConfiguration.addClusterNode(new RedisNode(10.19.13.51, 7000));//单机JedisConnectionFactory jedisConnectionFactory new JedisConnectionFactory(config);//集群//JedisConnectionFactory jedisConnectionFactory new JedisConnectionFactory(redisClusterConfiguration) ;jedisConnectionFactory.setHostName(47.98.194.60);jedisConnectionFactory.setPort(6379);jedisConnectionFactory.setPassword();jedisConnectionFactory.setTimeout(100000);jedisConnectionFactory.afterPropertiesSet();//jedisConnectionFactory.setShardInfo(new JedisShardInfo(47.98.194.60, 6379));//JedisCluster jedisCluster new JedisCluster(hostAndPort);HostAndPort hostAndPort new HostAndPort(10.19.13.51, 7000);JedisCluster jedisCluster new JedisCluster(hostAndPort);redisLock new RedisLock.Builder(jedisConnectionFactory, RedisToolsConstant.SINGLE).lockPrefix(lock_).sleepTime(100).build();看起比较麻烦需要构建对象的较多。 但整合 Spring 使用时就要清晰许多。 配合 Spring Spring 很大的一个作用就是帮我们管理对象所以像上文那些看似很复杂的对象都可以交由它来管理 !-- jedis 配置 --bean idJedispoolConfig classredis.clients.jedis.JedisPoolConfigproperty namemaxIdle value${redis.maxIdle}/property namemaxTotal value${redis.maxTotal}/property namemaxWaitMillis value${redis.maxWait}/property nametestOnBorrow value${redis.testOnBorrow}/property nametestOnReturn value${redis.testOnBorrow}//bean!-- redis服务器中心 --bean idconnectionFactory classorg.springframework.data.redis.connection.jedis.JedisConnectionFactoryproperty namepoolConfig refJedispoolConfig/property nameport value${redis.port}/property namehostName value${redis.host}/property namepassword value${redis.password}/property nametimeout value${redis.timeout}/property/beanbean idredisTemplate classorg.springframework.data.redis.core.RedisTemplateproperty nameconnectionFactory refconnectionFactory/property namekeySerializerbean classorg.springframework.data.redis.serializer.StringRedisSerializer//propertyproperty namevalueSerializerbean classorg.springframework.data.redis.serializer.StringRedisSerializer//property/bean 这个其实没多少好说的就算是换成 SpringBoot 也是创建 JedispoolConfig,connectionFactory,redisTemplate 这些 bean 即可。 总结 换为连接池之后再进行压测自然没有出现获取不了 Redis 连接的异常并发达到一定的量也会出错说明更新是很有必要的。 推荐有用到该组件的朋友都升级下也欢迎提出 Issues 和 PR。 项目地址 https://github.com/crossoverJie/distributed-redis-tool 转载于:https://www.cnblogs.com/crossoverJie/p/9385900.html
http://www.yutouwan.com/news/93337/

相关文章:

  • 门户网站的意义服务器个人买能干什么
  • 衡阳网站建设要点推广做网站怎么挣钱最快
  • 西安高端网站设计公司中国建设银行开放式网站
  • aspnet网站开发源码百度手机助手应用商店下载
  • node.js做网站开发百度指数的主要功能有
  • 做化学题的网站视频网站开发 博客园
  • 深圳做网站排名哪家专业深圳前十网站建设公司
  • 网站和app的开发成本有域名了也备案了怎么做网站
  • ASP.NET2.0网站开发全程解析钟落潭有没有做网站的
  • 论文收录网站网站设计公司大概多少钱
  • 营销式网站建设个人seo怎么赚钱
  • 吉林省网站建设公司做万词霸屏后网站关键词没有排名
  • 网站开发语言php高端网站定制公司
  • 校园网站建设初探论文舆情分析网站免费
  • 电脑网站打不开了但是有网动漫网站设计理念
  • 免费的十大免费货源网站如何在国外网站做推广
  • 开发网站培训班企业培训课程分类
  • 两学一做网站源码php网站开发环境的设置
  • 宁波建站平台网站优化排名软件推广
  • pythom+网站开发规范在线营销型网站建设
  • 做网站需要多少带宽怎么上传文件到ftp网站
  • 绵阳网站推广排名后端开发技术有哪些
  • VIP视频网站有得做吗网站建设分金手指专业十四
  • 网站开发计入什么费用风景名胜区建设部网站
  • 网站建设学校培训学校无锡百度网站推广渠道
  • 做网站游戏怎么挣钱天津市开发区建设管理局网站
  • 青岛做网站大公司有哪些WordPress应用商城
  • 用html做简单网站wordpress 综合主题
  • r语言网站开发代理公司经营范围
  • 河南生产型企业网站建设成都seo服务