redis
redis是一款开源的key-value数据库,是有c语言编写,运行在内存中,企业开发中通常使用redis来实现缓存。
Jedis
Jedis是Redis官方推出的一款面向Java的客户端,提供了很多接口供Java语言调用。
Spring Data Redis
Spring-data-redis是spring大家族的一部分,提供了在srping应用中通过简单的配置访问redis服务,对reids底层开发包(Jedis, JRedis, and RJC)进行了高度封装。
spring Data Redis针对Jedis提供了以下功能。
- 连接池自动管理,提供了一个高度封装的“RedisTemplate”类
- 针对jedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口
- ValueOperations:简单的k-v的string类型操作
- SetOperations:set数据类型的操作
- ZSetOperations:zset类型数据操作
- HashOperations:针对map数据类型的操作
- ListOperations:针对list数据类型的操作。
RedisTemplate的配置
-
导入依赖
<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>2.0.6.RELEASE</version> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency>
-
编写properties配置文件
# redis服务器主机地址 redis.host=192.168.xxx.xxx #redis服务器主机端口 redis.port=6379 #redis服务器登录密码 #redis.password=root #最大活动连接 redis.maxActive=20 #最大空闲连接 redis.maxIdle=10 #最小空闲连接 redis.minIdle=0 #最大等待时间 redis.maxWait=-1
-
配置RedisTemplate类到Spring容器
/** * 引入properties配置文件 */ @PropertySource("redis.properties") public class RedisConfig { @Value("${redis.host}") private String hostName; @Value("${redis.port}") private Integer port; // @Value("${redis.password}") // private String password; @Value("${redis.maxActive}") private Integer maxActive; @Value("${redis.minIdle}") private Integer minIdle; @Value("${redis.maxIdle}") private Integer maxIdle; @Value("${redis.maxWait}") private Integer maxWait; @Bean //配置RedisTemplate public RedisTemplate createRedisTemplate(RedisConnectionFactory redisConnectionFactory){ //1.创建对象 RedisTemplate redisTemplate = new RedisTemplate(); //2.设置连接工厂 redisTemplate.setConnectionFactory(redisConnectionFactory); //3.设置redis生成的key的序列化器,对key编码进行处理 RedisSerializer stringSerializer = new StringRedisSerializer(); redisTemplate.setKeySerializer(stringSerializer); redisTemplate.setHashKeySerializer(stringSerializer); //4.返回 return redisTemplate; } @Bean //配置Redis连接工厂 public RedisConnectionFactory createRedisConnectionFactory(RedisStandaloneConfiguration redisStandaloneConfiguration,GenericObjectPoolConfig genericObjectPoolConfig){ //1.创建配置构建器,它是基于池的思想管理Jedis连接的 JedisClientConfiguration.JedisPoolingClientConfigurationBuilder builder = (JedisClientConfiguration.JedisPoolingClientConfigurationBuilder)JedisClientConfiguration.builder(); //2.设置池的配置信息对象 builder.poolConfig(genericObjectPoolConfig); //3.创建Jedis连接工厂 JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(redisStandaloneConfiguration,builder.build()); //4.返回 return jedisConnectionFactory; } @Bean //配置spring提供的Redis连接池信息 public GenericObjectPoolConfig createGenericObjectPoolConfig(){ //1.创建Jedis连接池的配置对象 GenericObjectPoolConfig genericObjectPoolConfig = new GenericObjectPoolConfig(); //2.设置连接池信息 genericObjectPoolConfig.setMaxTotal(maxActive); genericObjectPoolConfig.setMinIdle(minIdle); genericObjectPoolConfig.setMaxIdle(maxIdle); genericObjectPoolConfig.setMaxWaitMillis(maxWait); //3.返回 return genericObjectPoolConfig; } @Bean //配置Redis标准连接配置对象 public RedisStandaloneConfiguration createRedisStandaloneConfiguration(){ //1.创建Redis服务器配置信息对象 RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration(); //2.设置Redis服务器地址,端口和密码(如果有密码的话) redisStandaloneConfiguration.setHostName(hostName); redisStandaloneConfiguration.setPort(port); // redisStandaloneConfiguration.setPassword(RedisPassword.of(password)); //3.返回 return redisStandaloneConfiguration; } }
-
在Spring配置类中引入此配置文件类
@Configuration @ComponentScan("com.itheima") @Import(RedisConfig.class) public class SpringConfig { }
-
使用测试类
public class App { public static void main(String[] args) { ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class); RedisTemplate rt = context.getBean(RedisTemplate.class); //添加数据 rt.opsForValue().set("name", "不知火舞"); //根据key获取数据 Object value = rt.opsForValue().get("name"); //打印数据 System.out.println(value.toString()); } }