• redis整合spring (一)


    1、

    @Configuration //
    public class AppConfig {
    
    
        // 创建对象,spring托管 <bean ...
        @Bean
        public JedisPool jedisPool() {
            JedisPool jedisPool = new JedisPool("localhost", 6379);
            return jedisPool;
        }
    } 

    2、根据查询用户 ID 信息(redis缓存,用户信息以json字符串保存(序列化) 

         以 string 的形式存储 

    @Service
    public class UserService {
    
        @Autowired
        JdbcTemplate jdbcTemplate; // spring提供jdbc一个工具(mybastis类似)
    
        @Autowired
        JedisPool jedisPool;
    
    
        /**
         * 根据ID查询用户信息 (redis缓存,用户信息以json字符串格式存在(序列化))
         */
        public User findUserById(String userId) {
            User user = null;
            Jedis jedis = null;
            try {
                jedis = jedisPool.getResource();
                // 1、查询 redis 是否有数据
                String result = jedis.get(userId);
                if (result != null && "".equals(result)) {
                    // 把json 字符串转换为 User
                    user = (User) JSONObject.parse(result);
                    return user;  // 命中缓存
                }
    
                //2、查询数据库
                String sql = "select * from tb_user_base where uid=?";
                user = jdbcTemplate.queryForObject(sql, new String[]{userId}, new BeanPropertyRowMapper<>(User.class));
    
                // 3、将数据放入redis
                String userJsonStr = JSONObject.toJSONString(user);
                jedis.set(userId, userJsonStr);
    
            } finally {
                if (jedis != null) {
                    jedis.close();
                }
            }
            return user;
        }
    
    }
    

      以hash的形式存储

    /**
         * 根据ID查询用户信息 (redis缓存,用户信息以json字符串格式存在(序列化))
         */
        public User findUserById(String userId) {
            User user = null;
            Jedis jedis = null;
            try{
                jedis = jedisPool.getResource();
    
                // 1、 查询 redis 是否有数据 -- hash 方式
                Map<String, String> result = jedis.hgetAll(userId);
                if(result != null && "".equals(result)){
                    // map 对象转换为User
                    user = new User();
                    user.setAge(Integer.valueOf(result.get("age")));
                    user.setImg(result.get("img"));
                    user.setUname(result.get("uname"));
                    user.setUid(result.get("uid"));
                    return user;
                }
    
                //2、查询数据库
                String sql = "select * from tb_user_base where uid=?";
                user = jdbcTemplate.queryForObject(sql, new String[]{userId}, new BeanPropertyRowMapper<>(User.class));
    
                // 3、将数据放入redis
                String userJsonStr = JSONObject.toJSONString(user);
                HashMap<String, String> userInfo = new HashMap<>();
                userInfo.put("age", String.valueOf(user.getAge()));
                userInfo.put( "uname", String.valueOf(user.getUname()));
                userInfo.put( "uid", String.valueOf(user.getUid()));
                userInfo.put( "img", String.valueOf(user.getImg()));
                jedis.hmset(userId, userInfo);
    
            }finally {
                if(jedis != null){
                    jedis.close();
                }
            }
            return user;
        }
    
    
        /**
         * 根据ID查询用户名称
         */
        public String findUserNameById(String userId) {
            String uname = null;
            Jedis jedis = null;
            try{
                jedis = jedisPool.getResource();
                // 1、查询 redis 是否有数据
                uname = jedis.hget(userId, "uname");
                if(uname != null && "".equals(uname)){
                    return uname;  // 命中缓存
                }
    
                //2、查询数据库
                String sql = "select uname from tb_user_base where uid=?";
                uname = jdbcTemplate.queryForObject(sql, new String[]{userId}, String.class);
    
                // 3、将数据放入redis
                jedis.hset(userId, "uname", uname);
    
            }finally {
                if(jedis != null){
                    jedis.close();
                }
            }
            return uname;
        }
    

      

     github : https://github.com/szjomin/redisDemo/tree/master/redis/redis01 

      

  • 相关阅读:
    Socket与系统调用深度分析
    需求分析:未来的图书会是怎么样的?
    构建调试Linux内核网络代码的环境MenuOS系统
    jmeter--开始
    pytest---api
    pytest---mark
    pytest---数据处理
    pytest---fixture运行规则
    pytest---allure(mac版本)
    pytest---pytest.ini
  • 原文地址:https://www.cnblogs.com/Jomini/p/13690847.html
Copyright © 2020-2023  润新知