美文网首页
在Spring中使用Redis

在Spring中使用Redis

作者: Tcpieg | 来源:发表于2020-05-22 11:19 被阅读0次

Redis安装教程

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

redis运行时

Iedis插件安装

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

Iedis插件安装
Iedis插件安装
安装完成后,可以看到右侧出现了redis图标,这样就可以开始添加链接。
Iedis使用
Iedis使用
测试连接成功后,可根据key查询value值。
Iedis使用

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是同一个对象。

相关文章

网友评论

      本文标题:在Spring中使用Redis

      本文链接:https://www.haomeiwen.com/subject/jdofahtx.html