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

移动网站开发认证做cps的网络文学网站

移动网站开发认证,做cps的网络文学网站,免费写文案神器,win7 做网站服务器【Redis】SSM整合Redis注解式缓存的使用 一、SSM整合Redis1.2.配置文件spring-redis.xml1.3.修改applicationContext.xml1.4.配置redis的key生成策略 二、Redis的注解式开发及应用场景2.1.什么是Redis注解式2.实列测试 三、Redis中的击穿、穿透、雪崩的三种场景 一、SSM整… 【Redis】SSM整合Redis注解式缓存的使用 一、SSM整合Redis1.2.配置文件spring-redis.xml1.3.修改applicationContext.xml1.4.配置redis的key生成策略 二、Redis的注解式开发及应用场景2.1.什么是Redis注解式2.实列测试· 三、Redis中的击穿、穿透、雪崩的三种场景 一、SSM整合Redis 1.1.pom配置 ?xml version1.0 encodingUTF-8?project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdorg.example/groupIdartifactIdssm2/artifactIdversion1.0-SNAPSHOT/versionpackagingwar/packagingnamessm2 Maven Webapp/name!-- FIXME change it to the projects website --urlhttp://www.example.com/urlpropertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncodingmaven.compiler.source1.8/maven.compiler.sourcemaven.compiler.target1.8/maven.compiler.targetmaven.compiler.plugin.version3.7.0/maven.compiler.plugin.version!--添加jar包依赖--!--1.spring 5.0.2.RELEASE相关--spring.version5.0.2.RELEASE/spring.version!--2.mybatis相关--mybatis.version3.4.5/mybatis.version!--mysql--mysql.version5.1.44/mysql.version!--pagehelper分页jar依赖--pagehelper.version5.1.2/pagehelper.version!--mybatis与spring集成jar依赖--mybatis.spring.version1.3.1/mybatis.spring.version!--3.dbcp2连接池相关 druid--commons.dbcp2.version2.1.1/commons.dbcp2.versioncommons.pool2.version2.4.3/commons.pool2.version!--4.log日志相关--log4j2.version2.9.1/log4j2.version!--5.其他--junit.version4.12/junit.versionservlet.version4.0.0/servlet.versionlombok.version1.18.2/lombok.versionehcache.version2.10.0/ehcache.versionslf4j-api.version1.7.7/slf4j-api.versionredis.version2.9.0/redis.versionredis.spring.version1.7.1.RELEASE/redis.spring.version/propertiesdependencies!--1.spring相关--dependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion${spring.version}/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-orm/artifactIdversion${spring.version}/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-tx/artifactIdversion${spring.version}/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-aspects/artifactIdversion${spring.version}/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-web/artifactIdversion${spring.version}/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-test/artifactIdversion${spring.version}/version/dependency!--2.mybatis相关--dependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion${mybatis.version}/version/dependency!--mysql--dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion${mysql.version}/version/dependency!--pagehelper分页插件jar包依赖--dependencygroupIdcom.github.pagehelper/groupIdartifactIdpagehelper/artifactIdversion${pagehelper.version}/version/dependency!--mybatis与spring集成jar包依赖--dependencygroupIdorg.mybatis/groupIdartifactIdmybatis-spring/artifactIdversion${mybatis.spring.version}/version/dependency!--3.dbcp2连接池相关--dependencygroupIdorg.apache.commons/groupIdartifactIdcommons-dbcp2/artifactIdversion${commons.dbcp2.version}/version/dependencydependencygroupIdorg.apache.commons/groupIdartifactIdcommons-pool2/artifactIdversion${commons.pool2.version}/version/dependency!--4.log日志相关依赖--!--核心log4j2jar包--dependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-core/artifactIdversion${log4j2.version}/version/dependencydependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-api/artifactIdversion${log4j2.version}/version/dependency!--web工程需要包含log4j-web非web工程不需要--dependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-web/artifactIdversion${log4j2.version}/version/dependency!--5.其他--dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion${junit.version}/versionscopetest/scope/dependencydependencygroupIdjavax.servlet/groupIdartifactIdjavax.servlet-api/artifactIdversion${servlet.version}/versionscopeprovided/scope/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion${lombok.version}/versionscopeprovided/scope/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-webmvc/artifactIdversion${spring.version}/version/dependency!-- jsp依赖--dependencygroupIdjavax.servlet.jsp/groupIdartifactIdjavax.servlet.jsp-api/artifactIdversion2.3.3/version/dependencydependencygroupIdjstl/groupIdartifactIdjstl/artifactIdversion1.2/version/dependencydependencygroupIdtaglibs/groupIdartifactIdstandard/artifactIdversion1.1.2/version/dependencydependencygroupIdcommons-fileupload/groupIdartifactIdcommons-fileupload/artifactIdversion1.3.3/version/dependency!-- 做服务端参数校验 JSR303 的jar包依赖 --dependencygroupIdorg.hibernate/groupIdartifactIdhibernate-validator/artifactIdversion6.0.7.Final/version/dependency!-- 用来SpringMVC支持json数据转换--dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.9.3/version/dependencydependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-core/artifactIdversion2.9.3/version/dependencydependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-annotations/artifactIdversion2.9.3/version/dependency!-- shiro相关依赖 --dependencygroupIdorg.apache.shiro/groupIdartifactIdshiro-core/artifactIdversion1.3.2/version/dependencydependencygroupIdorg.apache.shiro/groupIdartifactIdshiro-web/artifactIdversion1.3.2/version/dependencydependencygroupIdorg.apache.shiro/groupIdartifactIdshiro-spring/artifactIdversion1.3.2/version/dependencydependencygroupIdnet.sf.ehcache/groupIdartifactIdehcache/artifactIdversion${ehcache.version}/version/dependency!-- slf4j核心包 --dependencygroupIdorg.slf4j/groupIdartifactIdslf4j-api/artifactIdversion${slf4j-api.version}/version/dependencydependencygroupIdorg.slf4j/groupIdartifactIdjcl-over-slf4j/artifactIdversion${slf4j-api.version}/versionscoperuntime/scope/dependency!--用于与slf4j保持桥接 --dependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-slf4j-impl/artifactIdversion${log4j2.version}/version/dependencydependencygroupIdredis.clients/groupIdartifactIdjedis/artifactIdversion${redis.version}/version/dependencydependencygroupIdorg.springframework.data/groupIdartifactIdspring-data-redis/artifactIdversion${redis.spring.version}/version/dependency/dependenciesbuildfinalNamessm2/finalNameresources!--解决mybatis-generator-maven-plugin运行时没有将XxxMapper.xml文件放入target文件夹的问题--resourcedirectorysrc/main/java/directoryincludesinclude**/*.xml/include/includes/resource!--解决mybatis-generator-maven-plugin运行时没有将jdbc.properites文件放入target文件夹的问题--resourcedirectorysrc/main/resources/directoryincludesinclude*.properties/includeinclude*.xml/include/includes/resource/resourcespluginManagement!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --pluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactIdversion${maven.compiler.plugin.version}/versionconfigurationsource${maven.compiler.source}/sourcetarget${maven.compiler.target}/targetencoding${project.build.sourceEncoding}/encoding/configuration/pluginplugingroupIdorg.mybatis.generator/groupIdartifactIdmybatis-generator-maven-plugin/artifactIdversion1.3.2/versiondependencies!--使用Mybatis-generator插件不能使用太高版本的mysql驱动 --dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion${mysql.version}/version/dependency/dependenciesconfigurationoverwritetrue/overwrite/configuration/pluginpluginartifactIdmaven-clean-plugin/artifactIdversion3.1.0/version/plugin!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging --pluginartifactIdmaven-resources-plugin/artifactIdversion3.0.2/version/pluginpluginartifactIdmaven-compiler-plugin/artifactIdversion3.8.0/version/pluginpluginartifactIdmaven-surefire-plugin/artifactIdversion2.22.1/version/pluginpluginartifactIdmaven-war-plugin/artifactIdversion3.2.2/version/pluginpluginartifactIdmaven-install-plugin/artifactIdversion2.5.2/version/pluginpluginartifactIdmaven-deploy-plugin/artifactIdversion2.8.2/version/plugin/plugins/pluginManagement/build /project 注意resources的配置必须涵盖读取.properties结尾的文件 1.2.配置文件spring-redis.xml 这个配置文件的作用主要用于配置数据源和连接工厂还有配置序列化的用途 redis.properties redis.hostName47.100.191.44 redis.port6379 redis.password123456 redis.timeout10000 redis.maxIdle300 redis.maxTotal1000 redis.maxWaitMillis1000 redis.minEvictableIdleTimeMillis300000 redis.numTestsPerEvictionRun1024 redis.timeBetweenEvictionRunsMillis30000 redis.testOnBorrowtrue redis.testWhileIdletrue redis.expiration3600spring-redis.xml ?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:contexthttp://www.springframework.org/schema/contextxmlns:cachehttp://www.springframework.org/schema/cachexsi:schemaLocationhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/cachehttp://www.springframework.org/schema/cache/spring-cache.xsd!-- 1. 引入properties配置文件 --!--context:property-placeholder locationclasspath:redis.properties /--!-- 2. redis连接池配置--bean idpoolConfig classredis.clients.jedis.JedisPoolConfig!--最大空闲数--property namemaxIdle value${redis.maxIdle}/!--连接池的最大数据库连接数 --property namemaxTotal value${redis.maxTotal}/!--最大建立连接等待时间--property namemaxWaitMillis value${redis.maxWaitMillis}/!--逐出连接的最小空闲时间 默认1800000毫秒(30分钟)--property nameminEvictableIdleTimeMillis value${redis.minEvictableIdleTimeMillis}/!--每次逐出检查时 逐出的最大数目 如果为负数就是 : 1/abs(n), 默认3--property namenumTestsPerEvictionRun value${redis.numTestsPerEvictionRun}/!--逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1--property nametimeBetweenEvictionRunsMillis value${redis.timeBetweenEvictionRunsMillis}/!--是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个--property nametestOnBorrow value${redis.testOnBorrow}/!--在空闲时检查有效性, 默认false --property nametestWhileIdle value${redis.testWhileIdle}//bean!-- 3. redis连接工厂 --bean idconnectionFactory classorg.springframework.data.redis.connection.jedis.JedisConnectionFactorydestroy-methoddestroyproperty namepoolConfig refpoolConfig/!--IP地址 --property namehostName value${redis.hostName}/!--端口号 --property nameport value${redis.port}/!--如果Redis设置有密码 --property namepassword value${redis.password}/!--客户端超时时间单位是毫秒 --property nametimeout value${redis.timeout}//bean!-- 4. redis操作模板,使用该对象可以操作redishibernate课程中hibernatetemplete相当于session专门操作数据库。--bean idredisTemplate classorg.springframework.data.redis.core.RedisTemplateproperty nameconnectionFactory refconnectionFactory/!--如果不配置Serializer那么存储的时候缺省使用String如果用User类型存储那么会提示错误User cant cast to String --property namekeySerializerbean classorg.springframework.data.redis.serializer.StringRedisSerializer//propertyproperty namevalueSerializerbean classorg.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer//propertyproperty namehashKeySerializerbean classorg.springframework.data.redis.serializer.StringRedisSerializer//propertyproperty namehashValueSerializerbean classorg.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer//property!--开启事务 --property nameenableTransactionSupport valuetrue//bean!-- 5.配置缓存管理器 --bean idredisCacheManager classorg.springframework.data.redis.cache.RedisCacheManagerconstructor-arg nameredisOperations refredisTemplate/!--redis缓存数据过期时间单位秒--property namedefaultExpiration value${redis.expiration}/!--是否使用缓存前缀与cachePrefix相关--property nameusePrefix valuetrue/!--配置缓存前缀名称--property namecachePrefixbean classorg.springframework.data.redis.cache.DefaultRedisCachePrefixconstructor-arg index0 value-cache-//bean/property/bean!--6.配置缓存生成键名的生成规则--bean idcacheKeyGenerator classcom.zking.ssm.redis.CacheKeyGenerator/bean!--7.启用缓存注解功能--cache:annotation-driven cache-managerredisCacheManager key-generatorcacheKeyGenerator/ /beans1.3.修改applicationContext.xml 如果spring配置文件中需要配置两个及以上的properties文件则需要在applicationContext.xml中进行配置处理否则会出现覆盖的情况。 ?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:contexthttp://www.springframework.org/schema/context xmlns:txhttp://www.springframework.org/schema/txxmlns:aophttp://www.springframework.org/schema/aopxsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd!--1. 引入外部多文件方式 --bean idpropertyConfigurerclassorg.springframework.beans.factory.config.PropertyPlaceholderConfigurerproperty namesystemPropertiesModeName valueSYSTEM_PROPERTIES_MODE_OVERRIDE /property nameignoreResourceNotFound valuetrue /property namelocationslistvalueclasspath:jdbc.properties/valuevalueclasspath:redis.properties/value/list/property/bean!-- 随着后续学习框架会越学越多不能将所有的框架配置放到同一个配制间否者不便于管理 --import resourceapplicationContext-mybatis.xml/importimport resourcespring-redis.xml/importimport resourceapplicationContext-shiro.xml/import /beans1.4.配置redis的key生成策略 package com.zking.ssm.redis;import lombok.extern.slf4j.Slf4j; import org.springframework.cache.interceptor.KeyGenerator; import org.springframework.util.ClassUtils;import java.lang.reflect.Array; import java.lang.reflect.Method;Slf4j public class CacheKeyGenerator implements KeyGenerator {// custom cache keypublic static final int NO_PARAM_KEY 0;public static final int NULL_PARAM_KEY 53;Overridepublic Object generate(Object target, Method method, Object... params) {StringBuilder key new StringBuilder();key.append(target.getClass().getSimpleName()).append(.).append(method.getName()).append(:);if (params.length 0) {key.append(NO_PARAM_KEY);} else {int count 0;for (Object param : params) {if (0 ! count) {//参数之间用,进行分隔key.append(,);}if (param null) {key.append(NULL_PARAM_KEY);} else if (ClassUtils.isPrimitiveArray(param.getClass())) {int length Array.getLength(param);for (int i 0; i length; i) {key.append(Array.get(param, i));key.append(,);}} else if (ClassUtils.isPrimitiveOrWrapper(param.getClass()) || param instanceof String) {key.append(param);} else {//Java一定要重写hashCode和eqaulskey.append(param.hashCode());}count;}}String finalKey key.toString(); // IEDA要安装lombok插件log.debug(using cache key{}, finalKey);return finalKey;} } 这段代码实现了一个自定义的缓存键生成器用于生成缓存的键值。让我们逐行分析一下代码的逻辑 导入所需的包: java import lombok.extern.slf4j.Slf4j; import org.springframework.cache.interceptor.KeyGenerator; import org.springframework.util.ClassUtils; 这些包提供了日志记录功能和用于操作类和对象的工具类。 声明了一个日志记录器: java Slf4j 这是Lombok库提供的注解用于自动生成日志记录器。 创建一个名为CacheKeyGenerator的类并实现了KeyGenerator接口: java public class CacheKeyGenerator implements KeyGenerator { … } 定义了两个常量作为特殊情况的缓存键: java public static final int NO_PARAM_KEY 0; public static final int NULL_PARAM_KEY 53; NO_PARAM_KEY代表没有参数的情况下的缓存键。 NULL_PARAM_KEY代表参数值为null的情况下的缓存键。 实现了generate方法: java Override public Object generate(Object target, Method method, Object… params) { StringBuilder key new StringBuilder(); key.append(target.getClass().getSimpleName()).append(“.”).append(method.getName()).append(“:”); // 根据参数的数量和类型生成缓存键 … return finalKey; } 该方法使用目标对象、方法和参数来生成缓存键并返回最终的键值。 生成缓存键的逻辑: 首先使用StringBuilder创建一个字符串缓存对象key并将目标对象和方法名添加到key中。 然后判断参数的数量如果参数数量为0则将NO_PARAM_KEY添加到key中表示无参数的情况。 如果参数数量不为0则遍历参数数组根据参数的类型和值生成 对应的缓存键。 如果参数为null则将NULL_PARAM_KEY添加到key中表示参数值为null的情况。 如果参数是原始类型或包装类类型或者是字符串类型则直接将参数值添加到key中。 否则对于其他类型的参数将其哈希码作为缓存键的一部分。 最后将生成的最终缓存键转换为字符串记录日志并返回该键值。 这段代码主要用于在Spring缓存中自定义生成缓存键以便更加灵活地控制缓存的存储和获取。 二、Redis的注解式开发及应用场景 2.1.什么是Redis注解式 Redis注解式是一种在Java应用中使用Redis进行缓存操作的方法。它通过在代码中使用注解的方式来简化和统一对Redis的操作。 通常情况下我们需要手动编写代码来连接Redis服务器、创建连接池、获取连接、执行Redis命令等操作。而使用Redis注解式则可以通过在方法上添加特定的注解来实现相应的Redis操作从而减少了繁琐的手动操作并且提供了更加便捷的开发体验。 在使用Redis注解式时可以使用不同的注解来标识不同的操作例如 Cacheable表示将方法的返回值存储到Redis缓存中在后续调用该方法时若参数与之前的调用相同则直接从缓存中获取结果避免重复计算或查询数据库。 CachePut表示将方法的返回值更新到Redis缓存中无论是否已存在缓存数据都会执行方法并将返回值存储到缓存中。 CacheEvict表示清除Redis缓存中的某个或某些数据可以在方法执行前、执行后或条件满足时清除缓存。 其他自定义的注解根据具体需求也可以自行定义注解来实现更加灵活的Redis操作。 使用Redis注解式可以有效地提高代码的可读性和简洁性并且避免了手动处理与Redis相关的繁琐任务提升了开发效率。但需要注意的是在使用Redis注解式时要确保正确配置和运行Redis服务器并合理使用缓存策略以避免数据不一致或缓存失效等问题。 2.实列测试· package com.zking.ssm.biz;import com.zking.ssm.model.Clazz; import com.zking.ssm.util.PageBean; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.CachePut;import java.util.List; import java.util.Map;public interface ClazzBiz {CacheEvict(value xx,key cid:#cid,allEntries true)int deleteByPrimaryKey(Integer cid);int insert(Clazz record);int insertSelective(Clazz record);// xxcache-cid:1 // key的作用改变原有的key生成规则 // Cacheable(value xx,key cid:#cid)CachePut(value xx,key cid:#cid,condition #cid 6)Clazz selectByPrimaryKey(Integer cid);int updateByPrimaryKeySelective(Clazz record);int updateByPrimaryKey(Clazz record);ListClazz listPager(Clazz clazz, PageBean pageBean);ListMap listMapPager(Clazz clazz, PageBean pageBean); }①Cacheable 使用该注解会将查询结果放入Redis中下一次同样的查询就不会走数据库而是走Redis. 调动了两次方法只走了一次数据库。有一次走的是redis ②CachePut 该注解会将查询结果放入Redis中类似于更新操作即每次不管缓存中有没有结果都从数据库查找结果并将结果更新到缓存并返回结果 CachePut(value “xx”,key “‘cid:’#cid”) Clazz selectByPrimaryKey(Integer cid); value缓存位置的一段名称不能为空 key缓存的key默认为空表示使用方法的参数类型及参数值作为key支持SpEL condition触发条件满足条件就加入缓存默认为空表示全部都加入缓存支持SpEL allEntriestrue表示清除value中的全部缓存默认为false ③CacheEvict 用来清除用在本方法或者类上的缓存数据 CacheEvict(value xx,key cid:#cid,allEntries true) int deleteByPrimaryKey(Integer cid);value缓存位置的一段名称不能为空 三、Redis中的击穿、穿透、雪崩的三种场景 下是对Redis中的击穿、穿透和雪崩三种场景的诉述以及可能的解决方案 击穿Cache Breakdown 场景当一个热门的缓存键在缓存过期或被移除后大量的请求同时涌入数据库或后端系统导致系统负载增加。 解决方案 设置热门数据的永久缓存时间避免过早失效。 使用互斥锁/分布式锁确保只有一个线程能够重新生成缓存其他线程等待并使用已生成的缓存数据。 引入缓存预加载机制在缓存失效之前提前异步更新缓存避免请求直接落到数据库。 穿透Cache Penetration 场景恶意用户请求一个不存在于缓存和数据库中的数据导致每个请求都需要查询数据库浪费资源。 解决方案 对于无效的请求可以将其对应的空结果也缓存起来设置较短的过期时间避免频繁查询数据库。 对于非法的请求参数可以进行参数校验或者限流处理拒绝无效的请求。 使用布隆过滤器Bloom Filter过滤掉不存在的数据减少对数据库的查询压力。 雪崩Cache Avalanche 场景当缓存中大量键同时过期或者在某个时间段内失效导致大量请求直接落到数据库或后端系统引发系统崩溃。 解决方案 设置缓存数据的随机过期时间避免批量失效。 使用多级缓存架构如本地缓存 分布式缓存降低单点故障风险。 实施熔断机制当缓存失效超过一定次数或比例时暂时关闭对后端系统的访问以保护后端系统免受高并发的冲击。 针对关键数据可以使用主从复制、集群等方式提高缓存系统的可用性和稳定性。
http://www.dnsts.com.cn/news/131732.html

