先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Golang全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024b (备注go)
正文
}
}
从配置类中可以看出不同的RedisTemplate的Bean实例是使用了同一个Redis的不同库,再对不同Redis的Bean进行封装成工具类,就能实现操作同一个Redis里的不同库了。要想实现连接不同的Redis,只需要将对应的Redis地址写进配置里即可。
二、通过传入的Redis配置参数来实现动态连接Redis不同的库或者不同的Redis
2.1 RedisTemplate的工厂类,类里Redis的地址、端口、密码等都可以通过传参来设定,这里只传入一个库的不同索引。
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import redis.clients.jedis.JedisPoolConfig;
/**
* 负责创建RedisTemplate实例
*/
public class RedisTemplateFactory {
private static String host = “localhost”;
private static int port = 6379;
private static String password = “”;
private static int timeout = 3000;
private static int maxActive = 100;
private static int maxIdle = 8;
private static int minIdle = 0;
private static int maxWait = -1;
/**
* 用于创建redis的Bean
* @return
*/
public static RedisTemplate<String, Object> getRedisTemplate(Integer databaseIndex) {
RedisTemplate<String, Object> redisTemplate = getRedisConnectionFactory(databaseIndex); // 建立Redis的连接
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
/**
* 是负责建立Factory的连接工厂类
* @param database
* @return
*/
public static RedisTemplate<String, Object> getRedisConnectionFactory(int database) {
JedisConnectionFactory jedisFactory = new JedisConnectionFactory();
// jedisFactory.setHostName(host);
// jedisFactory.setPort(port);
// jedisFactory.setPassword(password);
jedisFactory.setDatabase(database);
JedisPoolConfig poolConfig = new JedisPoolConfig(); // 进行连接池配置
poolConfig.setMaxTotal(maxActive);
poolConfig.setMaxIdle(maxIdle);
poolConfig.setMinIdle(minIdle);
poolConfig.setMaxWaitMillis(maxWait);
jedisFactory.setPoolConfig(poolConfig);
jedisFactory.afterPropertiesSet(); // 初始化连接池配置
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setConnectionFactory(jedisFactory);
return redisTemplate;
}
}
注意:在getRedisTemplate(Integer databaseIndex)方法返回RedisTemplate实例前必须要加入下面这句,原因请百度;
redisTemplate.afterPropertiesSet();
2.2 RedisUtil的工厂类
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
public class RedisUtilFactory {
private RedisTemplate<String, Object> redisTemplate;
public RedisTemplate<String, Object> getRedisTemplate() {
return redisTemplate;
}
public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) {
this.redisTemplate = redisTemplate;
}
// ============================= 公共方法 ============================
/**
* 获取所有的key
* @param pattern
* @return
*/
public Set keys(String pattern) {
return getRedisTemplate().keys(pattern);
}
/**
* 获取所有的数据
* @param pattern
* @return
*/
public List getAllData(String pattern){
Set keysList = keys(pattern);
return getRedisT