美文网首页
Redis 学习总结(2) Java 操作 Redis 的示例

Redis 学习总结(2) Java 操作 Redis 的示例

作者: 张云飞Vir | 来源:发表于2021-07-17 23:28 被阅读0次

    1. 背景

    在 java 开发中集成 redis。

    我们用到 Spring Data Redis 。

    2.知识

    Spring Data Redis 是更大的 Spring Data 系列的一部分,它提供了从 Spring 应用程序对 Redis 的轻松配置和访问。

    它支持 两种 Redis 驱动程序:

    Spring Data Redis 实现了对底层的抽象, 无论是那一种驱动,使用起来是一样的。

    3. 示例

    3.1 导入依赖包

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
            </dependency>
    

    3.2 配置数据源

    在配置文件 application.yml 里:

    spring:
      redis:
        host: localhost
        port: 6379
        password: 123456
        database: 0
    

    3.3 配置一个 RedisTemplate 对象

    Springboot 强大的自动化配置会把 RedisConnectionFactory 对象配置好,直接用就好了。它会按 上一步的配置文件的参数配置好数据源。

    RedisTemplate 是Spring 的模板方法,提供了对 redis 的抽象,我们注入一个配置,后续就可以自动装载了。

    @Configuration
    public class RedisConfig {
    
    
        /**
         * 通过 Spring 注入 一个 RedisTemplate
         *
         * @param redisConnectionFactory
         * @return
         */
        @Bean
        public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
            StringRedisTemplate redisTemplate = new StringRedisTemplate();
            redisTemplate.setValueSerializer(jackson2JsonRedisSerializer());
            redisTemplate.setConnectionFactory(redisConnectionFactory);
            return redisTemplate;
        }
    
        /**
         * 注入一个 json 序列化转换器
         *
         * @return
         */
        @Bean
        public Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer() {
            ObjectMapper objectMapper = new ObjectMapper();
            objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
            objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
    
            Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
            jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
            return jackson2JsonRedisSerializer;
        }
    
    }
    

    3.3 可以使用自动装载了

        @Autowired
        private RedisTemplate redisTemplate;
    

    代码使用:

    ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();
    final String KEY = String.format("users:%s", id);
    String result = valueOperations.get(KEY);
    

    4. 扩展

    4.1 可以操作 hash结构

    写入:

     // 同时按 email 存一个id 的引用
    final String KEY_MAIL = "users:by:email";
    HashOperations<String, String, String> hashOperations = redisTemplate.opsForHash();
    hashOperations.put(KEY_MAIL, email, result.getId() + "");
    

    读取:

    final String KEY_MAIL = "users:by:email";
    HashOperations<String, String, String> hashOperations = redisTemplate.opsForHash();
    String id = hashOperations.get(KEY_MAIL, email);
    if (id != null) {
        return getEntity(Integer.parseInt(id));
    }
    return null;
    

    5.附录

    我的代码示例:https://github.com/vir56k/java_demo/tree/master/springboot_redis_demo

    6.参考:

    https://spring.io/projects/spring-data-redis#overview
    https://docs.spring.io/spring-data/redis/docs/2.5.3/reference/html/#reference

    相关文章

      网友评论

          本文标题:Redis 学习总结(2) Java 操作 Redis 的示例

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