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()); } }
相关推荐
3、自定义redis KEY生成器/CacheManager来管理redis缓存 4、分布式redis-session共享 5、springboot实现初始化加载配置(实现缓存预热)的两种方式 6、二级缓存联合使用 方式一:redis原生方法工具类(RedisService...
基于 SpringBoot 从0搭建一个企业级开发项目,基于SpringBoot 的项目,并集成MyBatis-Plus、Redis、Druid、Logback ,并使用 Redis 配置 MyBatis 二级缓存。
SpringMVC+Redis+MyBatis项目,主要实现Redis注释缓存
主要介绍了Mybatis-plus基于redis实现二级缓存过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
基于maven+springmvc+redis+mybatis整合案例框架,主要实现redis的读取案例
自定义缓存配置,整合第三方缓存redis,已测。。。。。。。。。。。。。。。。。。
基于SpringBoot+MyBatis+Redis+RabbitMQ 实现的秒杀系统 基于SpringBoot+MyBatis+Redis+RabbitMQ 实现的秒杀系统 基于SpringBoot+MyBatis+Redis+RabbitMQ 实现的秒杀系统 基于SpringBoot+MyBatis+Redis+RabbitMQ ...
redis做mybatis的缓存,可以直接拿来用
cas-client 基于redis自定义实现、为实现自定义功能修改。可能会有bug,具体为何修改。可基于我的4.1自定义文档。
mybatis二级缓存 + reads做第三级缓存
Redis开发基于redis实现高并发异步秒杀点评项目.zipRedis开发基于redis实现高并发异步秒杀点评项目.zipRedis开发基于redis实现高并发异步秒杀点评项目.zipRedis开发基于redis实现高并发异步秒杀点评项目.zipRedis...
基于springboot+mybatis redis构建的在线抽奖系统 基于springboot+mybatis redis构建的在线抽奖系统 基于springboot+mybatis redis构建的在线抽奖系统 基于springboot+mybatis redis构建的在线抽奖系统 基于...
springboot-redis-mybatis redis实现mybatis的二级缓存 springboot 2.0.1.RELEASE 关键点: 1.自己实现的二级缓存,必须要有一个带id的构造函数,否则会报错。...因为RedisCache并不是Spring容器里的
基于Redis方式实现分布式锁
Spring Boot 自定义属性 Spring Boot 开发、测试、生产环境选择 Spring Boot 结合MyBatis--MySQL数据库 Spring Boot 结合Thymeleaf Spring Boot 结合Redis Spring Boot Logback.日志 Spring Boot 拦截器
springboot整合redis集群和多索引库solr,同时将redis集群作mybatis的二级缓存源代码
springmvc整合Mybatis,Redis;实现将查询的数据进行二级缓存处理
基于SpringBoot+MyBatis+Redis+RabbitMQ实现的秒杀系统源码(高分毕设).zip 基于SpringBoot+MyBatis+Redis+RabbitMQ实现的秒杀系统源码(高分毕设).zip 基于SpringBoot+MyBatis+Redis+RabbitMQ实现的秒杀系统源码...
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.tar.gz Mybatis 整合 Redis 实现分布式缓存。