mybatis整合redies,使用redis作为二级缓存

方法一

(一)、RedisCache(mybatis二级缓存实现类)

/**
 * Created by hhjian on 17-6-27.
 */
public class RedisCache implements Cache {

    private static final Logger logger = LoggerFactory.getLogger(RedisCache.class);

    private static JedisConnectionFactory jedisConnectionFactory;

    private final String id;

    private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock();

    public RedisCache(final String id) {
        if (id == null) {
            throw new IllegalArgumentException("Cache instances require an ID");
        }
        this.id = id;
    }

    @Override
    public String getId() {
        return this.id;
    }

    @Override
    public void putObject(Object o, Object o1) {
        RedisConnection connection = jedisConnectionFactory.getConnection();
        connection.set(serializer(o), serializer(o1));
        connection.close();
    }

    @Override
    public Object getObject(Object key) {
        RedisConnection connection = jedisConnectionFactory.getConnection();
        Object object = deSerializer(connection.get(serializer(key)));
        connection.close();
        return object;
    }

    @Override
    public Object removeObject(Object o) {
        RedisConnection connection = jedisConnectionFactory.getConnection();
        Object object = connection.expire(serializer(o), 0);
        return object;
    }

    @Override
    public void clear() {
        RedisConnection connection = jedisConnectionFactory.getConnection();
        connection.flushDb();
        connection.flushAll();
        connection.close();
    }

    @Override
    public int getSize() {
        RedisConnection connection = jedisConnectionFactory.getConnection();
        int size = Integer.valueOf(connection.dbSize().toString());
        connection.close();
        return size;
    }

    @Override
    public ReadWriteLock getReadWriteLock() {
        return this.readWriteLock;
    }

    public static void setJedisConnectionFactory(JedisConnectionFactory jedisConnectionFactory) {
        RedisCache.jedisConnectionFactory = jedisConnectionFactory;
    }

    private byte[] serializer(Object arg) {
        RedisSerializer<Object> serializer = new JdkSerializationRedisSerializer();
        return serializer.serialize(arg);
    }

    private Object deSerializer(byte[] arg) {
        RedisSerializer<Object> serializer = new JdkSerializationRedisSerializer();
        return serializer.deserialize(arg);
    }
}

(二)、静态注入 jedisConnectionFactory

<bean id="redisCache" class="com.linkworld.dao.RedisCacheTransfer">
    <property name="jedisConnectionFactory" ref="jedisConnectionFactory"/>
</bean>

/**
 * Created by hhjian on 17-6-27.
 */
public class RedisCacheTransfer {

    @Autowired
    public void setJedisConnectionFactory(JedisConnectionFactory jedisConnectionFactory) {
        RedisCache.setJedisConnectionFactory(jedisConnectionFactory);
    }
}

(三)、开启缓存

<setting name="cacheEnabled" value="true"/>
<cache type="com.linkworld.dao.RedisCache" eviction="FIFO" readOnly="true" />

方法二 官方文档方法

mybatis-redis

<dependencies>
  ...
  <dependency>
    <groupId>org.mybatis.caches</groupId>
    <artifactId>mybatis-redis</artifactId>
    <version>1.0.0-beta2</version>
  </dependency>
  ...
</dependencies>

then, just configure it in the mapper XML

<mapper namespace="org.acme.FooMapper">
  <cache type="org.mybatis.caches.redis.RedisCache" />
  ...
</mapper>

转载于:https://my.oschina.net/hhjian/blog/1036953

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值