数据缓存---Spring Redis Cache 缓存

数据缓存是数据处理里面重要的一环,尤其针对大量查询的时候,缓存是必不可少的步骤,能够极大的提高性能。缓存的方案有很多种,这里一起来试试Redis. Redis是何方圣神,不多说了,哈哈,后面再专门出一个Redis的,很久就想体验一把。

1.Redis安装运行

wget http://download.redis.io/releases/redis-3.0.6.tar.gz 

tar zxf redis-3.0.6.tar.gz 

cd redis-3.0.6

make PREFIX=/usr/local/redis install     (如果出错,看看是不是gcc没有,yum gcc install)

cp src/redis.conf /usr/local/redis/bin       (copy redis.conf 配置文件)

cd /usr/local/redis/bin

./redis-server redis.conf >log.txt &           (后台启动redis server)

2. Spring 中配置缓存

pom.xml文件添加依赖:

<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.5.0.RELEASE</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.6.2</version>
</dependency>

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc" 
xmlns:task="http://www.springframework.org/schema/task"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:cache="http://www.springframework.org/schema/cache"
xsi:schemaLocation="
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd 
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd">

<!-- Imports user-defined @Controller beans that process client requests -->
<beans:import resource="controllers.xml" />
<task:annotation-driven />
<mvc:annotation-driven />

        <context:component-scan base-package="com.rabbit.service" /> 
        <context:annotation-config/>
         <cache:annotation-driven/>


</beans:beans>

Redis的配置(当然我这里是写死了配置,应该放在配置文件中)

@Configuration  
@EnableCaching  
public class RedisConfig extends CachingConfigurerSupport{  
@Bean  
    public JedisConnectionFactory redisConnectionFactory() {  
        JedisConnectionFactory redisConnectionFactory = new JedisConnectionFactory();  
  
        // Defaults  
        redisConnectionFactory.setHostName("192.168.6.131");  
        redisConnectionFactory.setPort(6379);  
        return redisConnectionFactory;  
    }  
  
    @Bean  
    public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory cf) {  
        RedisTemplate<String, String> redisTemplate = new RedisTemplate<String, String>();  
        redisTemplate.setConnectionFactory(cf);  
        return redisTemplate;  
    }  
  
    @Bean  
    public CacheManager cacheManager(RedisTemplate redisTemplate) {  
        RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);  
  
        // Number of seconds before expiration. Defaults to unlimited (0)  
        cacheManager.setDefaultExpiration(30000); // Sets the default expire time (in seconds)  
        return cacheManager;  
    }  
}

在业务代码里面怎么使用缓存呢?

@Service

public class UserManager {
@Autowired
private UserDao userDao;

public User getUser(Integer id) {
return userDao.getUser(id);
}

@Cacheable(value = "allusercache")
public List<User> getAllUser() {
return userDao.getAllUser();
}

}

3.注意事项

这里面很多是注释的,相信很容易明白的,其他更复杂的用法,什么CRUD操作的时候需要更新缓存,可以使用相应的注释。

有几个坑,不然会虽然配置了,但是缓存不起作用。这里记下备忘:

1.   配置文件的namespace之类的,虽然很简单,还是容易出错

2.  扫描哪些包,不注意容易出错   <context:component-scan base-package="com.rabbit.service" />  是service还是controller自己要看清楚,

3.  缓存方法必须是public的,好像不能嵌套缓存,没有试过

4.  cacheManager.setDefaultExpiration(30000); 设置太小,容易出现

org.springframework.data.redis.RedisConnectionFailureException: java.net.SocketTimeoutException: Read timed out; nested exception is redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: Read timed out

5.  缓存对象必须系列化implements Serializable,否则会报错

6. 通过redis-cli 看看缓存里面的内容,可以清空,看看结果怎么样(还有很多命令,可以试下。)

  ./redis-cli

keys *

flushall



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值