Spring Module---cache

本文介绍如何利用Spring模块进行缓存管理。通过AOP方式实现缓存读取与更新,使用XXCacheFacade进行缓存操作,并介绍了MethodMapCachingInterceptor的作用及配置方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目需要缓存,google了一下,发现spring module有现成的东西可用,随即拿来看看。发现还是比较好用的。
改cache采用了aop的方式进行cache的写入和刷出。使用spring风格,上手容易。
系统负载不高,因此对于该缓存方法的性能等等不做评价,目前满足需要。
使用方法:
有这么几个概念需要提前知道1.XXCacheFacade,比如如果是oscache,那么XX就是oscachefacade.该类负责缓存的写入和刷出
[code]
<bean id="oscacheFacade" class="org.springmodules.cache.provider.oscache.OsCacheFacade">
<property name="failQuietlyEnabled" value="true"/>
<property name="cacheManager">
<bean id="oscacheManager" class="org.springmodules.cache.provider.oscache.OsCacheManagerFactoryBean"/>
</property>
</bean>
[/code]
里面的cacheManager必须要有,改类负责提供底层具体的cache实现,比如oscache或者EHcache等。
2.MethodMapCachingInterceptor这个拦截器是官方提供的同类型的拦截器之一,根据方法名,参数匹配拦截。
[code]
<bean id="cachingInterceptor001" class="org.springmodules.cache.interceptor.caching.MethodMapCachingInterceptor">
<property name="cacheProviderFacade" ref="oscacheFacade"/>
<property name="cachingModels">
<props>
<prop key="com.company.jncz.TestItIF.get*">groups=aa;refreshPeriod=10</prop>
<prop key="com.company.jncz.TestItIF.load*">groups=bb;refreshPeriod=10</prop>
</props>
</property>
</bean>
[/code]
注意cachingModels。有两种方式写法,一种是上面看到的使用props另一种是使用Map.在有些情况下只能使用Map方式,下面解释
[code]
<map>
<entry key="com.company.jncz.TestIt.get*">
<ref local="oscacheCachingModel"/>
</entry>
</map>
[/code]
[code]
<bean id="oscacheCachingModel" class="org.springmodules.cache.provider.oscache.OsCacheCachingModel">
<property name="groups">
<list>
<value>aa</value>
<value>bb</value>
</list>
</property>
<property name="refreshPeriod" value="10"/>
</bean>
[/code]
尤其当groups(对于oscache来说是groups)的值不止一个的时候,就需要使用map的方式。
否则不生效(也许还有什么我没有注意到).另外需要注意的是对于model来说他的key很重要。有以下需要注意:如果AImpl是A接口的实现类,而且你在其他地方使用时都是用A接口来声明的,那么key就必须写成接口的全限定名比如:com.company.jncz.A.getXX,否则无法识别。

对于与cachingModel相对应的flushingModel写法是类似的,参考api很容易写出来。

最后
[code]
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<value>*Service</value>
</property>
<property name="interceptorNames">
<list>
<value>cachingInterceptor001</value>
<value>flushingInterceptor001</value>
</list>
</property>
</bean>
<bean id="testService" class="com.company.jncz.TestItStub"/>
[/code]
这些不做介绍。
总之比较简单。这两天感冒,昏昏沉沉,不知道有没有表达清楚。。。。


