zoukankan      html  css  js  c++  java
  • 详细集成Redis (一)

    1.添加依赖

        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
        </dependency>
        
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.38</version>
        </dependency>
    View Code

    2.在application.properties中配置redis

    #redis
    redis.host=192.168.220.128
    redis.port=6379
    redis.timeout=3
    redis.password=123456
    redis.poolMaxTotal=10
    redis.poolMaxIdle=10
    redis.poolMaxWait=3
    View Code

    3.创建RedisConfig类 对应application.properties中的配置

    @Component
    @ConfigurationProperties(prefix="redis")
    public class RedisConfig {
        private String host;
        private int port;
        private int timeout;//
        private String password;
        private int poolMaxTotal;
        private int poolMaxIdle;
        private int poolMaxWait;//
        public String getHost() {
            return host;
        }
        public void setHost(String host) {
            this.host = host;
        }
        public int getPort() {
            return port;
        }
        public void setPort(int port) {
            this.port = port;
        }
        public int getTimeout() {
            return timeout;
        }
        public void setTimeout(int timeout) {
            this.timeout = timeout;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        public int getPoolMaxTotal() {
            return poolMaxTotal;
        }
        public void setPoolMaxTotal(int poolMaxTotal) {
            this.poolMaxTotal = poolMaxTotal;
        }
        public int getPoolMaxIdle() {
            return poolMaxIdle;
        }
        public void setPoolMaxIdle(int poolMaxIdle) {
            this.poolMaxIdle = poolMaxIdle;
        }
        public int getPoolMaxWait() {
            return poolMaxWait;
        }
        public void setPoolMaxWait(int poolMaxWait) {
            this.poolMaxWait = poolMaxWait;
        }
    }
    View Code

    4.创建RedisServer

    @Service
    public class RedisService {
        
        @Autowired
        JedisPool jedisPool;
        
        /**
         * 获取当个对象
         * */
        public <T> T get(KeyPrefix prefix, String key,  Class<T> clazz) {
             Jedis jedis = null;
             try {
                 jedis =  jedisPool.getResource();
                 //生成真正的key
                 String realKey  = prefix.getPrefix() + key;
                 String  str = jedis.get(realKey);
                 T t =  stringToBean(str, clazz);
                 return t;
             }finally {
                  returnToPool(jedis);
             }
        }
        
        /**
         * 设置对象
         * */
        public <T> boolean set(KeyPrefix prefix, String key,  T value) {
             Jedis jedis = null;
             try {
                 jedis =  jedisPool.getResource();
                 String str = beanToString(value);
                 if(str == null || str.length() <= 0) {
                     return false;
                 }
                //生成真正的key
                 String realKey  = prefix.getPrefix() + key;
                 int seconds =  prefix.expireSeconds();
                 if(seconds <= 0) {
                     jedis.set(realKey, str);
                 }else {
                     jedis.setex(realKey, seconds, str);
                 }
                 return true;
             }finally {
                  returnToPool(jedis);
             }
        }
        
        /**
         * 判断key是否存在
         * */
        public <T> boolean exists(KeyPrefix prefix, String key) {
             Jedis jedis = null;
             try {
                 jedis =  jedisPool.getResource();
                //生成真正的key
                 String realKey  = prefix.getPrefix() + key;
                return  jedis.exists(realKey);
             }finally {
                  returnToPool(jedis);
             }
        }
        
        /**
         * 增加值
         * */
        public <T> Long incr(KeyPrefix prefix, String key) {
             Jedis jedis = null;
             try {
                 jedis =  jedisPool.getResource();
                //生成真正的key
                 String realKey  = prefix.getPrefix() + key;
                return  jedis.incr(realKey);
             }finally {
                  returnToPool(jedis);
             }
        }
        
        /**
         * 减少值
         * */
        public <T> Long decr(KeyPrefix prefix, String key) {
             Jedis jedis = null;
             try {
                 jedis =  jedisPool.getResource();
                //生成真正的key
                 String realKey  = prefix.getPrefix() + key;
                return  jedis.decr(realKey);
             }finally {
                  returnToPool(jedis);
             }
        }
        
        private <T> String beanToString(T value) {
            if(value == null) {
                return null;
            }
            Class<?> clazz = value.getClass();
            if(clazz == int.class || clazz == Integer.class) {
                 return ""+value;
            }else if(clazz == String.class) {
                 return (String)value;
            }else if(clazz == long.class || clazz == Long.class) {
                return ""+value;
            }else {
                return JSON.toJSONString(value);
            }
        }
    
        @SuppressWarnings("unchecked")
        private <T> T stringToBean(String str, Class<T> clazz) {
            if(str == null || str.length() <= 0 || clazz == null) {
                 return null;
            }
            if(clazz == int.class || clazz == Integer.class) {
                 return (T)Integer.valueOf(str);
            }else if(clazz == String.class) {
                 return (T)str;
            }else if(clazz == long.class || clazz == Long.class) {
                return  (T)Long.valueOf(str);
            }else {
                return JSON.toJavaObject(JSON.parseObject(str), clazz);
            }
        }
    
        private void returnToPool(Jedis jedis) {
             if(jedis != null) {
                 jedis.close();
             }
        }
    
    }
    View Code

    5.创建RedisPoolFactory

    @Service
    public class RedisPoolFactory {
    
        @Autowired
        RedisConfig redisConfig;
        
        @Bean
        public JedisPool JedisPoolFactory() {
            JedisPoolConfig poolConfig = new JedisPoolConfig();
            poolConfig.setMaxIdle(redisConfig.getPoolMaxIdle());
            poolConfig.setMaxTotal(redisConfig.getPoolMaxTotal());
            poolConfig.setMaxWaitMillis(redisConfig.getPoolMaxWait() * 1000);
            JedisPool jp = new JedisPool(poolConfig, redisConfig.getHost(), redisConfig.getPort(),
                    redisConfig.getTimeout()*1000, redisConfig.getPassword(), 0);
            return jp;
        }
        
    }
    View Code

    6.在controller中写一个demo

    @Controller
    @RequestMapping("/demo")
    public class SampleController {
    
        @Autowired
        UserService userService;
        
        @Autowired
        RedisService redisService;
        
        @RequestMapping("/hello")
        @ResponseBody
        public Result<String> home() {
            return Result.success("Hello,world");
        }
        
        @RequestMapping("/error")
        @ResponseBody
        public Result<String> error() {
            return Result.error(CodeMsg.SESSION_ERROR);
        }
        
        @RequestMapping("/hello/themaleaf")
        public String themaleaf(Model model) {
            model.addAttribute("name", "Joshua");
            return "hello";
        }
        
        @RequestMapping("/db/get")
        @ResponseBody
        public Result<User> dbGet() {
            User user = userService.getById(1);
            return Result.success(user);
        }
        
        
        @RequestMapping("/db/tx")
        @ResponseBody
        public Result<Boolean> dbTx() {
            userService.tx();
            return Result.success(true);
        }
        
        @RequestMapping("/redis/get")
        @ResponseBody
        public Result<User> redisGet() {
            User  user  = redisService.get(UserKey.getById, ""+1, User.class);
            return Result.success(user);
        }
        
        @RequestMapping("/redis/set")
        @ResponseBody
        public Result<Boolean> redisSet() {
            User user  = new User();
            user.setId(1);
            user.setName("1111");
            redisService.set(UserKey.getById, ""+1, user);//UserKey:id1
            return Result.success(true);
        }
        
        
    }
    View Code
  • 相关阅读:
    [windbg] 进程、线程
    [Windows 驱动开发] 驱动中获取函数地址
    [DuiLib] 入坑资料收集
    [Windows 驱动开发] 获取驱动详细信息
    基于模板的SPS展示层定制
    关于工作角色的一个新的思考
    中小企业IT建设的有关思路
    定制SharePoint Portal之去除帮助链接
    大客户谈判技巧关于IT行业售前工作
    细节决定成败
  • 原文地址:https://www.cnblogs.com/gaoqiaoliangjie/p/10718376.html
Copyright © 2011-2022 走看看