ssm Redis 缓存首页热门数据

网站首页展示的数据不需要每次向数据库读取

开始前请引入spring redis依赖


配置文件

<!-- 配置JedisPoolConfig实例 -->
	<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
		<property name="maxIdle" value="${redis.maxIdle}" />
		<property name="maxTotal" value="${redis.maxActive}" />
		<property name="maxWaitMillis" value="${redis.maxWait}" />
		<property name="testOnBorrow" value="${redis.testOnBorrow}" />
	</bean>


	<!-- 配置JedisConnectionFactory -->
	<bean id="jedisConnectionFactory"
		class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
		<property name="hostName" value="${redis.host}" />
		<property name="port" value="${redis.port}" />
		<!-- <property name="password" value="${redis.pass}" /> -->
		<property name="database" value="${redis.dbIndex}" />
		<property name="poolConfig" ref="poolConfig" />
	</bean>


	<!-- 配置RedisTemplate -->
	<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"> 
		<property name="connectionFactory" ref="jedisConnectionFactory" /> </bean>
	<bean id="stringRedisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">
		<property name="connectionFactory" ref="jedisConnectionFactory" />
	</bean>
	<!-- 配置RedisCacheManager -->
	<bean id="redisCacheManager" class="org.springframework.data.redis.cache.RedisCacheManager">
		<constructor-arg name="redisOperations" ref="redisTemplate" />
		<property name="defaultExpiration" value="${redis.expiration}" />
	</bean>


	<!-- 配置RedisCacheConfig -->
	<bean id="redisCacheConfig" class="com.creator.redis.RedisCacheConfig">
		<constructor-arg ref="jedisConnectionFactory" />
		<constructor-arg ref="redisTemplate" />
		<constructor-arg ref="redisCacheManager" />
	</bean>
	</bean>

上面的RedisCacheConfig是用来缓存的,它会按照指定的序列化方式生成key,value。这里采用默认的jdk序列化,,就是想要查数据的时候不方便看,像这样


缓存对象需要实现Serializable接口


RedisCacheConfig

@Configuration
@EnableCaching
public class RedisCacheConfig extends CachingConfigurerSupport {

        private volatile JedisConnectionFactory mJedisConnectionFactory;
        private volatile RedisTemplate<String, String> mRedisTemplate;
        private volatile RedisCacheManager mRedisCacheManager;

        public RedisCacheConfig() {
            super();
        }

        public RedisCacheConfig(JedisConnectionFactory mJedisConnectionFactory, RedisTemplate<String, String> mRedisTemplate, RedisCacheManager mRedisCacheManager) {
            super();
            this.mJedisConnectionFactory = mJedisConnectionFactory;
            this.mRedisTemplate = mRedisTemplate;
            this.mRedisCacheManager = mRedisCacheManager;
        }

        public JedisConnectionFactory redisConnectionFactory() {
            return mJedisConnectionFactory;
        }

        public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory cf) {
            return mRedisTemplate;
        }

        public CacheManager cacheManager(RedisTemplate<?, ?> redisTemplate) {
            return mRedisCacheManager;
        }

        
        
        @Bean
        public KeyGenerator keyGenerator() {
            return new KeyGenerator() {
                public Object generate(Object target, Method method,
                        Object... params) {
                    //规定  本类名+方法名+参数名 为key
                    StringBuilder sb = new StringBuilder();
                    sb.append(target.getClass().getName()+"_");
                    sb.append(method.getName()+"_");
                    for (Object obj : params) {
                        sb.append(obj.toString()+",");
                    }
                    return sb.toString();
                }
            };
        }
        
}

# Redis settings  
redis.host=127.0.0.1
redis.port=6379
#redis.pass=password
redis.dbIndex=0
redis.expiration=3000
redis.maxIdle=300
redis.maxActive=600
redis.maxWait=1000
redis.testOnBorrow=true

数据存好。


创建controller。


service,测试是否起到缓存作用。


访问。

访问成功,第一次访问进入service,


第二次访问,直接读取redis数据库内容


猜你喜欢

转载自blog.csdn.net/qq_33683097/article/details/80710455