因为在实习,没有的任何的工作经验,当首次接触的公司的项目,真的是一头雾水;各种组件的封装,真的使人奔溃;而现在已经实习了好几个月了,对各种业务稍微了解了一下,细细地看了一下封装组件的代码,其实也没有那么难,一句话总结是:重新调用一下原组件的方法。意思就是,写一个方法,然后调用原来组件提供的方法;相当于在原来的方法下多调用了一层。
下面进行详细的讲解:
我们对于Redis集群的操作通常来讲不会真正对应多个节点,而是由底层单独分片处理,换句话说我们应用程序对应的节点是一个,因此我们目前主要用的是JedisPool的方式,而很少会采用JedisCluster的方式。而我们主要是对Jedis客户端进行操作。至于不知道什么是Jedis,可以去官网的客户端看;或者可以参考一下(https://blog.csdn.net/meaijojo/article/details/82903553);下面直接进入主题:
一,组件封装:
1.1.1 首先新建一个maven项目,然后在pom文件加上Jedis的依赖:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.8.1</version>
</dependency>
(注:这里版本不说明,现在好像最新的版本是3.0.1)
1.2.1 定义一个底层接口:
1.2.2 对底层接口的实现,调用Jedis的方法
1.3.1 定义一个缓存的调用接口
1.3.2 实现缓存接口,调用底层接口
上面已经是对组件方法进行了二次封装,对Redis方法的调用从get(byte[] b) 变成了get(String s);
1.4.1 然后下面是当把类交给Spring管理时,遇到相同的bean,spring容器该选择哪一个呢?这个可以了解一下@Primary注解,下面就是引用:
@Configuration
public class PluginCacheConfig {
private static final Logger logger = LoggerFactory.getLogger(PluginCacheConfig.class);
@Value("${redis.host}")
private String host;
@Value("${redis.port}")
private int port;
@Value("${redis.timeout}")
private int timeout;
@Value("${redis.pwd}")
private String pwd;
@Value("${redis.database:0}")
private int database;
@Value("${redis.pool.maxTotal}")
private int poolMaxTotal;
@Value("${redis.pool.maxIdle}")
private int poolMaxIdle;
@Value("${redis.pool.maxWaitMillis}")
private int poolMaxWaitMillis;
@Value("${redis.pool.testOnBorrow:false}")
private boolean poolTestOnBorrow;
@Value("${redis.pool.testOnReturn:false}")
private boolean poolTestOnReturn;
@Bean
@Primary
public JedisPoolConfig jedisPoolConfig() {
printRedisConfig();
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(poolMaxTotal);
config.setMaxIdle(poolMaxIdle);
config.setMaxWaitMillis(poolMaxWaitMillis);
config.setTestOnBorrow(poolTestOnBorrow);
config.setTestOnReturn(poolTestOnReturn);
return config;
}
private void printRedisConfig() {
logger.info("plugin-cache-config:redis:host:{}, port:{}, timeout:{}, pwd:{}, database:{}", host, port, timeout, pwd, database);
logger.info("plugin-cache-config:reids:poolMaxTotal:{}, poolMaxIdle:{}, poolMaxWaitMillis:{}, poolTestOnBorrow:{}, poolTestOnReturn:{}", poolMaxTotal, poolMaxIdle, poolMaxWaitMillis, poolTestOnBorrow, poolTestOnReturn);
}
@Bean
@Primary
public JedisPool jedisPool() {
return new JedisPool(jedisPoolConfig(), host, port, timeout, pwd, database);
}
@Bean
@Primary
public RedisManager redisManager() {
RedisManager manager = new RedisManager();
manager.setJedisPool(jedisPool());
manager.setExpire(0);
return manager;
}
@Bean
@Primary
public CacheClient cacheClient() {
CacheClient cacheClient = new CacheClientImpl();
cacheClient.setCacheManager(redisManager());
return cacheClient;
}
}
1.5.1 上面的所有步骤就是对Redis组件的进行了封装,下面给代码进行检测:
直接运行测试,看是否调通。
1.6.1 测试成功后,就可以直接去打jar包
二. 项目中的引用:
2.1.1 在项目里的pom文件直接导入依赖组件的jar包:
2.2.1 对封装组件接口的调用
上面有什么理解错误的地方,欢迎指正-_-!!!