1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
| public class MybatisRedisCache implements Cache {
// 读写锁 private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock(true);
//这里使用了redis缓存,使用springboot自动注入 @Autowired private RedisTemplate<String, Object> redisTemplate;
private String id;
public MybatisRedisCache(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 key, Object value) { if (redisTemplate == null) { //由于启动期间注入失败,只能运行期间注入,这段代码可以删除 redisTemplate = (RedisTemplate<String, Object>) ApplicationContextRegister.getApplicationContext().getBean("RedisTemplate"); } if (value != null) { redisTemplate.opsForValue().set(key.toString(), value); } }
@Override public Object getObject(Object key) { try { if (key != null) { return redisTemplate.opsForValue().get(key.toString()); } } catch (Exception e) { log.error("缓存出错 "); } return null; }
@Override public Object removeObject(Object key) { if (key != null) { redisTemplate.delete(key.toString()); } return null; }
@Override public void clear() { log.debug("清空缓存"); if (redisTemplate == null) { redisTemplate = (RedisTemplate<String, Object>) ApplicationContextRegister.getApplicationContext().getBean("functionDomainRedisTemplate"); } Set<String> keys = redisTemplate.keys("*:" + this.id + "*"); if (!CollectionUtils.isEmpty(keys)) { redisTemplate.delete(keys); } }
@Override public int getSize() { Long size = redisTemplate.execute((RedisCallback<Long>) RedisServerCommands::dbSize); return size.intValue(); }
@Override public ReadWriteLock getReadWriteLock() { return this.readWriteLock; } }
|