公司一年一度的hackthon比武大赛又要开始了,去年大家还是很踊跃的报名,晚上挑灯夜战。不过公司提供了酒店住宿,伙食,零食等,让大家比的开心,吃的开心。发挥出水平,比出实力和成绩,看看大家去年的伙食
好吧,其实给我一碗葫芦头泡馍我就会参赛,白鹿仓葫芦头泡馍小炒,味道杠杠的。
光说吃了,我们还是进入正轨,今天我们来看一下spring boot访问redis集群实战过程。
首先我们还是先修改配置文件application.properties,增加redis配置项如下,在看这篇文章之前,最好看一下我的另一篇redis集群搭建的文章。如果是从开发机器访问,请使用阿里云外网IP,如果是和redis集群部署在一起,请使用docker IP:docker0 inet
spring.redis.cluster.nodes=阿里云外网IP:7001,阿里云外网IP:7002,阿里云外网IP:7003,阿里云外网IP:7004,阿里云外网IP:7005,阿里云外网IP:7006 spring.redis.cluster.password=密码 spring.redis.cluster.command-timeout= 10000 spring.redis.cluster.max-attempts=2 spring.redis.cluster.max-redirects=3 spring.redis.cluster.max-active=20 spring.redis.cluster.max-wait=-1 spring.redis.cluster.max-idle=8 spring.redis.cluster.min-idle=0
接着我们需要引入两个包,访问redis和json序列化的组件
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> </dependency>
接下来我们新建一个类叫RedisProperties
@Component @ConfigurationProperties(prefix = "spring.redis.cluster") public class RedisProperties { private String nodes; private String password; private Integer commandTimeout; private Integer maxAttempts; private Integer maxRedirects; private Integer maxActive; private Integer maxWait; private Integer maxIdle; private Integer minIdle; /*此处省略部分代码*/ }
我们再创建一个类叫RedisConfig,包含了JedisPoolConfig,JedisCluster
@Configuration @ConditionalOnClass(JedisCluster.class) public class RedisConfig { Logger logger = LoggerFactory.getLogger(RedisConfig.class); @Resource private RedisProperties redisProperties; /** * 配置 Redis 连接池信息 */ @Bean public JedisPoolConfig getJedisPoolConfig() { JedisPoolConfig jedisPoolConfig =new JedisPoolConfig(); jedisPoolConfig.setMaxIdle(redisProperties.getMaxIdle()); jedisPoolConfig.setMaxWaitMillis(redisProperties.getMaxWait()); return jedisPoolConfig; } /* *返回单例JedisCluster */ @Bean public JedisCluster getJedisCluster(){ String[] serverArray = redisProperties.getNodes().split(","); Set<HostAndPort> nodes = new HashSet<HostAndPort>(); for(String ipPort: serverArray){ String[] ipPortPair = ipPort.split(":"); nodes.add(new HostAndPort(ipPortPair[0].trim(),Integer.valueOf(ipPortPair[1].trim()))); } return new JedisCluster(nodes,redisProperties.getCommandTimeout(),1000,1,redisProperties.getPassword(),getJedisPoolConfig()); } }
接下来再创建一个redis工具类
@Component public class RedisUtility { private static final Logger LOGGER = LoggerFactory.getLogger(RedisUtility.class); @Autowired private JedisCluster jedisCluster; public void set(String key, String value) { jedisCluster.set(key, value); LOGGER.debug("setkey={},value={}", key, value); } public String get(String key) { String value = jedisCluster.get(key); LOGGER.debug("get cache key={},value={}",key, value); return value; } public void delete(String key) { jedisCluster.del(key); LOGGER.debug("delete key={}", key); } }
工具类注入了JedisCluster实例,我们可以直接使用JedisCluster所提供的的操作redis的方法,ok接下来就是创建service和controller
@Service public class RedisClusterTestService implements IRedisClusterTestService { @Autowired private RedisUtility redisUtility; private Logger logger= LoggerFactory.getLogger(RedisClusterTestService.class); public String getTechArticleByRedis(String key) { try { return redisUtility.get(key); } catch (Exception e) { logger.error(e.getMessage()); } return "error"; } public void createTechArticleByRedis(TechArticle techArticle) { Gson gson=new Gson(); try { redisUtility.set("techarticle",gson.toJson(techArticle)); } catch (Exception e) { logger.error(e.getMessage()); } } }
再看下controller
@RestController @RequestMapping("redis") @Api(tags = "Redis Test Interface") public class redisClusterTestController { @Autowired IRedisClusterTestService redisClusterTestService; @GetMapping("retrieve") public String getTechArticle(@RequestParam("key") String key) { return redisClusterTestService.getTechArticleByRedis(key); } @PostMapping(value = "create", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) public void createTechArticleBySolr(@RequestBody TechArticle techArticle) { redisClusterTestService.createTechArticleByRedis(techArticle); } }
ok,至此我们的代码就全部写完了,接下来就是build docker image,把镜像跑起来,我们用端口8083把它跑起来
我们尝试创建一条数据试试
返回StatusCode =200
我们登录linux机器查看一下,用命令./redis-cli -c -h 172.26.233.95 -p 7003 先进入一个节点
看起来数据没问题,接下来我们再用api请求一下
看起来也没啥问题,ok今天到此为止,老夫要睡觉了。