采用命令行的方式终究是需要“人为”去干预,当你界面中输入一个命令时,Redis的服务器就会返回一个结果,即所谓的“一问一答”,然而在实际的生产环境中是很少直接采用命令行的方式去操作Redis的。下面开始整合教程。
1.首先,添加Redis依赖。
<!-- redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>2.2.2.RELEASE</version> </dependency>
2.在application.yml配置文件中,添加redis的连接配置
spring: # 连接到本地Redis服务,端口为6379 redis: host: 127.0.0.1 port: 6379
3.自定义Redis组件配置 RedisTemplate 与StringTemplate(自定义避免出现非业务性问题)
package com.debug.middleware.server.config; import org.springframework.beans.factory.annotation.Autowired; 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.core.StringRedisTemplate; import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; /** * @className: * @PackageName: com.debug.middleware.server.config * @author: youjp * @create: 2020-03-30 22:55 * @description: TODO redis配置类 * @Version: 1.0 */ @Configuration public class RedisConfig { //Redis链接工厂 @Autowired private RedisConnectionFactory redisConnectionFactory; /** * 缓存redis-redisTemplate * * @return */ @Bean public RedisTemplate<String, Object> redisTemplate() { RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>(); redisTemplate.setConnectionFactory(redisConnectionFactory); //TODO:指定大key序列化策略为为String序列化 redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer()); //TODO:指定hashKey序列化策略为String序列化 redisTemplate.setHashKeySerializer(new StringRedisSerializer()); //redisTemplate.setHashValueSerializer(new StringRedisSerializer()); return redisTemplate; } /** * 缓存redis-stringRedisTemplate * * @return */ @Bean public StringRedisTemplate stringRedisTemplate() { //采用默认配置即可-后续有自定义配置时则在此处添加即可 StringRedisTemplate stringRedisTemplate = new StringRedisTemplate(); stringRedisTemplate.setConnectionFactory(redisConnectionFactory); return stringRedisTemplate; } }
上诉代码中对于RedisTemplate自定义注入配置的属性主要是缓存Key与Value的序列化策略;对于StringRedisTemplate则采用默认的配置,后续有自定义的配置时可以在此处添加。
RedisTemplate实战
下面以实际生产环境中两个简单的案例需求,演示RedisTemplate操作组件的运用。
1.采用RedisTemplate将字符串信息写入缓存,并读取出来展示到控制台上。
2.采用RedisTemplate将对象序列化为Json格式字符串后写入缓存,然后再读取出来,最后反序列化解析其中的内容并展示在控制台上。
对于这两个需求,我们可以直接借助RedisTemlpate的ValueOperations操作组件进行操作, 并采用Java unit即单元测试查看运行结果。
首先第一个需求案例:
package com.debug.middleware.server; import org.junit.Test; import org.junit.runner.RunWith; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.ValueOperations; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; /** * @className: * @PackageName: com.debug.middleware * @author: youjp * @create: 2020-03-30 23:25 * @description: * @Version: 1.0 */ @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest public class RedisTest { private static Logger logger=LoggerFactory.getLogger(RedisTest.class); @Autowired private RedisTemplate redisTemplate; //采用RedisTemplate将字符串信息写入缓存并读取出来 @Test public void one(){ logger.info("---开始RedisTemplate---操作组件的实战"); final String content="RedisTemplate实战的字符串信息"; final String key="redis:template:one:string"; //Redis通用操作组件 ValueOperations valueOperations=redisTemplate.opsForValue(); //将字符串信息写入缓存 valueOperations.set(key,content); logger.info("写入缓存的内容"+content); Object result= valueOperations.get(key); logger.info("缓存中取出来的内容"+content); } }
点击运行,查看控制台日志:
查看redis客户端数据,可看到数据已经保存入内存。
案例2:将对象序列化以后写入缓存。
首先我们构造一个user对象。
package com.debug.middleware.server.entity; import lombok.Data; /** * @ClassName: * @PackageName: com.debug.middleware.server.entity * @author: youjp * @create: 2020-03-31 08:38 * @description: TODO 用户对象 * @Version: 1.0 */ @Data public class User { private Integer id; private String name; private String username; public User() { } public User(Integer id, String name, String username) { this.id = id; this.name = name; this.username = username; } }
借助ObjectMapper组件提供的Jackson序列化框架(JSON序列化框架的一种)对对象进行序列化和反序列化操作,案例代码如下:
package com.debug.middleware.server; import com.debug.middleware.server.entity.User; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.Test; import org.junit.runner.RunWith; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.ValueOperations; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; /** * @className: * @PackageName: com.debug.middleware * @author: youjp * @create: 2020-03-30 23:25 * @description: redisTemplate操作组件案例测试 * @Version: 1.0 */ @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest public class RedisTest { private static Logger logger=LoggerFactory.getLogger(RedisTest.class); @Autowired private RedisTemplate redisTemplate; //采用RedisTemplate将字符串信息写入缓存并读取出来 @Autowired private ObjectMapper objectMapper; @Test public void two() throws Exception{ logger.info("---开始RedsiTemplate--操作组件实战"); User user=new User(1,"debug","鸣人"); //Redis通用操作组件 ValueOperations values=redisTemplate.opsForValue(); //将序列化信息写入缓存 final String key="redis:template:two:object"; final String content=objectMapper.writeValueAsString(user); values.set(key,content); logger.info("写入缓存的对象信息:"+user); Object result=values.get(key); if(result!=null){ User resultUser= objectMapper.readValue(result.toString(),User.class); logger.info("读取缓存中的序列化内容为:"+resultUser); } } }
点击运行test_two,期间没有报错,则可以看到控制台输出
查看redis客户端,可看到已写入缓存
StringRedisTemplate
顾名思义是RedisTemplate的特例,专门用于处理缓存中Value的数据类型为字符串String的数据,包括String类型的数据和序列化后为String类型的字符串数据。其使用方法和RedisTemplate类似,就不写案例了。
StringRedisTemplate与RedisTemplate操作组件都可以用于操作存储字符串类型的数据信息。当然,对于RedisTemplate而言,它还适用于其他的数据类型的存储,如列表List、集合Set、有序集合SorttedSet和哈西Hash等。
下一篇博客,会讲解RedisTemplate的各种数据类型使用案例。