自己看了一眼,的确没说清楚,要清楚的几个概念是cacheFacade.CachingModel.FlushingModel.CachingInterceptor.FlushingInterceptor.这些算是比较重要的。其他aop内容略。caching拦截器拦截某方法,根据cachingModel定义的规则由cacheFacade将之放入cache。flushing拦截器拦截到某方法,根据flushingModel定义的规则由cacheFacade将对应的cache清除。嗯,基本上流程就这样子了。
D:\UseApp\jdk1.8.0_101\bin\java.exe -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:49931,suspend=y,server=n -XX:TieredStopAtLevel=1 -noverify -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true -javaagent:D:\UseApp\ideaIU-2020.1.1\plugins\java\lib\rt\debugger-agent.jar=file:/C:/Users/LEGION/AppData/Local/Temp/capture6.props -Dfile.encoding=UTF-8 -classpath D:\UseApp\jdk1.8.0_101\jre\lib\charsets.jar;D:\UseApp\jdk1.8.0_101\jre\lib\deploy.jar;D:\UseApp\jdk1.8.0_101\jre\lib\ext\access-bridge-64.jar;D:\UseApp\jdk1.8.0_101\jre\lib\ext\cldrdata.jar;D:\UseApp\jdk1.8.0_101\jre\lib\ext\dnsns.jar;D:\UseApp\jdk1.8.0_101\jre\lib\ext\jaccess.jar;D:\UseApp\jdk1.8.0_101\jre\lib\ext\jfxrt.jar;D:\UseApp\jdk1.8.0_101\jre\lib\ext\localedata.jar;D:\UseApp\jdk1.8.0_101\jre\lib\ext\nashorn.jar;D:\UseApp\jdk1.8.0_101\jre\lib\ext\sunec.jar;D:\UseApp\jdk1.8.0_101\jre\lib\ext\sunjce_provider.jar;D:\UseApp\jdk1.8.0_101\jre\lib\ext\sunmscapi.jar;D:\UseApp\jdk1.8.0_101\jre\lib\ext\sunpkcs11.jar;D:\UseApp\jdk1.8.0_101\jre\lib\ext\zipfs.jar;D:\UseApp\jdk1.8.0_101\jre\lib\javaws.jar;D:\UseApp\jdk1.8.0_101\jre\lib\jce.jar;D:\UseApp\jdk1.8.0_101\jre\lib\jfr.jar;D:\UseApp\jdk1.8.0_101\jre\lib\jfxswt.jar;D:\UseApp\jdk1.8.0_101\jre\lib\jsse.jar;D:\UseApp\jdk1.8.0_101\jre\lib\management-agent.jar;D:\UseApp\jdk1.8.0_101\jre\lib\plugin.jar;D:\UseApp\jdk1.8.0_101\jre\lib\resources.jar;D:\UseApp\jdk1.8.0_101\jre\lib\rt.jar;E:\Dify\Activity-generation-chat-backend\target\classes;C:\Users\LEGION\.m2\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;C:\Users\LEGION\.m2\repository\ch\qos\logback\logback-core\1.2.11\logback-core-1.2.11.jar;C:\Users\LEGION\.m2\repository\org\slf4j\slf4j-api\1.7.36\slf4j-api-1.7.36.jar;C:\Users\LEGION\.m2\repository\org\springframework\boot\spring-boot-configuration-processor\2.6.11\spring-boot-configuration-processor-2.6.11.jar;C:\Users\LEGION\.m2\repository\com\baomidou\dynamic-datasource-spring-boot-starter\3.5.1\dynamic-datasource-spring-boot-starter-3.5.1.jar;C:\Users\LEGION\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\2.6.11\spring-boot-starter-jdbc-2.6.11.jar;C:\Users\LEGION\.m2\repository\com\zaxxer\HikariCP\4.0.3\HikariCP-4.0.3.jar;C:\Users\LEGION\.m2\repository\org\springframework\spring-jdbc\5.3.22\spring-jdbc-5.3.22.jar;C:\Users\LEGION\.m2\repository\org\springframework\boot\spring-boot-starter-aop\2.6.11\spring-boot-starter-aop-2.6.11.jar;C:\Users\LEGION\.m2\repository\org\springframework\spring-aop\5.3.22\spring-aop-5.3.22.jar;C:\Users\LEGION\.m2\repository\org\aspectj\aspectjweaver\1.9.7\aspectjweaver-1.9.7.jar;C:\Users\LEGION\.m2\repository\org\apache\httpcomponents\httpclient\4.5.8\httpclient-4.5.8.jar;C:\Users\LEGION\.m2\repository\org\apache\httpcomponents\httpcore\4.4.15\httpcore-4.4.15.jar;C:\Users\LEGION\.m2\repository\org\springframework\boot\spring-boot-starter-websocket\2.6.11\spring-boot-starter-websocket-2.6.11.jar;C:\Users\LEGION\.m2\repository\org\springframework\boot\spring-boot-starter-web\2.6.11\spring-boot-starter-web-2.6.11.jar;C:\Users\LEGION\.m2\repository\org\springframework\boot\spring-boot-starter-json\2.6.11\spring-boot-starter-json-2.6.11.jar;C:\Users\LEGION\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.13.3\jackson-databind-2.13.3.jar;C:\Users\LEGION\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.13.3\jackson-annotations-2.13.3.jar;C:\Users\LEGION\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.13.3\jackson-core-2.13.3.jar;C:\Users\LEGION\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.13.3\jackson-datatype-jdk8-2.13.3.jar;C:\Users\LEGION\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.13.3\jackson-datatype-jsr310-2.13.3.jar;C:\Users\LEGION\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.13.3\jackson-module-parameter-names-2.13.3.jar;C:\Users\LEGION\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\2.6.11\spring-boot-starter-tomcat-2.6.11.jar;C:\Users\LEGION\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\9.0.65\tomcat-embed-core-9.0.65.jar;C:\Users\LEGION\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\9.0.65\tomcat-embed-el-9.0.65.jar;C:\Users\LEGION\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.65\tomcat-embed-websocket-9.0.65.jar;C:\Users\LEGION\.m2\repository\org\springframework\spring-webmvc\5.3.22\spring-webmvc-5.3.22.jar;C:\Users\LEGION\.m2\repository\org\springframework\spring-expression\5.3.22\spring-expression-5.3.22.jar;C:\Users\LEGION\.m2\repository\org\springframework\spring-messaging\5.3.22\spring-messaging-5.3.22.jar;C:\Users\LEGION\.m2\repository\org\springframework\spring-beans\5.3.22\spring-beans-5.3.22.jar;C:\Users\LEGION\.m2\repository\org\springframework\spring-websocket\5.3.22\spring-websocket-5.3.22.jar;C:\Users\LEGION\.m2\repository\org\springframework\spring-context\5.3.22\spring-context-5.3.22.jar;C:\Users\LEGION\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.6.11\spring-boot-starter-logging-2.6.11.jar;C:\Users\LEGION\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.17.2\log4j-to-slf4j-2.17.2.jar;C:\Users\LEGION\.m2\repository\org\apache\logging\log4j\log4j-api\2.17.2\log4j-api-2.17.2.jar;C:\Users\LEGION\.m2\repository\org\slf4j\jul-to-slf4j\1.7.36\jul-to-slf4j-1.7.36.jar;C:\Users\LEGION\.m2\repository\org\springframework\boot\spring-boot-starter\2.6.11\spring-boot-starter-2.6.11.jar;C:\Users\LEGION\.m2\repository\org\springframework\boot\spring-boot\2.6.11\spring-boot-2.6.11.jar;C:\Users\LEGION\.m2\repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;C:\Users\LEGION\.m2\repository\org\yaml\snakeyaml\1.29\snakeyaml-1.29.jar;C:\Users\LEGION\.m2\repository\org\springframework\spring-core\5.3.22\spring-core-5.3.22.jar;C:\Users\LEGION\.m2\repository\org\springframework\spring-jcl\5.3.22\spring-jcl-5.3.22.jar;C:\Users\LEGION\.m2\repository\cn\hutool\hutool-all\5.8.20\hutool-all-5.8.20.jar;C:\Users\LEGION\.m2\repository\mysql\mysql-connector-java\5.1.35\mysql-connector-java-5.1.35.jar;C:\Users\LEGION\.m2\repository\com\alibaba\druid\1.1.5\druid-1.1.5.jar;C:\Users\LEGION\.m2\repository\com\alibaba\druid-spring-boot-starter\1.1.21\druid-spring-boot-starter-1.1.21.jar;C:\Users\LEGION\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.6.11\spring-boot-autoconfigure-2.6.11.jar;C:\Users\LEGION\.m2\repository\com\baomidou\mybatis-plus-boot-starter\3.3.1\mybatis-plus-boot-starter-3.3.1.jar;C:\Users\LEGION\.m2\repository\com\baomidou\mybatis-plus\3.3.1\mybatis-plus-3.3.1.jar;C:\Users\LEGION\.m2\repository\com\baomidou\mybatis-plus-generator\3.4.1\mybatis-plus-generator-3.4.1.jar;C:\Users\LEGION\.m2\repository\com\baomidou\mybatis-plus-extension\3.4.1\mybatis-plus-extension-3.4.1.jar;C:\Users\LEGION\.m2\repository\com\baomidou\mybatis-plus-core\3.4.1\mybatis-plus-core-3.4.1.jar;C:\Users\LEGION\.m2\repository\com\baomidou\mybatis-plus-annotation\3.4.1\mybatis-plus-annotation-3.4.1.jar;C:\Users\LEGION\.m2\repository\com\github\jsqlparser\jsqlparser\3.2\jsqlparser-3.2.jar;C:\Users\LEGION\.m2\repository\org\mybatis\mybatis\3.5.6\mybatis-3.5.6.jar;C:\Users\LEGION\.m2\repository\org\mybatis\mybatis-spring\2.0.5\mybatis-spring-2.0.5.jar;C:\Users\LEGION\.m2\repository\org\projectlombok\lombok\1.18.38\lombok-1.18.38.jar;C:\Users\LEGION\.m2\repository\com\alibaba\fastjson\2.0.8\fastjson-2.0.8.jar;C:\Users\LEGION\.m2\repository\com\alibaba\fastjson2\fastjson2-extension\2.0.8\fastjson2-extension-2.0.8.jar;C:\Users\LEGION\.m2\repository\com\alibaba\fastjson2\fastjson2\2.0.8\fastjson2-2.0.8.jar;C:\Users\LEGION\.m2\repository\org\springframework\cloud\spring-cloud-starter-openfeign\3.1.4\spring-cloud-starter-openfeign-3.1.4.jar;C:\Users\LEGION\.m2\repository\org\springframework\cloud\spring-cloud-starter\3.1.5\spring-cloud-starter-3.1.5.jar;C:\Users\LEGION\.m2\repository\org\springframework\security\spring-security-rsa\1.0.11.RELEASE\spring-security-rsa-1.0.11.RELEASE.jar;C:\Users\LEGION\.m2\repository\org\bouncycastle\bcpkix-jdk15on\1.69\bcpkix-jdk15on-1.69.jar;C:\Users\LEGION\.m2\repository\org\bouncycastle\bcprov-jdk15on\1.69\bcprov-jdk15on-1.69.jar;C:\Users\LEGION\.m2\repository\org\bouncycastle\bcutil-jdk15on\1.69\bcutil-jdk15on-1.69.jar;C:\Users\LEGION\.m2\repository\org\springframework\cloud\spring-cloud-openfeign-core\3.1.5\spring-cloud-openfeign-core-3.1.5.jar;C:\Users\LEGION\.m2\repository\io\github\openfeign\form\feign-form-spring\3.8.0\feign-form-spring-3.8.0.jar;C:\Users\LEGION\.m2\repository\io\github\openfeign\form\feign-form\3.8.0\feign-form-3.8.0.jar;C:\Users\LEGION\.m2\repository\commons-fileupload\commons-fileupload\1.4\commons-fileupload-1.4.jar;C:\Users\LEGION\.m2\repository\org\springframework\spring-web\5.3.22\spring-web-5.3.22.jar;C:\Users\LEGION\.m2\repository\org\springframework\cloud\spring-cloud-commons\3.1.5\spring-cloud-commons-3.1.5.jar;C:\Users\LEGION\.m2\repository\org\springframework\security\spring-security-crypto\5.6.7\spring-security-crypto-5.6.7.jar;C:\Users\LEGION\.m2\repository\io\github\openfeign\feign-core\11.10\feign-core-11.10.jar;C:\Users\LEGION\.m2\repository\io\github\openfeign\feign-slf4j\11.10\feign-slf4j-11.10.jar;C:\Users\LEGION\.m2\repository\org\springframework\cloud\spring-cloud-starter-bootstrap\3.1.5\spring-cloud-starter-bootstrap-3.1.5.jar;C:\Users\LEGION\.m2\repository\org\springframework\cloud\spring-cloud-starter-loadbalancer\3.1.4\spring-cloud-starter-loadbalancer-3.1.4.jar;C:\Users\LEGION\.m2\repository\org\springframework\cloud\spring-cloud-loadbalancer\3.1.5\spring-cloud-loadbalancer-3.1.5.jar;C:\Users\LEGION\.m2\repository\io\projectreactor\reactor-core\3.4.22\reactor-core-3.4.22.jar;C:\Users\LEGION\.m2\repository\org\reactivestreams\reactive-streams\1.0.4\reactive-streams-1.0.4.jar;C:\Users\LEGION\.m2\repository\io\projectreactor\addons\reactor-extra\3.4.8\reactor-extra-3.4.8.jar;C:\Users\LEGION\.m2\repository\org\springframework\boot\spring-boot-starter-cache\2.6.11\spring-boot-starter-cache-2.6.11.jar;C:\Users\LEGION\.m2\repository\org\springframework\spring-context-support\5.3.22\spring-context-support-5.3.22.jar;C:\Users\LEGION\.m2\repository\com\stoyanr\evictor\1.0.0\evictor-1.0.0.jar;C:\Users\LEGION\.m2\repository\org\apache\commons\commons-lang3\3.12.0\commons-lang3-3.12.0.jar;C:\Users\LEGION\.m2\repository\com\alibaba\cloud\spring-cloud-starter-alibaba-nacos-discovery\2021.0.5.0\spring-cloud-starter-alibaba-nacos-discovery-2021.0.5.0.jar;C:\Users\LEGION\.m2\repository\com\alibaba\cloud\spring-cloud-alibaba-commons\2021.0.5.0\spring-cloud-alibaba-commons-2021.0.5.0.jar;C:\Users\LEGION\.m2\repository\com\alibaba\spring\spring-context-support\1.0.11\spring-context-support-1.0.11.jar;C:\Users\LEGION\.m2\repository\org\springframework\cloud\spring-cloud-context\3.1.5\spring-cloud-context-3.1.5.jar;C:\Users\LEGION\.m2\repository\com\alibaba\cloud\spring-cloud-starter-alibaba-nacos-config\2021.0.5.0\spring-cloud-starter-alibaba-nacos-config-2021.0.5.0.jar;E:\Dify\Activity-generation-chat-backend\src\main\resources\lib\nacos-client-2.2.3.jar;C:\Users\LEGION\.m2\repository\org\springframework\boot\spring-boot-starter-data-redis\2.6.11\spring-boot-starter-data-redis-2.6.11.jar;C:\Users\LEGION\.m2\repository\org\springframework\data\spring-data-redis\2.6.6\spring-data-redis-2.6.6.jar;C:\Users\LEGION\.m2\repository\org\springframework\data\spring-data-keyvalue\2.6.6\spring-data-keyvalue-2.6.6.jar;C:\Users\LEGION\.m2\repository\org\springframework\data\spring-data-commons\2.6.6\spring-data-commons-2.6.6.jar;C:\Users\LEGION\.m2\repository\org\springframework\spring-tx\5.3.22\spring-tx-5.3.22.jar;C:\Users\LEGION\.m2\repository\org\springframework\spring-oxm\5.3.22\spring-oxm-5.3.22.jar;C:\Users\LEGION\.m2\repository\redis\clients\jedis\3.6.0\jedis-3.6.0.jar;C:\Users\LEGION\.m2\repository\org\apache\commons\commons-pool2\2.11.1\commons-pool2-2.11.1.jar;C:\Users\LEGION\.m2\repository\org\apache\velocity\velocity\1.7\velocity-1.7.jar;C:\Users\LEGION\.m2\repository\commons-collections\commons-collections\3.2.1\commons-collections-3.2.1.jar;C:\Users\LEGION\.m2\repository\commons-lang\commons-lang\2.4\commons-lang-2.4.jar;D:\UseApp\ideaIU-2020.1.1\lib\idea_rt.jar com.bonc.activityGenerate.ActivityGenerateApplication Connected to the target VM, address: '127.0.0.1:49931', transport: 'socket' 2025-06-10 13:37:17.194 DEBUG 11944 --- [ main] c.a.n.client.env.SearchableProperties : properties search order:PROPERTIES->JVM->ENV 2025-06-10 13:37:17.476 ERROR 11944 --- [ main] c.a.cloud.nacos.NacosConfigManager : java.lang.reflect.InvocationTargetException 2025-06-10 13:37:17.478 WARN 11944 --- [ main] s.c.a.AnnotationConfigApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.cloud.bootstrap.config.PropertySourceBootstrapConfiguration': Unsatisfied dependency expressed through field 'propertySourceLocators'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'nacosPropertySourceLocator' defined in class path resource [com/alibaba/cloud/nacos/NacosConfigBootstrapConfiguration.class]: Unsatisfied dependency expressed through method 'nacosPropertySourceLocator' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'nacosConfigManager' defined in class path resource [com/alibaba/cloud/nacos/NacosConfigBootstrapConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.alibaba.cloud.nacos.NacosConfigManager]: Factory method 'nacosConfigManager' threw exception; nested exception is com.alibaba.cloud.nacos.diagnostics.analyzer.NacosConnectionFailureException: java.lang.reflect.InvocationTargetException 2025-06-10 13:37:17.481 INFO 11944 --- [ main] ConditionEvaluationReportLoggingListener : Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2025-06-10 13:37:17.499 ERROR 11944 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPLICATION FAILED TO START *************************** Description: Application failed to connect to Nacos server: "127.0.0.1:8848" Action: Please check your Nacos server config 2025-06-10 13:37:17.500 ERROR 11944 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPLICATION FAILED TO START *************************** Description: Application failed to connect to Nacos server: "127.0.0.1:8848" Action: Please check your Nacos server config 2025-06-10 13:37:17.500 INFO 11944 --- [ main] c.b.a.ActivityGenerateApplication : 项目启动失败...... 2025-06-10 13:37:17.501 WARN 11944 --- [ Thread-13] c.a.n.common.http.HttpClientBeanHolder : [HttpClientBeanHolder] Start destroying common HttpClient 2025-06-10 13:37:17.501 WARN 11944 --- [ Thread-13] c.a.n.common.http.HttpClientBeanHolder : [HttpClientBeanHolder] Destruction of the end Disconnected from the target VM, address: '127.0.0.1:49931', transport: 'socket' Process finished with exit code 0 报错原因,怎么解决?
06-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值