• 自定义对象存入Redis


    package com.cms.common;
    
    import com.alibaba.fastjson.JSON;
    import com.qiyi.tvguo.cms.common.utils.ObjectSerializeUtil;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    import redis.clients.jedis.Jedis;
    import redis.clients.jedis.JedisPool;
    import redis.clients.jedis.JedisPoolConfig;
    
    import javax.annotation.PostConstruct;
    import javax.annotation.PreDestroy;
    
    /**
     * redis client
     */
    @Component
    @Slf4j
    public class RedisClient {
    
        private static  JedisPool pool;
    
        @Value("${redis.host}")
        private String host;
    
        @Value("${redis.port}")
        private Integer port;
    
        @Value("${redis.password}")
        private String password;
    
        private  final int timeout=5000;
        private  final int database=0;
        private  final int maxConnection=500;
        private  final int maxIdle=50;
        private  final int minIdle=20;
    
        @PostConstruct
        public   void  init()
        {
            JedisPoolConfig config = new JedisPoolConfig();
            config.setMaxTotal(maxConnection);
            config.setMaxIdle(maxIdle);
            config.setMinIdle(minIdle);
            config.setMaxWaitMillis(1000);
            config.setTestOnBorrow(true);
            pool = new JedisPool(config, host,port,timeout, password, database);
            log.info("------jedis pool init------");
        }
    
        /**
         * 获取jedis
         * @return
         */
        public Jedis getJedis()
        {
            return pool.getResource();
        }
    
    
        @PreDestroy
        public  void  destroy()
        {
            if(pool==null)
            {
                return;
            }
    
            pool.destroy();
            log.info("-----jedis pool destroy-----");
        }
    
    
        /**
         * 复杂对象存入redis
         * @param key
         * @param v
         * @param expireSeconds
         * @param <T>
         * @return
         */
        public <T> Boolean setExByte(String key,T v,int expireSeconds)
        {
            Jedis jedis=null;
            try
            {
                jedis= getJedis();
                jedis.setex(key.getBytes(),expireSeconds,ObjectSerializeUtil.serialize(v));
                return true;
    
            }catch (Exception ex)
            {
                log.error("复杂对象存入redis异常:{}",ex);
    
            }finally {
                if(jedis!=null)
                {
                    jedis.close();
                }
            }
    
            return  false;
        }
    
    
        /**
         * 获取Value 为byte[]的复杂对象
         * @param key
         * @param <T>
         * @return
         */
        public <T> T getByteObject(String key)
        {
            Jedis jedis=null;
            try
            {
                jedis= getJedis();
                byte[] bytes= jedis.get(key.getBytes());
                return  (T)ObjectSerializeUtil.unserizlize(bytes);
    
            }catch (Exception ex)
            {
                log.error("redis获取复杂对象异常:{}",ex);
    
            }finally {
                if(jedis!=null)
                {
                    jedis.close();
                }
            }
    
            return  null;
        }
    
    
        /**
         * 对象以JSON存入redis
         * @param key
         * @param obj
         * @param expireSeconds
         * @param <T>
         * @return
         */
        public <T> Boolean setExJson(String key,T obj,int expireSeconds)
        {
            Jedis jedis=null;
            try
            {
                jedis= getJedis();
                jedis.setex(key,expireSeconds, JSON.toJSONString(obj));
                return true;
    
            }catch (Exception ex)
            {
                log.error("复杂对象存入redis异常:{}",ex);
            }finally {
                if(jedis!=null)
                {
                    jedis.close();
                }
            }
    
            return  false;
        }
    
    
        /**
         * 获取Value 为Json的复杂对象
         * @param key
         * @param <T>
         * @return
         */
        public <T extends  Object> T getJsonObject(String key,Class<T> clazz)
        {
            Jedis jedis=null;
            try
            {
                jedis= getJedis();
                String jsonString= jedis.get(key);
              return JSON.parseObject(jsonString, clazz);
    
            }catch (RuntimeException ex)
            {
                log.error("redis获取Json复杂对象异常:{}",ex);
    
            } finally {
                if(jedis!=null)
                {
                    jedis.close();
                }
            }
    
            return null;
        }
    
    
    
    }
    package com.common.utils;
    
    import lombok.extern.slf4j.Slf4j;
    
    import java.io.*;
    
    
    @Slf4j
    public class ObjectSerializeUtil implements  Serializable {
    
        /**
         * 序列化对象
         * @param obj
         * @param <T> T 必须实现Serializable接口,
         *           T 中尽量加上 serialVersionUID (private static final long serialVersionUID)
         * @return
         */
        public static <T> byte [] serialize(T obj){
            ObjectOutputStream outputStream;
            ByteArrayOutputStream byteArrayOutputStream;
            try {
                byteArrayOutputStream=new ByteArrayOutputStream();
                outputStream=new ObjectOutputStream(byteArrayOutputStream);
                outputStream.writeObject(obj);
                byte[] byteArray=byteArrayOutputStream.toByteArray();
                return byteArray;
            } catch (IOException e) {
               log.error("ObjectSerializeUtil-IOException:{}",e);
            }
            return null;
        }
    
        /**反序列化对象
         * @param byteArray
         * @param <T>T 必须实现Serializable接口,
         *      *           T 中尽量加上 serialVersionUID (private static final long serialVersionUID)
         * @return
         */
        public static <T> Object unserizlize(byte[] byteArray){
            ObjectInputStream inputStream;
            ByteArrayInputStream byteArrayInputStream;
            byteArrayInputStream=new ByteArrayInputStream(byteArray);
            try {
                inputStream=new ObjectInputStream(byteArrayInputStream);
                T obj=(T)inputStream.readObject();
                return obj;
            } catch (Exception e) {
                log.error("ObjectSerializeUtil-IOException:{}",e);
            }
    
            return null;
        }
    
    }
  • 相关阅读:
    软件构架实践_阅读笔记04(-11)
    软件构架实践_阅读笔记03(7-9)
    Tsinsen-A1488 : 魔法波【高斯消元+异或方程组】
    Tsinsen-1487:分配游戏【树状数组】
    Tsinsen-1486:树【Trie树 + 点分治】
    Splay初步【bzoj1503】
    Treap初步
    [BZOJ3207] 花神的嘲讽计划Ⅰ
    可持久化Trie树初步
    可持久化线段树初步
  • 原文地址:https://www.cnblogs.com/red-fox/p/9340911.html
Copyright © 2020-2023  润新知