spring 4.0.3 整合spring-data-redis jedis

近来项目需要redis作为缓存系统,爬了好多坑,特此纪念

首先  pom.xml




    org.springframework.data
    spring-data-redis
    1.4.2.RELEASE



    redis.clients
    jedis
    2.6.2

spring-redis.xml



    
    

    
    
    
    
        
        
        
        
    
    
    
        
        
        
        
    
    
    
        
        
        
            
        
        
            
        
    

config.properties


#redis绑定的主机地址
redis.host=127.0.0.1
#redis监听端口,默认6379
redis.port=6379
#redis授权密码
redis.pass=
#最大空闲数,空闲链接数大于maxIdle时,将进行回收
redis.maxIdle=100
#最大连接数,能够同时建立的“最大链接个数”
redis.maxActive=300
#最大等待时间:单位ms
redis.maxWait=1000
#使用连接时,检测连接是否成功
redis.testOnBorrow=true
#当客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
redis.timeout=10000

RedisUtil.java

只做了简单的方法  string和list

public class RedisUtil {
    //https://blog.csdn.net/javaxiaibai0414/article/details/88666453
    private static RedisUtil redisUtil = new RedisUtil();
    private static RedisTemplate client = null;			//连接池自动管理,提供了一个高度封装的“RedisTemplate”类
    private static synchronized RedisTemplate getRedisUtil() {
        if(client == null){
            client = SpringContextHolder.getBean("redisTemplate");
        }
        return client;
    }

    private RedisUtil() {}
    /**
     * 获取唯一实例.
     * @return
     */
    public static RedisUtil getInstance() {
        if(redisUtil == null){
            synchronized (RedisUtil.class) {
                redisUtil = new RedisUtil();
            }
        }
        return redisUtil;
    }


    //-------------------------------------------------
    //------------------通用操作工具方法----------------
    /**
     * 指定缓存失效时间
     * @param key
     * @param time 时间 秒
     * @return
     */
    public boolean expire(String key,long time){
        try{
            if(time>0){
                getRedisUtil().expire(key,time,TimeUnit.SECONDS);
            }
            return true;
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 根据key返回过期时间
     * @param key 不能为null
     * @return 时间  秒 0代表永久有效
     */
    public long getExpire(String key){
        return getRedisUtil().getExpire(key);
    }

    /**
     * 判断key是否存在
     * @param key
     * @return
     */
    public boolean hasKey(String key){
        try{
            return getRedisUtil().hasKey(key);
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 删除缓存
     * @param key 可以穿一个值或多个
     */
    @SuppressWarnings("unchecked")
    public void del(String ... key){
        if(key!=null&&key.length>0){
            if (key.length ==1) {
                getRedisUtil().delete(key[0]);
            }else {
                getRedisUtil().delete(CollectionUtils.arrayToList(key));
            }
        }
    }


    //-------------------------------------------------
    //------------------String类型相关操作方法----------


    /**
     * 获取缓存
     * @param key
     * @return
     */
    public Object get(String key) {
        return key==null?null:getRedisUtil().opsForValue().get(key);
    }

    /**
     * 设置缓存  不设置过期时间(默认永久有效)
     * @param key
     * @param value
     * @return T成功 F失败
     */
    public boolean set(String key ,String value) {
        try{
            getRedisUtil().opsForValue().set(key,value);
            return true;
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 设置缓存并设置过期时间 --一般用于token
     * @param key
     * @param value
     * @param time time要大于0 反之则设置为无限期
     * @return
     */
    public boolean set(String key,String value,long time){
        try {
            if (time>0){
                getRedisUtil().opsForValue().set(key,value,time,TimeUnit.SECONDS);
            }else {
                set(key,value);
            }

            return true;
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 递增
     * @param key
     * @param delta
     * @return
     */
    public long incr(String key,long delta){
        if(delta<0){
            throw new RuntimeException("递增因子必须大于0");
        }
        return getRedisUtil().opsForValue().increment(key,delta);
    }

    /**
     * 递减
     * @param key
     * @param delta
     * @return
     */
    public long decr(String key,long delta){
        if(delta<0){
            throw new RuntimeException("递增因子必须大于0");
        }
        return getRedisUtil().opsForValue().increment(key,-delta);
    }

    //-------------------------------------------------
    //------------------LIST类型相关操作方法------------


    /**
     * 获取list缓存的内容
     * @param key
     * @param start 开始
     * @param end 结束 0到-1代表返回所有
     * @return
     */
    public List lGet(String key,long start,long end){
        try{
            return getRedisUtil().opsForList().range(key,start,end);
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 获取list缓存的长度
     * @param key
     * @return
     */
    public long lGetListSize(String key){
        try {
            return getRedisUtil().opsForList().size(key);
        }catch (Exception e){
            e.printStackTrace();
            return 0;
        }
    }

    /**
     * 通过索引 获取list中的值
     * @param key 键
     * @param index 索引  index>=0时, 0 表头,1 第二个元素,依次类推;index<0时,-1,表尾,-2倒数第二个元素,依次类推
     * @return
     */
    public Object lGetIndex(String key,long index){
        try {
            return getRedisUtil().opsForList().index(key,index);
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }
    /**
     * 将list放入缓存  永久有效
     * @param key
     * @param value
     * @return
     */
    public boolean lSet(String key, Object value){
        try {
            getRedisUtil().opsForList().rightPush(key,value);
            return true;
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 将list放入缓存并设置过期时间
     * @param key
     * @param value
     * @param time
     * @return
     */
    public boolean lSet(String key, Object value ,long time){
        try {
            getRedisUtil().opsForList().rightPush(key,value);
            if (time>0){
                expire(key,time);
            }
            return true;
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }
    }


    /**
     * 将list放入缓存  永久有效
     * @param key
     * @param value
     * @return
     */
    public boolean lSet(String key, List value){
        try {
            getRedisUtil().opsForList().rightPushAll(key,value);
            return true;
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 将list放入缓存并设置过期时间
     * @param key
     * @param value
     * @param time
     * @return
     */
    public boolean lSet(String key, List value ,long time){
        try {
            getRedisUtil().opsForList().rightPushAll(key,value);
            if (time>0){
                expire(key,time);
            }
            return true;
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }
    }



} 
  

后记:一定要注意spring-data-redis 和 jedis的版本(这里使用的spring-data-redis 1.4.2和jedis 2.62),这俩货的版本要求太严格了,我项目还是使用spring4 ,本来想升级5结果错误太多放弃了,升级spring5后应该版本问题会好很多

感谢:https://www.cnblogs.com/hjwublog/p/5749929.html

你可能感兴趣的:(redis)