数据缓存---Spring Redis Cache 缓存
2016-01-27 11:39
781 查看
数据缓存是数据处理里面重要的一环,尤其针对大量查询的时候,缓存是必不可少的步骤,能够极大的提高性能。缓存的方案有很多种,这里一起来试试Redis. Redis是何方圣神,不多说了,哈哈,后面再专门出一个Redis的,很久就想体验一把。
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)
<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();
}
}
有几个坑,不然会虽然配置了,但是缓存不起作用。这里记下备忘:
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
1.Redis安装运行
wget http://download.redis.io/releases/redis-3.0.6.tar.gztar 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
相关文章推荐
- scala实现读取redis
- python-从redis数据库中读数据
- PHP扩展redis使用手册
- Java连接Vmware中的redis
- Redis安装部署
- Linux下安装Redis并设置相关服务
- Yii2.0使用Redis使用技巧缓存
- redis 替代php文件存储session
- 关于Redis持久化
- redis的数据类型
- Redis的学习与使用
- redis的简单安装配置
- spring整合redis客户端及缓存接口设计(转)
- Redis持久化方式介绍
- php linux上redis扩展安装
- [Redis] redis-cli 命令总结
- disconf-基于xml分布式配置管理redis
- spring整合redis缓存
- spring整合redis客户端及缓存接口设计
- Redis EXISTS命令耗时过长case排查