相关文章:

  • 长春市建设工程信息网站大连seo按天付费
  • 怎么建设一个人自己网站wordpress注册无法设置密码
  • 企业营销型网站建设的可行性分析畜牧企业网站模板
  • 设计网站公司多少钱常德网站建设优化
  • 重庆江北营销型网站建设价格做国外营销型网站设计
  • 如何建立游戏网站平台社保代缴网站开发
  • 国外浏览器入口东莞网络排名优化
  • 手机网站判断跳转免费模板网站下载
  • 网站开发流程三部分外贸公司取名字大全集
  • 江苏网站建设公司排名一个设计公司需要多少人
  • 郴州网站建设html5网页制作模板免费下载
  • 在线相册jsp网站开发与设计二级域名发放免费
  • 做网站找哪家公司最好国外网址导航wordpress模版
  • 网站设计制作的服务和质量如何判断网站有cdn加速
  • 中山建网站网站功能模块设计
  • 网站服务公司哪个好二维码生成器永久免费版下载
  • 辽宁建设局网站首页搭建网站是什么意思
  • 做网站申请完空间后下一步干啥对网站设计的摘要
  • 赤壁市药监局网站建设方案wordpress首页截断
  • 能进封禁网站的浏览器注册咨询公司经营范围
  • 个人买卖网站怎么做阿里云官方网站 icp代备案管理系统
  • 网站的建设目标网站链接分享做推广
  • 祁县建设局网站jquery做的装修网站
  • 长沙企业网站用名字做头像是什么网站
  • 网站设计招标评标标准及办法建立网站的成本
  • 厦门外贸网站搭建沈阳高端网站设计
  • 国外h5分享网站wordpress加载慢 2017
  • 宁波网站建设信息网络推广和信息流优化一样么
  • wordpress站做外贸生意用哪个网站最好
  • 网络网站建东莞网站建设培训学校