SSM一步一坑:Spring+Redis-Cluster部署Redis集群 @Cacheable注解

Spring+Redis集群部署方案

建议和我使用的版本相同,不然会出现各种各样的错误

spring-*:4.2.8    redis-data-redis:1.8.1    redis.clients:2.9.0  commons-pool2:2.4.3

加载的配置文件(部分)


		
			redis.clients
			jedis
			2.9.0
		
		
			org.springframework.data
			spring-data-redis
			1.8.1.RELEASE
		
		
			org.apache.commons
			commons-pool2
			2.4.3
		

redis-spring.xml 需要在web.xml中加载




    
   
        
            
                classpath:redis.properties
            
        
         
    


     
          
         
        
          
        
          
        
        
        
    
    

    
        
        
            
                
                    
                    
                
                
                    
                    
                
                
                    
                    
                
                
                    
                    
                
                
                    
                    
                
                
                    
                    
                
            
        
    

    
    
     
     
           
        
                
    
      
    
    
     
          
    
        
        
        
        
        
    
    
     
      
      
      
        
          
        
        
        
        
        
         
                
    
    
    
    
         
             
                
                  
                    
                       
                      
                                            
                 
                 
                
             
         
      
       
   
    
     

redis.properties


##########################
## redis缓存配置
##########################

# redis主机IP
redis.master.ip=127.0.0.1
# redis端口
redis.master.port=9001
# 密码
#redis.pass=123456

##########################
## redis连接池配置
##########################
# 最大空闲连接数
redis.pool.maxIdle=200
# 最大连接数
redis.pool.maxTotal=1024
# 获取链接最大等待毫秒
redis.pool.maxWaitMillis=1000
# 获取链接时检查有效性
redis.pool.testOnBorrow=true
redis.pool.testOnReturn=true

在redis-spring.xml 中加载的接口com.song.redis.RedisCache,使用的是的重写RedisTemple方法


package com.song.redis;

/**   
* Copyright: Copyright (c) 2019 LanRu-Caifu
* 
* @ClassName: RedisCache.java
* @Description: 该类的功能描述
*
* @version: v1.0.0
* @author: dongsong
* @date: 2019年7月12日 下午6:56:33 
*
* Modification History:
* Date         Author          Version            Description
*---------------------------------------------------------*
* 2019年7月12日     dongsong           v1.0.0               修改原因
*/


import java.io.Serializable;

import org.apache.commons.lang3.SerializationUtils;
import org.springframework.cache.Cache;
import org.springframework.cache.support.SimpleValueWrapper;
import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;

public class RedisCache implements Cache {

    private RedisTemplate redisTemplate;
    private String name;

    @Override
    public void clear() {
        System.out.println("-------緩存清理------");
        redisTemplate.execute(new RedisCallback() {
            @Override
            public String doInRedis(RedisConnection connection) throws DataAccessException {
                connection.flushDb();
                return "ok";
            }
        });
    }

    @Override
    public void evict(Object key) {
        System.out.println("-------緩存刪除------");
        final String keyf=key.toString();
        redisTemplate.execute(new RedisCallback() {
            @Override
            public Long doInRedis(RedisConnection connection) throws DataAccessException {
                return connection.del(keyf.getBytes());
            }
            
        });

    }

    @Override
    public ValueWrapper get(Object key) {
        System.out.println("------缓存获取-------"+key.toString());
        final String keyf = key.toString();
        Object object = null;
        object = redisTemplate.execute(new RedisCallback() {
            @Override
            public Object doInRedis(RedisConnection connection) throws DataAccessException {
                byte[] key = keyf.getBytes();
                byte[] value = connection.get(key);
                if (value == null) {
                    System.out.println("------缓存不存在-------");
                    return null;
                }
                return SerializationUtils.deserialize(value);
            }
        });
        ValueWrapper obj=(object != null ? new SimpleValueWrapper(object) : null);
        System.out.println("------获取到内容-------"+obj);
        return  obj;
    }

    @Override
    public void put(Object key, Object value) {
        System.out.println("-------加入缓存------");
        System.out.println("key----:"+key);
        System.out.println("key----:"+value);
        final String keyString = key.toString();
        final Object valuef = value;
        final long liveTime = 86400;
        redisTemplate.execute(new RedisCallback() {
            @Override
            public Long doInRedis(RedisConnection connection) throws DataAccessException {
                byte[] keyb = keyString.getBytes();
                byte[] valueb = SerializationUtils.serialize((Serializable) valuef);
                connection.set(keyb, valueb);
                if (liveTime > 0) {
                    connection.expire(keyb, liveTime);
                }
                return 1L;
            }
        });

    }
    
    @Override
    public  T get(Object arg0, Class arg1) {
        // TODO Auto-generated method stub
        return null;
    }
    
    @Override
    public String getName() {
        return this.name;
    }

    @Override
    public Object getNativeCache() {
        return this.redisTemplate;
    }
    
    @Override
    public ValueWrapper putIfAbsent(Object arg0, Object arg1) {
        // TODO Auto-generated method stub
        return null;
    }

    public RedisTemplate getRedisTemplate() {
        return redisTemplate;
    }

    public void setRedisTemplate(RedisTemplate redisTemplate) {
        this.redisTemplate = redisTemplate;
    }

    public void setName(String name) {
        this.name = name;
    }
}

使用方法:

在你需要将数据加入redis的方法上加上@Cacheable(CacheNames=“content”,key=“‘***’”)其中在使用的key必须符合EL/spEL规则。另cacheNames中的值已在redis-spring.xml中配置好。

例子

@Override
	@Cacheable(cacheNames="content",key="'adminlog'")
	public List selectall() {
		// TODO Auto-generated method stub
		return adminlogmapper.selectlist();
	}

 

你可能感兴趣的:(SSM之一步一坑)