Spring+Redis+MyBatis实现缓存整合

        
        <dependency>
            <groupId>org.springframework.datagroupId>
            <artifactId>spring-data-redisartifactId>
            <version>1.8.5.RELEASEversion>
        dependency>
        <dependency>
            <groupId>org.apache.commonsgroupId>
            <artifactId>commons-pool2artifactId>
            <version>2.3version>
        dependency>
        <dependency>
            <groupId>redis.clientsgroupId>
            <artifactId>jedisartifactId>
            <version>2.9.0version>
        dependency>
    
    
    
    <cache:annotation-driven cache-manager="cacheManager"/>
    
    <bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">
        <property name="caches">
            <set>
                
                <bean class="com.common.cache.redis.RedisCache">
                    <property name="name" value="myCache"/>
                    <property name="redisTemplate" ref="redisTemplate"/>
                bean>
            set>
        property>
    bean>
    
    <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxIdle" value="${redis.maxIdle}"/>
        <property name="maxTotal" value="${redis.maxTotal}"/>
        <property name="testOnBorrow" value="${redis.testOnBorrow}"/>
    bean>
    
    <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
        <property name="hostName" value="${redis.host}"/>
        <property name="port" value="${redis.port}"/>
        <property name="password" value="${redis.pass}"/>
        <property name="poolConfig" ref="poolConfig"/>
        <property name="usePool" value="true"/>
    bean>
    
    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
        <property name="connectionFactory" ref="connectionFactory"/>
    bean>

/**
 * Cache adapter for Redis.
 */
public class RedisCache implements Cache {
    private RedisTemplate redisTemplate;
    private String name;

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

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

    @Override
    public String getName() {
        return this.name;
    }

    @Override
    public Object getNativeCache() {
        return this.redisTemplate;
    }

    /**
     * 从缓存中获取key
     */
    @Override
    public ValueWrapper get(Object key) {
        final String keyf = key.toString();
        Object object;
        object = redisTemplate.execute((RedisCallback) connection -> {
            byte[] key1 = keyf.getBytes();
            byte[] value = connection.get(key1);
            if (value == null) {
                return null;
            }
            return SerializationUtils.deserialize(value);
        });
        return (object != null ? new SimpleValueWrapper(object) : null);
    }

    /**
     * 将一个新的key保存到缓存中
     * 先拿到需要缓存key名称和对象,然后将其转成ByteArray
     */
    @Override
    public void put(Object key, Object value) {
        final String keyf = key.toString();
        final Object valuef = value;
        final long liveTime = 86400;
        redisTemplate.execute((RedisCallback) connection -> {
            byte[] keyb = keyf.getBytes();
            byte[] valueb = SerializationUtils.serialize(valuef);
            connection.set(keyb, valueb);
            if (liveTime > 0) {
                connection.expire(keyb, liveTime);
            }
            return 1L;
        });
    }


    /**
     * 删除key
     */
    @Override
    public void evict(Object key) {
        final String keyf = key.toString();
        redisTemplate.execute((RedisCallback) connection -> connection.del(keyf.getBytes()));
    }

    /**
     * 清空key
     */
    @Override
    public void clear() {
        redisTemplate.execute((RedisCallback) connection -> {
            connection.flushDb();
            return "ok";
        });
    }

    @Override
    public  T get(Object key, Class type) {
        return null;
    }

    @Override
    public  T get(Object o, Callable callable) {
        return null;
    }

    @Override
    public ValueWrapper putIfAbsent(Object key, Object value) {
        return null;
    }
}

    //在Service层写注解
    @Cacheable(value = "myCache", key = "getMethodName()")

你可能感兴趣的:(Spring+Redis+MyBatis实现缓存整合)