Redis与mybatis,shiro,spring session整合
来源:互联网 发布:香港御可贡茶加盟 知乎 编辑:程序博客网 时间:2024/05/29 14:13
配置Redis配置类
@Component
@Configuration
@EnableCaching
public class RedisConfig {
@Bean
public JedisConnectionFactory jedisConnectionFactory(){ JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(); jedisConnectionFactory.setHostName("172.16.142.144"); jedisConnectionFactory.setPort(7000); jedisConnectionFactory.setPassword("填自己的redis密码"); jedisConnectionFactory.afterPropertiesSet(); return jedisConnectionFactory;}@Beanpublic RedisTemplate<String,String> redisTemplate(){ RedisTemplate<String,String> redisTemplate = new RedisTemplate<String, String>(); redisTemplate.setConnectionFactory(jedisConnectionFactory()); redisTemplate.afterPropertiesSet(); return redisTemplate;}@Beanpublic CacheManager cacheManager(RedisTemplate redisTemplate){ return new RedisCacheManager(redisTemplate);}
}
ApplicationContextHolder用于获取spring容器中的bean
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class ApplicationContextHolder implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Overridepublic void setApplicationContext(ApplicationContext ctx) throws BeansException { applicationContext = ctx;}/** * Get application context from everywhere * * @return */public static ApplicationContext getApplicationContext() { return applicationContext;}/** * Get bean by class * * @param clazz * @param <T> * @return */public static <T> T getBean(Class<T> clazz) { return applicationContext.getBean(clazz);}/** * Get bean by class name * * @param name * @param <T> * @return */@SuppressWarnings("unchecked")public static <T> T getBean(String name) { return (T) applicationContext.getBean(name);}
}
实现mybatis的Cache接口
package com.baizhi.utils;
import org.apache.ibatis.cache.Cache;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class RedisCache implements Cache {
private static final Logger logger = LoggerFactory.getLogger(RedisCache.class);
private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock();private final String id; // cache instance idprivate RedisTemplate redisTemplate;private static final long EXPIRE_TIME_IN_MINUTES = 30; // redis过期时间public RedisCache(String id) { if (id == null) { throw new IllegalArgumentException("Cache instances require an ID"); } this.id = id;}@Overridepublic String getId() { return id;}/** * Put query result to redis * * @param key * @param value */@Override@SuppressWarnings("unchecked")public void putObject(Object key, Object value) { redisTemplate = getRedisTemplate(); ValueOperations opsForValue = redisTemplate.opsForValue(); opsForValue.set(key, value, EXPIRE_TIME_IN_MINUTES, TimeUnit.MINUTES); logger.debug("Put query result to redis");}/** * Get cached query result from redis * * @param key * @return */@Overridepublic Object getObject(Object key) { redisTemplate = getRedisTemplate(); ValueOperations opsForValue = redisTemplate.opsForValue(); logger.debug("Get cached query result from redis"); return opsForValue.get(key);}/** * Remove cached query result from redis * * @param key * @return */@Override@SuppressWarnings("unchecked")public Object removeObject(Object key) { redisTemplate = getRedisTemplate(); redisTemplate.delete(key); logger.debug("Remove cached query result from redis"); return null;}/** * Clears this cache instance */@Overridepublic void clear() { redisTemplate = getRedisTemplate(); redisTemplate.execute((RedisCallback) connection -> { connection.flushDb(); return null; }); logger.debug("Clear all the cached query result from redis");}/** * This method is not used * * @return */@Overridepublic int getSize() { return (int)redisTemplate.execute((RedisCallback) connection -> connection.dbSize().intValue());}@Overridepublic ReadWriteLock getReadWriteLock() { return readWriteLock;}private RedisTemplate getRedisTemplate() { if (redisTemplate == null) { redisTemplate = ApplicationContextHolder.getBean("redisTemplate"); } return redisTemplate;}
}
在Mapper中开启缓存
实现shiro的Cache接口
package com.baizhi.utils;
import org.apache.shiro.cache.Cache;
import org.apache.shiro.cache.CacheException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Set;
/**
- Created by fankaixiang on 2017/7/10.
*/
public class ShiroCache implements Cache{
private static final Logger logger = LoggerFactory.getLogger(RedisCache.class);
private RedisTemplate redisTemplate;private RedisTemplate getRedisTemplate() { if (redisTemplate == null) { redisTemplate = ApplicationContextHolder.getBean("redisTemplate"); } return redisTemplate;}@Overridepublic Object get(Object key) throws CacheException { redisTemplate = getRedisTemplate(); ValueOperations opsForValue = redisTemplate.opsForValue(); logger.debug("Shiro get cached query result from redis"); return opsForValue.get(key);}@Overridepublic Object put(Object key, Object value) throws CacheException { redisTemplate = getRedisTemplate(); ValueOperations opsForValue = redisTemplate.opsForValue(); opsForValue.set(key, value); logger.debug("Shiro Put query result to redis"); return value;}@Overridepublic Object remove(Object key) throws CacheException { redisTemplate = getRedisTemplate(); ValueOperations opsForValue = redisTemplate.opsForValue(); Object value = opsForValue.get(key); redisTemplate.delete(key); logger.debug("Shiro,remove cached query result from redis"); return value;}@Overridepublic void clear() throws CacheException { redisTemplate = getRedisTemplate(); redisTemplate.execute((RedisCallback) connection -> { connection.flushDb(); return null; }); logger.debug("Clear all the cached from shiro");}@Overridepublic int size() { redisTemplate = getRedisTemplate(); return (int)redisTemplate.execute((RedisCallback) connection -> connection.dbSize().intValue());}@Overridepublic Set keys() { redisTemplate = getRedisTemplate(); return redisTemplate.keys("*");}@Overridepublic Collection values() { redisTemplate = getRedisTemplate(); Set set = redisTemplate.keys("*"); List list = new ArrayList(); for (Object key : set) { list.add(get(key)); } return list;}
}
实现Shiro的CacheManager
package com.baizhi.utils;
import org.apache.shiro.cache.Cache;
import org.apache.shiro.cache.CacheException;
import org.apache.shiro.cache.CacheManager;
import org.springframework.stereotype.Component;
/**
- Created by fankaixiang on 2017/7/10.
*/
@Component
public class RedisShiroCacheManager implements CacheManager {
@Override
public <K, V> Cache<K, V> getCache(String name) throws CacheException { return new ShiroCache();}
}
在spring配置文件中配置
- Redis与mybatis,shiro,spring session整合
- spring boot整合redis实现shiro的分布式session共享
- Spring mvc + MyBatis 整合Shiro
- spring boot shiro redis整合
- Spring与Shiro整合
- Shiro与Spring整合
- shiro与spring整合
- redis mybatis spring整合
- 【Spring shiro】Spring与Shiro的整合
- shiro +spring + spring mvc+ mybatis整合
- shiro +spring + spring mvc+ mybatis整合
- Shiro入门-shiro与spring整合
- spring与shiro整合步骤
- Shiro 与 Spring框架整合
- 与spring整合shiro框架
- 笔记:shiro与spring整合
- Spring与Shiro的整合
- shiro与spring的整合
- 关于HttpClient的应用
- 判断一个数的奇偶性
- npm使用淘宝镜像加速以及使用cnpm
- 《算法导论》第一章-第1节_练习(参考答案)
- jdk环境变量设置不成功怎么办
- Redis与mybatis,shiro,spring session整合
- yum本地源配置
- 第139课: Spark面试经典系列之数据倾斜解决之对于两个RDD数据量都很大且倾斜的Key特别多如何解决?
- halcon学习之常用数组操作算子
- leveldb(四):Cache
- 安卓之手势检测
- 单例
- 线段树优化连边,Dijkstra(In Touch,HDU 5361)
- 1 Two sum