您的位置:首页 > 数据库 > Redis

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

2016-01-27 11:39 781 查看
数据缓存是数据处理里面重要的一环,尤其针对大量查询的时候,缓存是必不可少的步骤,能够极大的提高性能。缓存的方案有很多种,这里一起来试试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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: