redis学习系列(二)--spring boot整合Redis集群
2018-01-24 10:59
756 查看
spring boot整合Redis集群
开发
项目地址 https://gitee.com/zhenhai_zheng/springboot_rediscluster.git添加依赖,加载Jedis
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
添加redis配置
springboot配置文件中添加集群的信息
# Redis服务器地址 #spring.redis.host=10.100.50.23 # Redis服务器连接端口 #spring.redis.port=6379 # Redis服务器连接密码(默认为空) spring.redis.password= # 连接池最大连接数(使用负值表示没有限制) spring.redis.pool.max-active=8 # 连接池最大阻塞等待时间(使用负值表示没有限制) spring.redis.pool.max-wait=-1 # 连接池中的最大空闲连接 spring.redis.pool.max-idle=8 # 连接池中的最小空闲连接 spring.redis.pool.min-idle=0 # 连接超时时间(毫秒) spring.redis.timeout=0 spring.redis.commandTimeout=5000 # redis.cluster spring.redis.cluster.nodes=10.100.50.23:6380,10.100.50.23:6381,10.100.50.23:6382,10.100.50.23:6383,10.100.50.23:6384,10.100.50.23:6385
项目入口类加入注解@EnableCaching,添加到缓存
import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCaching; @SpringBootApplication @MapperScan("com.example.dao") @EnableCaching public class DemoApplication { public static voidmain(String[] args) { SpringApplication.run(DemoApplication.class,args); } }
自定义redis配置,加入集群
import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; import redis.clients.jedis.HostAndPort; import redis.clients.jedis.JedisCluster; import redis.clients.jedis.JedisPoolConfig; import java.net.UnknownHostException; import java.util.HashSet; import java.util.Set; /** * @authorzhenhai.zheng * @describe *@date 2018/1/23 **/ @Configuration @ConditionalOnClass({JedisCluster.class}) public class RedisConfig { @Value("${spring.redis.cluster.nodes}") privateString clusterNodes; @Value("${spring.redis.timeout}") private inttimeout; @Value("${spring.redis.pool.max-idle}") private intmaxIdle; @Value("${spring.redis.pool.max-wait}") private longmaxWaitMillis; @Value("${spring.redis.commandTimeout}") private intcommandTimeout; @Bean publicJedisCluster getJedisCluster() { String[] cNodes = clusterNodes.split(","); Set<HostAndPort> nodes =new HashSet<>(); //分割出集群节点 for(String node : cNodes) { String[] hp = node.split(":"); nodes.add(newHostAndPort(hp[0],Integer.parseInt(hp[1]))); } JedisPoolConfig jedisPoolConfig =new JedisPoolConfig(); jedisPoolConfig.setMaxIdle(maxIdle); jedisPoolConfig.setMaxWaitMillis(maxWaitMillis); //创建集群对象 // JedisCluster jedisCluster = new JedisCluster(nodes,commandTimeout); return newJedisCluster(nodes,commandTimeout,jedisPoolConfig); } /** * 设置数据存入redis 的序列化方式 *</br>redisTemplate序列化默认使用的jdkSerializeable,存储二进制字节码,导致key会出现乱码,所以自定义 *序列化类 * * @paramredisConnectionFactory */ @Bean publicRedisTemplate<Object,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)throws UnknownHostException { RedisTemplate<Object,Object> redisTemplate = newRedisTemplate<>(); redisTemplate.setConnectionFactory(redisConnectionFactory); Jackson2JsonRedisSerializer jackson2JsonRedisSerializer =new Jackson2JsonRedisSerializer(Object.class); ObjectMapper objectMapper =new ObjectMapper(); objectMapper.setVisibility(PropertyAccessor.ALL,JsonAutoDetect.Visibility.ANY); objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(objectMapper); redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); redisTemplate.setKeySerializer(newStringRedisSerializer()); redisTemplate.afterPropertiesSet(); return redisTemplate; } }
Service实现类中,自动注入jedisCluster
@Autowired private JedisCluster jedisCluster;
并写入一个测试方法
public String findRedis() { jedisCluster.set("userName", "hello wenqy"); return jedisCluster.get("userName"); }
在控制层加入调用刚才的service方法
@RequestMapping("/redis") public String findRedis() { return userService.findRedis(); }
测试
在findRedis方法中打断点,第一次访问时建立缓存,第二次访问发现没有进入该函数。但返回的结果是一样的。最后访问
spring boot集成redis进行数据缓存功能
@Cacheable 表明Spring在调用方法之前,首先应该在缓存中查找方法的返回值。如果这个值能够找到,就会返回缓存的值。否则的话,这个方法就会被调用,返回值会放到缓存之中
@cacheput 表明Spring应该将方法的返回值放到缓存中。在方法的调用前并不会 检查缓存,方法始终都会被调用
@cacheevict 表明Spring应该在缓存中清除一个或多个条目
@caching 这是一个分组的注解,能够同时应用多个其他的缓存注解
@cacheconfig 可以在类层级配置一些共用的缓存配置
项目地址https://gitee.com/zhenhai_zheng/springboot_rediscluster.git
将相关注解添加到接口方法上即可
/** * 指定id的数据 * @param id * @return */ @Cacheable(value = "user_",key = "#root.caches[0].name+#id") @RequestMapping("get/{id}") public User get(@PathVariable("id") String id){ User user = userService.getUser(id); return user; }
/** * * @param user */ @RequestMapping("/updateUser") @CachePut(value = "user_",key = "#root.caches[0].name+#user.id") public void updateUser(User user){ userService.updateByPrimaryKey(user); }
/** * * @param id */ @RequestMapping("/delete/{id}") @CacheEvict(value = "user_",key = "#root.caches[0].name+#id") public void delete(@PathVariable("id") String id){ userService.deleteByPrimaryKey(id); }
相关文章推荐
- 分布式缓存技术redis学习系列(七)—— spring 整合redis如何操作redis集群
- Springboot整合redis及redis集群
- spring boot整合redis(单机+集群)
- SpringBoot系列十:SpringBoot整合Redis
- SpringBoot整合Redis(单机+集群) —— 含Spring版附件文档
- SpringBoot整合Redis集群
- springboot2.0整合redis-cluster集群
- springboot+shiro+redis(集群redis版)整合教程
- 集群与负载均衡系列(5)——消息队列之spring-boot整合Rabbitmq
- 【Spring系列】Spring mvc整合redis(非集群)
- 【SpringBoot系列2】SpringBoot整合Redis
- spring boot整合redis(单机+集群)
- Redis学习(3.1)spring boot整合Redis速成
- SpringBoot整合Redis集群
- 二:redis3.x-cluster集群于spring整合
- SpringBoot入门系列:第四篇 redis
- spring-boot 整合redis作为数据缓存
- Springboot系列:Springboot与Thymeleaf模板引擎整合基础教程(附源码)
- Springboot系列:Springboot与Thymeleaf模板引擎整合基础教程(附源码)
- redis 集群介绍,安装详细步骤,和spring 整合