Redis安装教程
首先必须在本机上安装Redis数据库,参考Redis安装教程,在使用redis的之前,必须运行redis:
1、打开一个 cmd 窗口 使用 cd 命令切换目录到 C:\redis(安装的redis目录下);
2、运行redis-server.exe redis.windows.conf
命令,在使用redis的时候不能关闭cmd窗口。

Iedis插件安装
如果想要看到redis里面存放的数据,可以在IntelliJ IDEA
里安装插件Iedis
。选择Iedis2
版本安装,之前安装了Iedis,但是用不起来,原来已经Iedis已经不用了。


安装完成后,可以看到右侧出现了redis图标,这样就可以开始添加链接。


测试连接成功后,可根据key查询value值。

Spring中使用Redis
1、当你的redis存的是字符串数据或者你要存取的就是字符串类型的时候,那么你就使用StringRedisTemplate
即可。
2、如果你的数据是复杂的对象类型,而取出的时候又不想做任何的数据转换,直接从Redis里面取出一个对象,那么使用RedisTemplate
是更好的选择。
但是两者数据不共通,用RedisTemplate
存的数据,不可能通过StringRedisTemplate
取出来。
StringRedisTemplate
StringRedisTemplate.opsForValue().* //操作String字符串类型
StringRedisTemplate.delete(key/collection) //根据key/keys删除
StringRedisTemplate.opsForList().* //操作List类型
StringRedisTemplate.opsForHash().* //操作Hash类型
StringRedisTemplate.opsForSet().* //操作set类型
StringRedisTemplate.opsForZSet().* //操作有序set
RedisTemplate
redisTemplate.opsForValue(); //操作字符串
redisTemplate.opsForHash(); //操作hash
redisTemplate.opsForList(); //操作list
redisTemplate.opsForSet(); //操作set
redisTemplate.opsForZSet(); //操作有序set
示例
StringRedisUtil
@Component注解是把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>。
1、@Service用于标注业务层组件
2、@Controller用于标注控制层组件(如struts中的action)
3、@Repository用于标注数据访问组件,即DAO组件.
4、@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
@Component
public class StringRedisUtil {
@Autowired
public StringRedisTemplate stringRedisTemplate;
@Autowired
public RedisTemplate redisTemplate;
public void redisTemplateSetString(String key, Object value) {
redisTemplate.opsForValue().set(key, value);
}
public Object redisTemplateGetString(String key) {
return redisTemplate.opsForValue().get(key);
}
public void stringRedisTemplateSet(String key, String value) {
stringRedisTemplate.opsForValue().set(key, value);
}
public String stringRedisTemplateGet(String key) {
return stringRedisTemplate.opsForValue().get(key);
}
}
测试一下
测试的时候必须要启动容器,否则会报错。
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
@RunWith(SpringRunner.class)
@SpringBootTest
public class test {
@Autowired
private StringRedisUtil stringRedisUtil;
@Test
public void redis() {
stringRedisUtil.redisTemplateSetString("name", "zqsg");
System.out.println("RedisTemplate:" + stringRedisUtil.redisTemplateGetString("name"));
stringRedisUtil.stringRedisTemplateSet("sex", "female");
System.out.println("StringRedisTemplate:" + stringRedisUtil.stringRedisTemplateGet("sex"));
}
}
@Component和@Configuration的区别
既然说到了@Component
,就会把它和@Configuration
联系起来,一般@Configuration
和 @Bean
组合使用,而@Component
和@Autowired
组合使用。
比如,我为了可以使用redisTemplate
来保存对象,写了一个配置类。
@Configuration
public class RedisConfig {
/**
* redisTemplate 序列化使用的jdkSerializeable, 存储二进制字节码, 所以自定义序列化类
* @param redisConnectionFactory
* @return
*/
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
// 使用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);
// 设置value的序列化规则和 key的序列化规则
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}
RedisTemplate<String, Object> redisTemplate
方法会由Spring代理执行,Spring发现方法所请求的Bean已经在容器中,那么就直接返回容器中的Bean。所以全局只有一个 redisTemplate
对象的实例。
如果是@Component的话,RedisTemplate<String, Object> redisTemplate
不会被Spring代理,会直接获取一个全新的redisTemplate
对象实例,所以全局会有多个对象的实例
简单来说,@Component
使用的是不同的对象,而@Configuration
是同一个对象。
网友评论