java 使用redis的工具类

本文介绍了一款针对游戏应用设计的Redis存储工具类,该工具类支持非切片和切片连接,具备高效的资源管理和错误处理机制。文章还提供了一个序列化工具类,用于对象的序列化与反序列化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近游戏把数据库换成了redis,写了redis存储工具类与大伙分享。

import java.util.ArrayList;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;



import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;

public class RedisUtil {


    private static final Logger logger = LoggerFactory.getLogger(RedisUtil.class);
        private Jedis jedis;//非切片额客户端连接
        private JedisPool jedisPool;//非切片连接池
        private ShardedJedis shardedJedis;//切片额客户端连接
        private ShardedJedisPool shardedJedisPool;//切片连接池
        private static String PASSWORD = null;
        private String ip ="127.0.0.1";
        private int port = 6397;

        public RedisUtil() 
        { 

            initialPool(); 
            initialShardedPool(); 
            shardedJedis = shardedJedisPool.getResource(); 
            jedis = jedisPool.getResource(); 


        } 

        /**
         * 初始化非切片池
         */
        private void initialPool() 
        { 
            // 池基本配置 
             JedisPoolConfig config = new JedisPoolConfig(); 
             config.setMaxActive(20); 
             config.setMaxIdle(5); 
             config.setMaxWait(1000l); 
             config.setTestOnBorrow(false); 

             //jedisPool = new JedisPool(config,"123.207.229.148",6379);
            config.setTestWhileIdle(true);
            config.setMinEvictableIdleTimeMillis(60000L);
            config.setNumTestsPerEvictionRun(1);
            config.setTimeBetweenEvictionRunsMillis(30000L);

            if(PASSWORD!=null){
                jedisPool = new JedisPool(config,ip,port,10000,PASSWORD);
            }else{
                jedisPool = new JedisPool(config,ip,port);
            }
        }

        private static RedisUtil Singleton = new RedisUtil();

        public  static RedisUtil getSingleton() {
            return Singleton;
        }

        private  Jedis getJedis() {
            if (jedisPool == null)
                initialPool();
            return jedisPool.getResource();
        }

        private  void returnJedis(Jedis jedis) {
            if (jedis != null)
                jedisPool.returnResource(jedis);
        }

         /**
         * 获取数据
         * 
         * @param key
         * @return
         */
        public  void setString(String key,String value){
            Jedis jedis = null;
            try {
                jedis = getJedis();
                value = jedis.set(key,value);
            } catch (Exception e) {
                //释放redis对象
                logger.info(""+e);
                returnJedis(jedis);
            } finally {
                //返还到连接池
                returnResource(jedisPool, jedis);
            }

        }

        /**
         * 获取数据
         * 
         * @param key
         * @return
         */
        public  void setObject(byte[] key,byte[] value){
            Jedis jedis = null;
            try {
                jedis = getJedis();
                jedis.set(key,value);
            } catch (Exception e) {
                //释放redis对象
                logger.info(""+e);
                returnJedis(jedis);
            } finally {
                //返还到连接池
                returnResource(jedisPool, jedis);
            }

        }

        /**
         * 获取数据
         * 
         * @param key
         * @return
         */
        public  String getString(String key){
            String value = null;

            Jedis jedis = null;
            try {
                jedis = getJedis();
                value = jedis.get(key);
            } catch (Exception e) {
                //释放redis对象
                logger.info(""+e);
                returnJedis(jedis);
            } finally {
                //返还到连接池
                returnResource(jedisPool, jedis);
            }

            return value;
        }


        /**
         * 获取数据
         * 
         * @param key
         * @return
         */
        public  Object getObject(byte[] key){
            byte[] value = null;

            Jedis jedis = null;
            try {
                jedis = getJedis();
                value = jedis.get(key);
                return SerializeUtil.unSerialize(value);
            } catch (Exception e) {
                //释放redis对象
                logger.info(""+e);
                returnJedis(jedis);
            } finally {
                //返还到连接池
                returnResource(jedisPool, jedis);
            }

            return value;
        }

        /** 
         * 初始化切片池 
         */ 
        private void initialShardedPool() 
        { 
            // 池基本配置 
            JedisPoolConfig config = new JedisPoolConfig(); 
            config.setMaxActive(20); 
            config.setMaxIdle(5); 
            config.setMaxWait(1000l); 
            config.setTestOnBorrow(false); 
            // slave链接 
            List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>(); 


                logger.info("ip="+ip+"----"+"port="+port);
                shards.add(new JedisShardInfo(ip,port, "master")); 

            // 构造池 

            shardedJedisPool = new ShardedJedisPool(config, shards); 

        } 

        /**
         * 返还到连接池
         * 
         * @param pool 
         * @param redis
         */
        public  void returnResource(JedisPool pool, Jedis redis) {
            if (redis != null) {
                pool.returnResourceObject(redis);
            }
        }

        public void show() {     

            jedisPool.returnResource(jedis);
            shardedJedisPool.returnResource(shardedJedis);

        } 

    }

序列化工具类

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SerializeUtil {
    private static final Logger logger = LoggerFactory.getLogger(SerializeUtil.class);
    public static byte[] serialize(Object object) {
        ObjectOutputStream oos = null;
        ByteArrayOutputStream baos = null;
        try {
        //序列化
        baos = new ByteArrayOutputStream();
        oos = new ObjectOutputStream(baos);
        oos.writeObject(object);
        byte[] bytes = baos.toByteArray();
        return bytes;
        } catch (Exception e) {
            logger.info("",e);
        }
        return null;
        }

        public static Object unSerialize(byte[] bytes) {
        ByteArrayInputStream bais = null;
        try {
        //反序列化
        bais = new ByteArrayInputStream(bytes);
        ObjectInputStream ois = new ObjectInputStream(bais);
        return ois.readObject();
        } catch (Exception e) {
           logger.info("",e);
        }
        return null;
        }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值