`

基于redison 实现mybatis的自定义cache

阅读更多
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;

import org.apache.ibatis.cache.Cache;
import org.redisson.RedissonClient;
import org.redisson.core.RBucket;
import org.redisson.core.RSet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.yijiupi.himalaya.order.Constants;
/**
 * *******************************************
 * ClassName: MybatisRedisCache
 * 
 * @Description: Mybatis 基于redis 的缓存
 * 
 * @author 章英杰
 * @date 2016年5月10日
 * 
 ********************************************
 */
public class MybatisRedisCache implements Cache{
	private Logger logger=LoggerFactory.getLogger(getClass());
	private RedissonClient redissonClient;
	private String id;
	private RSet<String> keys;
	
    public MybatisRedisCache(final String id) {      
        if (id == null) {    
            throw new IllegalArgumentException("Cache instances require an ID");    
        }    
        this.id = id;   
        logger.info("redis>>>>MybatisRedisCache:id="+this.id);  
        
        if(null==redissonClient){
        	redissonClient=AppConfig.getBean(RedissonClient.class);
        }
        keys=redissonClient.getSet(Constants.MYBATIS_CACHE_ID+ id);
    }      

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

	@Override
	public void putObject(Object key, Object value) {
		RBucket<Object> obj= redissonClient.getBucket(key.toString());
		
		obj.set(value, Constants.MYBATIS_CACHE_TIME_TO_LIVE, Constants.MYBATIS_CACHE_TIME_UNIT);
		if(!keys.contains(key.toString())){
			keys.add(key.toString());
		}
	}

	@Override
	public Object getObject(Object key) {
		RBucket<Object> obj= redissonClient.getBucket(key.toString());
		return obj.get();
	}

	@Override
	public Object removeObject(Object key) {
		RBucket<Object> obj= redissonClient.getBucket(key.toString());
		Boolean flag=false;
		if(obj.delete()){
			flag=keys.remove(key.toString());
		}
		return flag;
	}

	@Override
	public void clear() {
		for(String key:keys){  
			 RBucket<Object> obj= redissonClient.getBucket(key.toString());  
			 obj.delete();
        }
		keys.clear();
	}

	@Override
	public int getSize() {
		return keys.size();
	}

	@Override
	public ReadWriteLock getReadWriteLock() {
		return redissonClient.getReadWriteLock(getId());
	}

}

 

分享到:
评论

相关推荐

    springboot整合redis、mybatis以及redis和mybatis的联合使用

    3、自定义redis KEY生成器/CacheManager来管理redis缓存 4、分布式redis-session共享 5、springboot实现初始化加载配置(实现缓存预热)的两种方式 6、二级缓存联合使用 方式一:redis原生方法工具类(RedisService...

    从0到1项目搭建-集成 Redis 配置MyBatis二级缓存

    基于 SpringBoot 从0搭建一个企业级开发项目,基于SpringBoot 的项目,并集成MyBatis-Plus、Redis、Druid、Logback ,并使用 Redis 配置 MyBatis 二级缓存。

    基于mybatis自定义缓存配置Redis

    通过以上步骤,我们就成功地将Redis集成到MyBatis的自定义缓存中,实现了高效的数据库查询缓存。这不仅可以显著提高系统的响应速度,还能降低数据库的压力,提升整体性能。当然,实际应用中可能还需要考虑分布式环境...

    Mybatis-plus基于redis实现二级缓存过程解析

    public class MybatisRedisCache implements Cache { // 读写锁 private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock(true); // 使用springboot自动注入RedisTemplate @Autowired ...

    springMybatis+redis三级缓存框架

    首先,MyBatis作为一款轻量级的持久层框架,其核心特性之一就是支持自定义的SQL查询。MyBatis的二级缓存机制允许我们将执行过的SQL查询结果存储在内存中,以供后续相同的查询直接使用,从而避免了重复的数据库访问。...

    maven+springmvc+redis+mybatis整合

    本项目以“maven+springmvc+redis+mybatis整合”为主题,旨在提供一个基于这些技术的集成框架,特别强调了利用Redis作为缓存来提升应用性能。下面将详细阐述这个框架中的各个组成部分以及它们之间的协作。 首先,...

    redis-cache-mybatis

    本项目"redis-cache-mybatis"正是为了实现这一目的,提供了一个可以直接使用的Redis缓存解决方案。 在MyBatis中,Redis缓存主要涉及以下几个核心概念: 1. **配置Redis**:首先,我们需要在应用的配置文件中添加...

    基于SpringBoot+MyBatis+Redis+RabbitMQ 实现的秒杀系统.zip

    基于SpringBoot+MyBatis+Redis+RabbitMQ 实现的秒杀系统 基于SpringBoot+MyBatis+Redis+RabbitMQ 实现的秒杀系统 基于SpringBoot+MyBatis+Redis+RabbitMQ 实现的秒杀系统 基于SpringBoot+MyBatis+Redis+RabbitMQ ...

    mybatis+redis缓存配置

    3. **实现自定义缓存类**:需要创建一个自定义的缓存类,该类实现`org.apache.ibatis.cache.Cache`接口,例如`com.example.RedisCache`。 - 在自定义的缓存类中,实现基本的缓存操作方法,如`getId()`、`putObject...

    Springboot+redis+mybatisplus实例

    在IT行业中,Spring Boot、Redis和MyBatis-Plus是三个非常重要的技术组件,它们各自在不同的领域发挥着关键作用。下面将详细讲解这三个技术及其整合应用。 **Spring Boot** Spring Boot是由Pivotal团队提供的全新...

    基于Spring Boo+Mybatis+Redis+RabbitMQ设计的高并发电商秒杀系统

    基于Spring Boo+Mybatis+Redis+RabbitMQ设计的高并发电商秒杀系统基于Spring Boo+Mybatis+Redis+RabbitMQ设计的高并发电商秒杀系统基于Spring Boo+Mybatis+Redis+RabbitMQ设计的高并发电商秒杀系统基于Spring Boo+...

    基于springboot+mybatis redis构建的在线抽奖系统.zip

    基于springboot+mybatis redis构建的在线抽奖系统 基于springboot+mybatis redis构建的在线抽奖系统 基于springboot+mybatis redis构建的在线抽奖系统 基于springboot+mybatis redis构建的在线抽奖系统 基于...

    springboot-redis-mybatis:redis实现mybatis的二级缓存

    springboot-redis-mybatis redis实现mybatis的二级缓存 springboot 2.0.1.RELEASE 关键点: 1.自己实现的二级缓存,必须要有一个带id的构造函数,否则会报错。...因为RedisCache并不是Spring容器里的

    cas-client 基于redis自定义实现

    在这个"cas-client 基于redis自定义实现"项目中,开发者针对CAS客户端进行了定制化改造,以满足特定的功能需求。下面我们将深入探讨这个自定义实现的关键知识点。 首先,CAS客户端(cas-client)是CAS服务器与应用...

    Spring Boot 结合MyBatis、Redis、Thymeleaf、自定义属性

    Spring Boot 自定义属性 Spring Boot 开发、测试、生产环境选择 Spring Boot 结合MyBatis--MySQL数据库 Spring Boot 结合Thymeleaf Spring Boot 结合Redis Spring Boot Logback.日志 Spring Boot 拦截器

    基于SpringBoot+MyBatis+Redis+RabbitMQ实现的秒杀系统源码(高分毕设).zip

    基于SpringBoot+MyBatis+Redis+RabbitMQ实现的秒杀系统源码(高分毕设).zip 基于SpringBoot+MyBatis+Redis+RabbitMQ实现的秒杀系统源码(高分毕设).zip 基于SpringBoot+MyBatis+Redis+RabbitMQ实现的秒杀系统源码...

    redis-cache-mybatis-redis-1.0.0-beta2.zip

    redis-cache-mybatis-redis-1.0.0-beta1.zip redis-cache-mybatis-redis-1.0.0-beta1.tar.gz Mybatis 整合 Redis 实现分布式缓存。

    redis-cache-mybatis-redis-1.0.0-beta1.zip

    redis-cache-mybatis-redis-1.0.0-beta1.zip redis-cache-mybatis-redis-1.0.0-beta1.tar.gz Mybatis 整合 Redis 实现分布式缓存。

    基于SpringBoot + MyBatis + Redis的图像素材管理系统.zip

    基于SpringBoot + MyBatis + Redis的图像素材管理系统 基于SpringBoot + MyBatis + Redis的图像素材管理系统 基于SpringBoot + MyBatis + Redis的图像素材管理系统 基于SpringBoot + MyBatis + Redis的图像素材管理...

    基于springboot+mybatis redis构建的在线抽奖系统源码.zip

    1、基于springboot+mybatis redis构建的在线抽奖系统源码.zip 2、该资源包括项目的全部源码,下载可以直接使用! 3、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料...

Global site tag (gtag.js) - Google Analytics