Commit 9a2c4297 by ddx

add redis config

parent d15eb210
......@@ -18,6 +18,7 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<buildnumber-maven-plugin.version>1.4</buildnumber-maven-plugin.version>
<templating-maven-plugin.version>1.0.0</templating-maven-plugin.version>
<commons-pool2.version>2.11.1</commons-pool2.version>
</properties>
<dependencies>
......@@ -46,6 +47,15 @@
<artifactId>kryo</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>${commons-pool2.version}</version>
</dependency>
<dependency>
<groupId>com.alicp.jetcache</groupId>
<artifactId>jetcache-starter-redis-lettuce</artifactId>
</dependency>
......
package com.sxc.etaxincome.domain.business.impl;
import com.alibaba.fastjson.JSON;
import com.sxc.etaxincome.domain.business.ICachedConfigManager;
import com.sxc.etaxincome.domain.business.ISysManageManager;
import com.sxc.etaxincome.domain.infrastructure.IRedisService;
import com.sxc.etaxincome.domain.model.sysManage.SysAppUserSummary;
import com.sxc.etaxincome.entity.FinSysDict;
import com.sxc.etaxincome.entity.FinUserTaxno;
......@@ -40,6 +42,11 @@ public class SysManageManager implements ISysManageManager {
@Autowired
private ICachedConfigManager cachedConfigManager;
@Autowired
private IRedisService redisService;
public static final String CACHE_USER_TAX_PREFIX = "real:usertax:";
public List<SysAppUserSummary> queryListByCriteria() {
SysAppUser sysAppUserCriteria = new SysAppUser();
......@@ -58,7 +65,10 @@ public class SysManageManager implements ISysManageManager {
}
public boolean updateTaxStatusById(FinUserTaxno finUserTaxno) {
return finUserTaxnoService.updateTaxStatusById(finUserTaxno);
boolean updateFlag = finUserTaxnoService.updateTaxStatusById(finUserTaxno);
FinUserTaxno taxUser = finUserTaxnoService.getById(finUserTaxno.getId());
redisService.set(CACHE_USER_TAX_PREFIX + taxUser.getUsername() + taxUser.getTaxno(), JSON.toJSONString(taxUser), 3600);
return updateFlag;
}
}
package com.sxc.etaxincome.domain.config;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.RedisPassword;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.time.Duration;
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {
public RedisTemplate<String, String> redisTemplateBase(int database, long timeout, int maxActive, int maxWait, int maxIdle, int minIdle, String hostName, int port, String password) {
/* ========= 基本配置 ========= */
RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration();
configuration.setHostName(hostName);
configuration.setPort(port);
configuration.setDatabase(database);
if (!ObjectUtils.isEmpty(password)) {
RedisPassword redisPassword = RedisPassword.of(password);
configuration.setPassword(redisPassword);
}
/* ========= 连接池通用配置 ========= */
GenericObjectPoolConfig genericObjectPoolConfig = new GenericObjectPoolConfig();
genericObjectPoolConfig.setMaxTotal(maxActive);
genericObjectPoolConfig.setMinIdle(minIdle);
genericObjectPoolConfig.setMaxIdle(maxIdle);
genericObjectPoolConfig.setMaxWait(Duration.ofSeconds(maxWait));
/* ========= lettuce pool ========= */
LettucePoolingClientConfiguration.LettucePoolingClientConfigurationBuilder builder = LettucePoolingClientConfiguration.builder();
builder.poolConfig(genericObjectPoolConfig);
builder.commandTimeout(Duration.ofSeconds(timeout));
LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(configuration, builder.build());
connectionFactory.afterPropertiesSet();
/* ========= 创建 template ========= */
return createRedisTemplate(connectionFactory);
}
/**
* 默认配置的redis template
* @param redisConnectionFactory
* @return
*/
@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
return createRedisTemplate(redisConnectionFactory);
}
/**
* json 实现 redisTemplate
* <p>
* 该方法不能加 @Bean 否则不管如何调用,connectionFactory都会是默认配置
*
* @param redisConnectionFactory
* @return
*/
public RedisTemplate<String, String> createRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
redisTemplate.setValueSerializer(new StringRedisSerializer());
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}
package com.sxc.etaxincome.domain.infrastructure;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.data.redis.core.script.RedisScript;
import java.util.List;
import java.util.Set;
public interface IRedisService {
void set(String key, String value);
void set(String key, String value, long expiredSeconds);
String get(String key);
boolean delete(String key);
Set<String> members(String key);
void add(String key, Set<String> values);
void remove(String key, Set<String> values);
void update(String key, Set<String> values);
Long increment(String key);
Long increment(String key, long delta);
Boolean expire(String key, long timeoutSeconds);
ZSetOperations<String, String> getZSetOperations();
Boolean keyExists(String key);
<T> T execute(RedisScript<T> redisScript, List<String> keyList, Object... args);
}
......@@ -51,7 +51,7 @@ public class EtaxConfigService implements IEtaxConfigService {
return eTaxWebsiteList;
}
@Override
@Override
@Cached(name = "gx2022:config:jx-user-url-config-item:", key = "#userCode", expire = REMOTE_CACHED_EXPIRE_SECONDS, cacheType = CacheType.LOCAL, cacheNullValue = true)
public String getJxUserUrl(String userCode) {
JxUserUrlConfig jxUserUrlConfig = etaxConfigRemoteService.getJxUserUrlConfigConfigRemote();
......
package com.sxc.etaxincome.domain.infrastructure.impl;
import com.sxc.etaxincome.domain.infrastructure.IRedisService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.data.redis.core.script.RedisScript;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
@Slf4j
@Service(value = "redisService")
public class RedisService implements IRedisService {
@Autowired
@Qualifier("redisTemplate")
private RedisTemplate<String, String> redisTemplate;
@Override
public void set(String key, String value) {
redisTemplate.opsForValue().set(key, value);
}
@Override
public void set(String key, String value, long expiredSeconds) {
redisTemplate.opsForValue().set(key, value, expiredSeconds, TimeUnit.SECONDS);
}
@Override
public String get(String key) {
return redisTemplate.opsForValue().get(key);
}
@Override
public boolean delete(String key) {
Boolean result = redisTemplate.delete(key);
if (result != null) {
return result;
}
return false;
}
@Override
public Set<String> members(String key) {
return redisTemplate.opsForSet().members(key);
}
@Override
public void add(String key, Set<String> values) {
redisTemplate.opsForSet().add(key, values.toArray(new String[0]));
}
@Override
public void remove(String key, Set<String> values) {
if (CollectionUtils.isEmpty(values)) {
return;
}
redisTemplate.opsForSet().remove(key, values.toArray(new String[0]));
}
@Override
public void update(String key, Set<String> values) {
if (CollectionUtils.isEmpty(values)) {
return;
}
Set<String> oldSet = this.members(key);
oldSet.removeAll(values);
this.remove(key, oldSet);
this.add(key, values);
}
@Override
public Long increment(String key) {
return redisTemplate.opsForValue().increment(key);
}
@Override
public Long increment(String key, long delta) {
return redisTemplate.opsForValue().increment(key, delta);
}
@Override
public Boolean expire(String key, long timeoutSeconds) {
return redisTemplate.expire(key, timeoutSeconds, TimeUnit.SECONDS);
}
@Override
public ZSetOperations<String, String> getZSetOperations() {
return redisTemplate.opsForZSet();
}
@Override
public Boolean keyExists(String key) {
return redisTemplate.hasKey(key);
}
public <T> T execute(RedisScript<T> redisScript, List<String> keyList, Object... args) {
return redisTemplate.execute(redisScript, keyList, args);
}
}
spring:
#redis 配置
#数据库索引(默认为0)
redis:
database: 0
#服务器连接地址
host: localhost
#端口
port: 6379
#密码
password:
# 超时
timeout: 10000
# 连接池最大连接数(使用负值表示没有限制) 默认 8
lettuce:
pool:
max-active: 8
# 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1
max-wait: -1
# 连接池中的最大空闲连接 默认 8
max-idle: 8
# 连接池中的最小空闲连接 默认 0
min-idle: 0
datasource:
hikari:
auto-commit: true
......
spring:
#redis 配置
#数据库索引(默认为0)
redis:
database: 0
#服务器连接地址
host: db5.taxservices.cn
#端口
port: 6784
#密码
password: dpptss@2022
# 超时
timeout: 10000
# 连接池最大连接数(使用负值表示没有限制) 默认 8
lettuce:
pool:
max-active: 8
# 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1
max-wait: -1
# 连接池中的最大空闲连接 默认 8
max-idle: 8
# 连接池中的最小空闲连接 默认 0
min-idle: 0
datasource:
hikari:
auto-commit: true
......
spring:
#redis 配置
#数据库索引(默认为0)
redis:
database: 0
#服务器连接地址
host: db5.taxservices.cn
#端口
port: 6784
#密码
password: dpptss@2022
# 超时
timeout: 10000
# 连接池最大连接数(使用负值表示没有限制) 默认 8
lettuce:
pool:
max-active: 8
# 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1
max-wait: -1
# 连接池中的最大空闲连接 默认 8
max-idle: 8
# 连接池中的最小空闲连接 默认 0
min-idle: 0
datasource:
hikari:
auto-commit: true
......
......@@ -38,7 +38,7 @@ function queryPageList() {
maintainSelected: true, //设置为 true 在点击分页按钮或搜索按钮时,将记住checkbox的选择项
sidePagination: "server", //分页方式:client客户端分页,server服务端分页(*)
pageNumber: 1, //初始化加载第一页,默认第一页
pageSize: 5, //每页的记录行数(*)
pageSize: 10, //每页的记录行数(*)
pageList: [5, 10, 25, 50, 100], //可供选择的每页的行数(*)
search: true, //是否显示表格搜索,此搜索是客户端搜索,不会进服务端
strictSearch: true, //设置为 true启用 全匹配搜索,否则为模糊搜索
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment