1. 程式人生 > 實用技巧 >redis整合spring (二)

redis整合spring (二)

config

@Configuration //
public class AppConfig {

    @Value("${spring.redis.host}")
    String host;

    @Value("${spring.redis.port}")
    int port;


    // 建立物件,spring託管 <bean ...
    @Bean
    public JedisPool jedisPool() {
        JedisPool jedisPool = new JedisPool("localhost", 6379);
        return jedisPool;
    }

    @Bean
    public RedisTemplate redisTemplate(){
        RedisTemplate redisTemplate = new RedisTemplate();
        redisTemplate.setConnectionFactory(redisConnectionFactory());
        return redisTemplate;
    }

    public RedisConnectionFactory redisConnectionFactory(){
        RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
        redisStandaloneConfiguration.setHostName(host);
        redisStandaloneConfiguration.setPort(port);
        RedisConnectionFactory redisConnectionFactory = new JedisConnectionFactory(redisStandaloneConfiguration);
        return redisConnectionFactory;
    }

}

service

@Service
public class UserService {

    @Autowired
    JdbcTemplate jdbcTemplate; // spring提供jdbc一個工具(mybastis類似)

    @Autowired
    RedisTemplate redisTemplate;

    /**
     * 根據ID查詢使用者資訊 (redis快取,使用者資訊以json字串格式存在(序列化))
     */
    public User findUserById(String userId) {
        // 1、read cache
        User user = null;
        Object result = (User)redisTemplate.opsForValue().get("userId");
        if(user != null){
            return (User)result;
        }

        // 2、查詢資料庫
        String sql = "select * from tb_user_base where uid=?";
        user = jdbcTemplate.queryForObject(sql, new String[]{userId}, new BeanPropertyRowMapper<>(User.class));

        // set cache
        redisTemplate.opsForValue().set(userId, user);
        return user;
    }

}