Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
RedisTempate
引入依赖
<!--spring boot 2.0以后默认使用lettuce-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--lettuce 依赖commons-pool-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.11.1</version>
</dependency>
<!-- jackson -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.1</version>
</dependency>
application.yml配置
实际开发中,jedis和lettuce二选一即可。
server:
port: 9999
#系统默认连接池,这种方式 redisTemplate 可直接使用默认,在使用的地方直接注入即可
spring:
redis:
cluster:
nodes: 192.168.198.155:7000,192.168.198.155:7001,192.168.198.155:7002,192.168.198.155:7003,192.168.198.155:7004,192.168.198.155:7005
max-redirects: 3
timeout: 6000
#lettuce客户端
lettuce:
pool:
max-active: 50
max-idle: 8
min-idle: 0
max-wait: 1000ms
shutdown-timeout: 100ms
#jedis客户端
jedis:
pool:
max-active: 50
max-idle: 8
min-idle: 0
max-wait: 1000ms
Jedis和Lettuce的配置类
实际开发中二选一即可。
- RedisJedisClusterConfig.java
@Configuration
public class RedisJedisClusterConfig {
@Bean(name = "redisJedisTemplate")
public RedisTemplate<String, Object> redisJedisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new StringRedisSerializer());
redisTemplate.setConnectionFactory(redisConnectionFactory);
return redisTemplate;
}
}
- RedisLettuceClusterConfig.java
@Configuration
public class RedisLettuceClusterConfig extends CachingConfigurerSupport {
@Bean(name = "redisLettuceTemplate")
public RedisTemplate<String, Object> redisLettuceTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(factory);
// 使用Jackson2JsonRedisSerialize 替换默认序列化
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);
// key采用String的序列化方式
redisTemplate.setKeySerializer(new StringRedisSerializer());
// value序列化方式采用jackson
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
// hash的key也采用String的序列化方式
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
// hash的value序列化方式采用jackson
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}
Spring Boot Data(数据) Redis 中提供了 RedisTemplate 和 StringRedisTemplate;
StringRedisTemplate 是 RedisTemplate 的子类,两个方法基本一致,不同之处在于 操作的数据类型不同:
- RedisTemplate 两个泛型都是 Object,意味着存储的 key 和 value 都可以是一个对象。
- StringRedisTemplate 两个泛型都是 String,意味着存储的 的 key 和 value 都只能是字符串。
使用 RedisTemplate 默认是将对象序列化到 Redis 中,所以 放入的对象必须实现对象序列化接口。
两者的 数据是不共通的;也就是说 StringRedisTemplate 只能管理 StringRedisTemplate 里面的数据,RedisTemplate 只能管理 RedisTemplate 中的数据。
RedisTemplate<String, Object>工具类
下面我们就以RedisTemplate<String, Object> 模板为基础提供一个操作redis的工具类。
测试验证
标签:缓存,SpringBoot,max,Redis,192.168,RedisTemplate,new,序列化,redisTemplate From: https://www.cnblogs.com/xfeiyun/p/17795581.html